certificate create

zuckerfrei·2024년 1월 8일
0

Kubernetes

목록 보기
38/63

클러스터를 위한 인증서를 생성하는 방법
openssl, easyrsa, cfssl 같은 다양한 도구 이용 가능하나 강의에서는 openssl을 사용한다.

1. ca 인증서

키 생성

# ca.key 생성
openssl genrsa -out ca.key 2048

csr(certificate signing request) 서명 요청
# ca.csr 생성
openssl req -new -key ca.key -subj "/CN=KUBERNETES-CA" -out ca.csr 

CN = Common Name


sign certificates 서명하기

# ca.crt 생성
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

맨 처음 생성한 ca.key를 사용하여 ca가 서명 자체 서명함
다른 모든 인증서에는 ca 키 페어를 사용하여 서명할 것


2. 클라이언트 인증서

admin user 의 인증서 생성 예시

나머지 클라이언트 인증서(kube-scheduler, kube-controller-manager, kube-proxy) 생성 과정도 동일함

키 생성

# admin.key 생성
openssl genrsa -out admin.key 2048

csr(certificate signing request) 서명 요청
# admin.csr 생성
openssl req -new -key admin.key -subj "/CN=kube-admin/O=system:masters" -out admin.csr

/O=system:masters : 그룹 디테일 추가하는 옵션(시스템 그룹에 속한다는 의미로 적음)

서명하기

# admin.crt 생성
openssl x509 -req in admin.csr -CA ca.crt -CAkey ca.key -out admin.crt

주의) 먼저 생성한 ca 키 페어를 사용하여 클라이언트 인증서에 서명해야 함 → 그래야 클러스터 내에서 유효한 인증서가 됨


3. 서버 인증서

3-1. kube-apiserver 인증서 생성

아래는 모두 같은 것(kube-apiserver)을 의미한다.
kube-apiserver = kubernetes = kubernetes.default = kubernetes.default.svc = kubernetes.default.svc.cluster.local


키 생성
# apiserver.key 생성
openssl genrsa -out apiserver.key 2048

csr 생성
# apiserver.csr 생성
openssl req -new -key apiserver.key -subj "/CN=kube-apiserver" -out apiserver.csr -config openssl.cnf

openssl.cnf 파일 생성 필요

[req]
req_extensions = v3_req
disinguished_name = name
[v3_req] 
basicConstraints = CA:FALSE
keyUsage = nonRepudiation
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
IP.2 = 172.17.0.87

서명

openssl x509 -req -in apiserver.csr -CA ca.crt -CAkey ca.key -out apiserver.crt

3-2. kubelet 인증서 생성

https api 서버로 각 노드에서 실행되며 노드 관리를 함. api server가 노드를 모니터하기 위해 kubelet에 요청을 보냄.
그래서 클러스터 각 노드에 대해 키 페어가 필요함


3-3. etcd 인증서

etcd는 자신만의 CA를 가질 수 있음
그래서 kube-apiserver의 CA와는 다를 수 있음

etcd의 CA를 확인하기 위해서는 /etc/kubernetes/manifests/ 하위의 etcd.yaml 파일 또는 /etc/systemd/system/etcd.service 에 적힌 ca 인증서 경로를 확인해야 함

일반적으로 kube-apiserver의 서버/클라이언트 인증서는 /etc/kubernetes/pki/ 하위에 위치하지만, etcd의 인증서는 /etc/kubernetes/pki/etcd/ 하위에 존재함


인증서 상세정보 확인
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout
controlplane /etc/kubernetes/manifests ➜  openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 6151454940737905825 (0x555e5bad428124a1)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = kubernetes
        Validity
            Not Before: Jan  8 10:50:38 2024 GMT
            Not After : Jan  7 10:50:38 2025 GMT
        Subject: CN = kube-apiserver
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:ae:27:fa:94:91:24:40:be:80:55:4b:aa:c3:2a:
                    8b:d1:7b:90:1e:85:5b:54:73:5e:c7:b6:4c:1d:93:
                    cb:d5:d8:6c:ae:8c:8f:41:fd:ce:a2:96:55:9d:d8:
                    02:93:74:e2:7b:dd:f5:ba:13:a7:5f:ec:7b:f1:52:
 ...
                    c7:90:24:69:05:e4:97:d3:0f:ae:2e:63:1e:12:91:
                    82:92:da:a5:eb:84:47:dc:81:c6:52:8e:b7:b5:1f:
                    23:28:02:e8:b2:3d:e4:45:cd:68:2c:18:c7:ce:02:
                    8d:8e:70:9b:7c:6a:9c:66:21:6a:38:ad:cc:42:8a:
                    b8:2d
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Authority Key Identifier: 
                keyid:40:3D:BE:BF:C5:80:D7:BD:DF:14:BA:06:F8:84:BA:80:DA:33:67:4B

            X509v3 Subject Alternative Name: 
                DNS:controlplane, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP Address:10.96.0.1, IP Address:192.23.247.9
    Signature Algorithm: sha256WithRSAEncryption
         9c:19:80:8b:bc:df:4d:ff:12:72:9a:b5:a7:7f:30:73:ae:41:
         c4:dd:ff:9c:d8:94:8a:a2:83:1c:06:60:36:c3:9f:ea:c5:b9:
...
         a1:90:c8:9b:ff:3a:60:3c:3d:3a:3b:ec:a4:24:6a:72:e8:d8:
         9c:5e:04:87:2a:9a:0d:a4:a2:22:96:0a:84:98:cf:f2:7e:a2:
         42:55:f4:45

초록색 항목 확인
특히 Issuer(발행자), Expiration(만료일) 확인할 것

profile
무설탕 음료를 좋아합니다

0개의 댓글