728x90
TLS 인증서를 활용한 통신 이해
SSL 통신 과정 이해
- 응용계층인 HTTP와 TCP계층사이에서 작동,
- 어플리케이션에 독립적 -> HTTP제어를 통한 유연성
- 데이터의 암호화 (기밀성), 데이터 무결성, 서버인증기능, 클라이언트 인증기능
Certificate를 보장하는 방법! 인증기관(CA)
그림 출처: https://docs.pexip.com/admin/certificate_management.htm#infinity_usage
kubernetes의 인증서 위치
$ sudo ls /etc/kubernetes/pki
apiserver-etcd-client.crt apiserver-kubelet-client.crt apiserver.crt ca.crt etcd front-proxy-ca.key front-proxy-client.key sa.pub
apiserver-etcd-client.key apiserver-kubelet-client.key apiserver.key ca.key front-proxy-ca.crt front-proxy-client.crt sa.key
$ sudo ls /etc/kubernetes/pki/etcd
ca.crt ca.key healthcheck-client.crt healthcheck-client.key peer.crt peer.key server.crt server.key
정확한 TLS 인증서 사용 점검
- 적절한 키를 사용하는지 확인하려면 manifests 파일에서 실행하는 certificate 확인 필요
- 적절한 키를 사용하지 않으면 에러가 발생
- 인증서의 인증기간은 1년이므로 만료전에 반드시 확인할 것
$ sudo ls /etc/kubernetes/manifests/
etcd.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml
- Kubelet의 위치는 조금 다름
$ sudo ls /var/lib/kubelet/pki
kubelet-client-2019-07-09-12-44-22.pem kubelet.crt
kubelet-client-2019-07-09-12-44-54.pem kubelet.key
kubelet-client-current.pem
$ sudo ls /var/lib/kubelet/
config.yaml cpu_manager_state device-plugins kubeadm-flags.env pki plugins plugins_registry pod-resources pods
$ sudo cat /var/lib/kubelet/config.yaml
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 0s
enabled: true
x509:
clientCAFile: /etc/kubernetes/pki/ca.crt
...
TLS 인증서를 올바르지 않을 때 발생하는 현상 확인하기
- 먼저 현재 MASTER 노드의 상태를 스냅샷으로 저장하라
- Kube-apiserver.yaml을 찾아 특정 경로를 수정하는 방식으로 certificate를 찾을 수 없도록 만들어라
인증서 정보 확인하기
- Issuer: CA 인증기관
- Validity: 사용가능기간
- Subject: 승인받은사람
- Subject Public Key Info: 인증서의 공개키
$ sudo openssl x509 -in <certificate> -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 4587057929670179001 (0x3fa880e23e2138b9)
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN = etcd-ca
Validity
Not Before: Dec 26 12:33:52 2020 GMT
Not After : Jan 19 08:14:07 2022 GMT
Subject: O = system:masters, CN = kube-apiserver-etcd-client
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:b0:1e:03:6f:97:9e:c9:49:11:84:86:72:1d:cf:
f3:13:84:df:f9:31:d3:2b:f8:4b:ab:b7:ff:65:58:
4c:09:ae:d9:c5:4d:28:7f:45:48:50:3f:6d:d2:79:
59:9b:f0:8c:dd:f1:ac:95:db:9b:7f:d7:87:29:da:
...
인증서 목록
인증서 사용기간은 1년 conf 는 파일 내부에 인증서가 있음
각각의 CA 인증기관이 다름
CERTIFICATE | RESIDUAL TIME | Certificate Path | CERTIFICATE AUTHORITY |
---|---|---|---|
admin.conf | 365d | /etc/kubernetes | |
apiserver | 365d | /etc/kubernetes/pki | ca |
apiserver-etcd-client | 365d | /etc/kubernetes/pki/etcd | etcd-ca |
apiserver-kubelet-client | 365d | /etc/kubernetes/pki | ca |
controller-manager.conf | 365d | /etc/kubernetes/pki | |
etcd-healthcheck-client | 365d | /etc/kubernetes/pki/etcd | etcd-ca |
etcd-peer | 365d | /etc/kubernetes/pki/etcd | etcd-ca |
etcd-server | 365d | /etc/kubernetes/pki/etcd | etcd-ca |
front-proxy-client | 365d | /etc/kubernetes/pki | front-proxy-ca |
scheduler.conf | 365d | /etc/kubernetes |
CA 목록
CA는 사용기간이 10년
CERTIFICATE AUTHORITY | RESIDUAL TIME | Certificate Path |
---|---|---|
ca | 10y | /etc/kubernetes/pki |
etcd-ca | 10y | /etc/kubernetes/pki/etcd |
front-proxy-ca | 10y | /etc/kubernetes/pki |
참고: front-proxy 인증서는 kube-proxy에서 API 서버 확장을 지원할 때만 kube-proxy에서 필요하다
모든 인증서 갱신하기
https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/
Check certificate expiration
kubeadm alpha certs check-expiration
Automatic certificate renewal
- kubeadm은 컨트롤 플레인을 업그레이드하면 모든 인증서를 자동으로 갱신
Manual certificate renewal
kubeadm alpha certs renew all
실습
- 인증서 목록 정보 및 기간 정보 확인 명령어
kubeadm alpha certs check-expiration
$ sudo kubeadm alpha certs check-expiration
Command "check-expiration" is deprecated, please use the same command under "kubeadm certs"
[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Jan 19, 2022 08:15 UTC 364d no
apiserver Jan 19, 2022 08:14 UTC 364d ca no
apiserver-etcd-client Jan 19, 2022 08:14 UTC 364d etcd-ca no
apiserver-kubelet-client Jan 19, 2022 08:14 UTC 364d ca no
controller-manager.conf Dec 26, 2021 12:33 UTC 340d no
etcd-healthcheck-client Dec 26, 2021 12:33 UTC 340d etcd-ca no
etcd-peer Dec 26, 2021 12:33 UTC 340d etcd-ca no
etcd-server Dec 26, 2021 12:33 UTC 340d etcd-ca no
front-proxy-client Jan 19, 2022 08:14 UTC 364d front-proxy-ca no
scheduler.conf Dec 26, 2021 12:33 UTC 340d no
CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
ca Dec 24, 2030 12:33 UTC 9y no
etcd-ca Dec 24, 2030 12:33 UTC 9y no
front-proxy-ca Dec 24, 2030 12:33 UTC 9y no
인증서 전체 목록 갱신
CA 인증서 기간은 갱신되지 않음
클라이언트 들의 경우 클라이언트 컨테이너들에서 필요할때 파일을 받아들여서 갱신함
$ sudo kubeadm alpha certs renew all
연습문제
- Apiserver가 사용하는 ca.crt 정보를 텍스트 형태로 출력하라
- ca.crt의 CN은 무엇인가?
- ca.crt를 이슈화한 CN은 무엇인가?
728x90
'개발강의정리 > DevOps' 카테고리의 다른 글
[데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - kube config 파일을 사용한 인증 (0) | 2021.01.20 |
---|---|
[데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - TLS 인증서를 활용한 유저 생성하기 (0) | 2021.01.20 |
[데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - Accounts (0) | 2021.01.20 |
[데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - 보안을 위한 다양한 리소스 (0) | 2021.01.20 |
[데브옵스를 위한 쿠버네티스 마스터] 클러스터 유지와 보안, 트러블슈팅 - 백업과 복원 방법 (0) | 2021.01.20 |
댓글