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-api server 통신을 위한 key pair
- kube-api server(client) <--> ETCD server(server) 통신을 위한 key pair. server용 key pair도 사용 가능하고 apiserver-etcd-client 이름으로 key pair 따로 생성하여 사용 가능
- kube-api server(client) <--> kubelet server(server) 통신을 위한 key pair. server용 key pair도 사용 가능하고 apiserver-kubelet-client 이름으로 key pair 따로 생성하여 사용 가능
- kubelet server(client) <--> kube-api server(server) 통신을 위한 key pair. server용 key pair도 사용 가능하고 kubelet-client 이름으로 key pair 따로 생성하여 사용 가능
Key 생성 방법
- Certificate Authority (CA)
- openssl genrsa -out ca.key 2048 : key 생성
- openssl req -new -key ca.key -subj "/CN=KUBERNETES-CA" -out ca.csr : Certificate Signing Request 생성
- openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt : Certificate request
- Client side certificates(Admin user 예시)
- openssl genrsa -out admin.key 2048
- openssl req -new -key admin.key -subj "/CN=kube-admin/O=system:masters" -out admin.csr : Certificate Signing Request 생성. O 변수는 그룹 변수
- openssl x509 -req -in admin.csr -CA ca.crt -CAkey ca.key -out admin.crt : Certificate request
- curl 할 때 --key admin.key --cert admin.crt --cacert ca.crt 로 옵션 주면 통신 가능
- K8S Cluster의 Config 리소스에 키 정보 저장하여 사용
- 각 Components가 서로를 인증하려면 CA의 인증서 복사본을 다 가지고 있어야 함
- Server side Certificates
- etcd-server는 peer etcd server의 key 정보도 etcd.yaml에 옵션으로 등록하면 peer간 보안 통신이 가능하다.
- kube-api server는 모든 components와 통신하기 때문에 인증서에 많은 alias가 등록되어 있다.
- kubernetes
- kubernetes.default
- kubernetes.default.svc
- kubernetes.default.svc.cluster.local
- kube-apiserver pod IP
- kube-apiserver host IP
- alias는 csr 생성 시에 옵션으로 -config openssl.cnf 를 주고, openssl.cnf에 [alt_names]에 alias를 추가한다.
- kubelet의 인증서명은 worker node 명으로 생성된다. Group명에는 SYSTEM:NODES 를 추가해준다.
- 각 node의 kubelet-config.yaml 파일에 키 정보를 등록해 주어야 한다.
Certificate Details check 방법
- kube-apiserver.yaml 파일의 옵션에서 key파일 정보 확인
- openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout : crt 정보 확인 명령어
- Certificate의 issuer과 Expiration date를 잘 확인하자!
'CKA' 카테고리의 다른 글
KubeConfig (0) | 2021.09.27 |
---|---|
Certificates API (0) | 2021.09.25 |
TLS 이론 (0) | 2021.09.23 |
Authentication (0) | 2021.09.17 |
Cluster Maintenance (0) | 2021.09.17 |