k8s 30

CKAD(Certified Kubernetes Application Developer) 자격증 후기(2022.05)

들어가며 지난 4월에 CKA 자격증을 취득하였고, 회사 책임님이 CKA를 취득하면 CKAD는 비교적 쉽게 취득할 수 있다고 알려주셔서 바로 CKAD 자격증을 준비하기 시작했다. CKA 자격증 취득 후기 : https://juniquerepo.tistory.com/55 CKA(Certified Kubernetes Administrator) 자격증 후기 (2022.04.05 - v1.22) 들어가며 2019년부터 DevOps 엔지니어로 커리어를 쌓기 시작한 지 어느새 4년차가 되었다. 작년까지 AWS DevOps와 GCP DevOps 자격증을 취득하였고, 올해는 어떤 새로운 자격증을 취득하면 좋을까 하다가 juniquerepo.tistory.com 결론부터 말하자면 CKAD가 더 어려운 느낌이어서 CKA 자..

CKAD 2022.05.04

Service Accounts

User Account: 말 그대로 사용자 Service Account: 외부 application에서 kubernetes api 호출할 때 (ex: prometheus) 사용하는 권한 kubectl create serviceaccount dashboard-sa kubectl get serviceacccount kubectl describe serviceaccount dashboard-sa service account를 생성하면 service account token도 Secret로 함께 생성된다. kubectl describe secret dashboard-sa-token-kbbdm 이 token값을 외부 api application에다가 저장하여 호출할 때 헤더로 붙여서 사용하면 접근 가능 만약 th..

CKA 2021.10.16

Authentication

Node Authentication Node Authorizer 사용자와 kubelet의 요청을 다루는 역할 사용자의 요청 이름이 system node인 것과 node group의 일부에서 오는 요청들은 node authorizer에서 권한 인증함. ABAC(Attribute Based Access Control) Authentication 외부 접근 사용자별 policy 생성해서 관리함 변경이 발생하면 매번 수정하고 kube-api server 다시 띄워야 해서 관리가 어렵다. RBAC(Role Based Access Control) Authentication 권한을 역할로 생성하고, 사용자를 해당 역할과 묶음. K8S Cluster에서 표준화된 권한 관리 방법 Webhook Authenciation ..

CKA 2021.10.16

API Group

Core Group /api Named Group /apis api에 접근하는 방법은 6443 포트로 호출하면 호출 가능한 api 목록 조회 가능(인증서와 함께 curl 날려야) 다른 방법은 kubectl proxy 명령어로 로컬에 proxy 서비스 8001번으로 생성. 여기서 kubeconfig의 credentials와 certificates 사용하여 클러스터에 접근 가능하도록 함. 이렇게 하면 curl 날릴 때마다 인증서 넣지 않아도 되고, 6443 포트가 아닌 8001 포트로 curl 날리면 api 목록이 나온다. kube proxy와 kubectl proxy는 다르다! kubectl proxy는 kube-api server에 접속하기 위해 kubectl utility에 의해 생성된 http pro..

CKA 2021.09.29

KubeConfig

kubectl 명령어 실행시 default로 $HOME/.kube/config 에 config 파일을 확인함. 여기에 key, 인증서, 서버, CA 등의 정보를 저장해 놓으면 매번 kubectl 실행 시에 해당 정보를 적지 않아도 된다. kubeconfig 파일의 세가지 type Cluster 개발, 운영, 혹은 다른 Managed kubernetes 등의 cluster 정보 --server 옵션과 인증서 옵션이 이 곳에 저장됨 config yaml 파일에 certificate-authority에는 ca.crt파일의 절대 경로 입력하는 것이 좋음 certificate-authority-data 값에 ca.crt가 base64로 encode된 값을 넣을 수도 있다. User cluster 에 접근하는 us..

CKA 2021.09.27

Certificates API

누구든 CA key pair로 접근 권한을 얻으면 k8s 환경의 모든 인증서에 접근이 가능하므로, 안전한 곳에 보관해야. K8S의 CA server는 master node 매번 CSR 요청하여 사용자 인증서 수동으로 만드는 것을 대신하기 위해 Certificates API가 있음. 사용 방법 openssl genrsa -out jane.key 2048 openssl req -new -key jane.key -subj "/CN=jane" -out jane.csr jane-csr.yaml 에 kind: CertificateSigningRequest 로 생성. yaml 파일의 spec.request에 cat jane.csr | base64 문자열을 추가 kubectl get csr 명령어로 요청 목록 확인 운..

CKA 2021.09.25

TLS Certificates in Kubernetes

Server Certificates kube-api server는 보안 통신을 위해 apiserver.crt, apiserver.key라는 public/private key pair를 가짐 (key pair name 은 cluster 마다 다를 수 있음) ETCD server와 worker node의 Kubelet server도 public/private key pair 가지고 있음. Client Certificates admin user kube-api server 통신을 위한 key pair kube-scheduler kube-api server 통신을 위한 key pair kube-controller-manager kube-api server 통신을 위한 key pair kube-proxy kube..

CKA 2021.09.25

TLS 이론

Certificate: 두 집단의 transaction 간에 신뢰를 보증하는 용도. 통신이 암호화되었고, 누가 보낸 요청인지 인증서가 보증 Symmetric encryption: 서버에 요청을 보낼 때 평문을 key로 암호화하여 보내지만, key도 함께 보내 해커가 중간에서 암호문과 key를 sniff하면 위험. 같은 키로 암복호화를 하기 때문. Asymmetric encryption: Private key와 public key 동시 사용. 암호문을 복호화하려면 public key에 더해서 private key가 필수적으로 필요함 ssh-keygen : id_rsa(private) id_rsa.pub(public) 서버의 ~/.ssh/authorized_keys에 추가하면 서버는 public key로 l..

CKA 2021.09.23

Authentication

k8s는 user는 생성할 수 없지만, service account는 생성이 가능하다 모든 사용자의 접근은 kube-apiserver에 의해서 조절된다. kubectl 명령어를 사용하던 api를 직접 호출하던, kube-apiserver의 권한 체크를 거침 권한 체크 방법 1. Static password file csv 확장자파일에 user 정보 pw,username,userID,groupID 네 칼럼 형식으로 저장 kube-apiserver.service에 --basic-auth-file=user-details.csv로 저장 후 service restart service restart하면 kubeadm이 자동으로 kube-apiserver pod restart 2. Static token file c..

CKA 2021.09.17

Cluster Maintenance

Worker node가 5분 이상 문제가 발생하면, 그 worker node에 있는 pod들은 terminated되고 다른 worker node에 생김 kubectl drain node-1 명령어로 문제가 있는 worker node의 pod들을 다른 worker node에 띄움. node-1은 수동으로 제한을 풀지 않는 이상 cordon되고 unschedulable로 표시됨 kubectl uncordon node-1 : 제한 풀어서 pod 가 node-1에 schedule되도록 함 kubectl cordon node-1: node-1 에 pod를 unschedule하도록 함 pod가 node에 있을 때 drain하면 pod는 삭제되어 버리므로 주의 K8S Versions v1.22.1 = major.mi..

CKA 2021.09.17