Certified Kubernetes Administration - 47
2024-06-22
- Kubernetes
- Cloud
Kubernetes 클러스터에서 TLS 인증서 설정
기본 개념
-
서버 인증서 (Server Certificates): 서버의 신뢰성을 보장하고 클라이언트와의 통신을 암호화.
-
루트 인증서 (Root Certificates): 인증 기관(CA)이 서버 인증서를 서명할 때 사용하는 인증서.
-
클라이언트 인증서 (Client Certificates): 클라이언트가 서버에 자신을 인증하는 데 사용.
인증서 명명 규칙
-
공개 키 인증서:
.crt
또는.pem
확장자 (예: server.crt, server.pem) -
개인 키:
.key
또는-key.pem
확장자 (예: server.key, server-key.pem)
Kubernetes 클러스터의 주요 구성 요소
-
서버 구성 요소:
-
kube-apiserver: 클러스터의 API 서버.
-
etcd 서버: 클러스터의 상태 정보를 저장.
-
kubelet: 각 노드에서 실행되며, 노드와 통신.
-
-
클라이언트 구성 요소:
-
kubectl: 관리자가 클러스터에 접근하는 도구.
-
kube-scheduler: 파드를 스케줄링하는 컴포넌트.
-
kube-controller-manager: 클러스터 상태를 관리하는 컴포넌트.
-
kube-proxy: 네트워크 프록시.
-
인증서 생성
-
CA 인증서 생성:
-
개인 키 생성:
openssl genrsa -out ca.key 2048
-
인증서 서명 요청(CSR) 생성:
openssl req -new -key ca.key -subj "/CN=Kubernetes-CA" -out ca.csr
-
인증서 생성:
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
-
-
클라이언트 인증서 생성:
-
예:
kubectl
,kube-scheduler
,kube-controller-manager
,kube-proxy
-
개인 키 생성:
openssl genrsa -out admin.key 2048
-
CSR 생성:
openssl req -new -key admin.key -subj "/CN=admin/O=system:masters" -out admin.csr
-
인증서 생성:
openssl x509 -req -in admin.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out admin.crt
-
-
서버 인증서 생성:
-
예:
kube-apiserver
,etcd
,kubelet
-
개인 키 생성:
openssl genrsa -out apiserver.key 2048
-
OpenSSL 구성 파일 생성:
[req] req_extensions = v3_req distinguished_name = req_distinguished_name [req_distinguished_name] [v3_req] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = kubernetes DNS.2 = kubernetes.default DNS.3 = kubernetes.default.svc DNS.4 = kubernetes.default.svc.cluster.local IP.1 = 10.96.0.1
-
CSR 생성:
openssl req -new -key apiserver.key -subj "/CN=kube-apiserver" -out apiserver.csr -config openssl.cnf
-
인증서 생성:
openssl x509 -req -in apiserver.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out apiserver.crt -extensions v3_req -extfile openssl.cnf
-
클러스터 설정
-
인증서와 키 파일을 관련 컴포넌트의 설정 파일에 지정.
-
kube-apiserver
예시:--client-ca-file=/etc/kubernetes/pki/ca.crt --tls-cert-file=/etc/kubernetes/pki/apiserver.crt --tls-private-key-file=/etc/kubernetes/pki/apiserver.key --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
클러스터의 인증서 확인
-
클러스터 구성 방식 파악: 클러스터가 kubeadm을 사용하여 설정되었는지 여부 확인.
-
API 서버 설정 파일 확인:
/etc/kubernetes/manifests/kube-apiserver.yaml
파일에서 인증서 파일 경로 파악. -
인증서 정보 조회:
-
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout
-
중요 정보: 주체(Subject), 대체 이름(Alt Names), 유효 기간(Validity), 발급자(Issuer)
-
문제 해결
-
로그 확인:
kubectl logs
명령어를 사용하여 로그 조회. -
도커 컨테이너 로그 확인:
docker ps -a
와docker logs
명령어 사용.
Certified ...
Certified ...