CKA

TLS Certificates in Kubernetes

백셀건전지 2021. 9. 25. 11:58

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)
    1. openssl genrsa -out ca.key 2048 : key 생성
    2. openssl req -new -key ca.key -subj "/CN=KUBERNETES-CA" -out ca.csr : Certificate Signing Request 생성
    3. openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt : Certificate request
  • Client side certificates(Admin user 예시)
    1. openssl genrsa -out admin.key 2048
    2. openssl req -new -key admin.key -subj "/CN=kube-admin/O=system:masters" -out admin.csr : Certificate Signing Request 생성. O 변수는 그룹 변수
    3. 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 방법

  1. kube-apiserver.yaml 파일의 옵션에서 key파일 정보 확인
  2. openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout : crt 정보 확인 명령어
  3. 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