144-152
TLS : 사용자와 서비스간의 통신이 암호화 되도록 함
키는 무작위 숫자와 알파벳의 집합 -> 암호화된 데이터 서버로
키없이는 데이터 복호화 불가능 -> 복사본도 같이 서버로 보냄 -> 해커도 네티워크에 있으니 탈취 가능
대칭 암호화 : 암호화 복호화 키가 같음
비대칭 암호화 : 개인키와 공용키 -> 열쇠와 공용 자물쇠
개인키는 공유 하면 안 됨
키 페어로 여러서버 보안 -> 원하는 만큼 서버에 복사본 둘 수 있음
사용자가 늘어나면 사용자만의 개인키와 공용키를 서버에 배포
openssl genrsa -out my-bank.key 1024
openssl rsa -in my-bank.key -pubout > mybank.pem
키를 이용하더라도 해커가 웹사이트를 복제하여 자신의 서버로 보내는 경우 위험 -> 인증서
서버가 키를 보낼 때 키를 가진 인증서를 보냄
인증서가 누구에게 발급되었는지 확인 가능
인증서 누구나 만들 수 있음 -> 진짜인지 어떻게 확인 누가 만들었는가
생성하면 직접 서명해야함 -> self-signed -> 브라우저에서 확인 가능
CA - 인증서 발급기관
인증서 확인
openssl req -new -key my-bank.key -out my-bank.csr -subj "/C-US/ST=CA/O=MyOrg, Inc./CN=mydomain.com"
CA는 도메인 실소유주 확인 CA가 서명한 인증서
CA공개키 브라우저에 제공
.crt .pem
.key -key.pem
인증서를 활용한 k8s 보안
노드간의 통신 보안 필요 암호화 필요 -> TLS 연결 필요
kube-api server - https 제공 -> 인증서와 키페어 생성 apiserver.crt apiserver.key
etcd server -> etcd.crt etcd.key
kubelet server -> kubelet.crt kublet.key
admin -> kubectl REST API -> admin.crt admin.key
scheduler -> scheduler.crt scheduler.key
controller-manager -> controller-manager.crt controller-manager.key
kube-proxy -> kube-proxy.crt kube-proyx.key
서버 CA로 생성 됨 -> ca.crt ca.key
openssl genrsa -out ca.key 2048 <- Generate Key
openssl req -new -key ca.key -subj "/CN=KUBERNETES-CA" -out ca.csr <- Certificate Signing Request
CN = comman name
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt <- Sign Certificates
openssl genrsa -out admin.key 2048 <- Generate Key
openssl req -new -key admin.key -subj "/CN=KUBERNETES-admin/O=system:masters" -out admin.csr <- Certificate Signing Request
openssl x509 -req -in admin.csr -CA ca.crt -CAkey ca.key -out admin.crt <-CA 인증서를 사용하여 생성
O=system:masters
: 인증서 정보에 그룹 설정을 해야gka
CA루트 인증서 복사본이 각각 필요함
etcd.yaml에 인증서 파일 지정하는 곳이 있음
openssl.cnf
openssl req -new -key apiserver.key -subj \
"/CN=kube-apiserver" -out apiserver.csr -config openssl.cnf
...
[alt_name]
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
clien-ca-file=/var/libe/kubernetes/ca.pem
클라이언트 API 인증서
노드마다 실행 됨 인증서
인증서에 system:node:nodename 지정해야함 -> 그룹을 노드에 추가
인증서 발행기관 인증서 날짜 체크 필수
인증서 요구사항 -> 쿠버네티스 페이지
kubectl 안될경우 컨테이너 런타임으로 컨테이너 로그 확인
Resource: Download Kubernetes Certificate Health Check Spreadsheet
https://github.com/mmumshad/kubernetes-the-hard-way/tree/master/tools
인증서 관리방법
새로운 관리자가 클러스터에 접속 하기 위함 키페어 제공하려면 개인키 만들어서 나에게 인증서 서명요청 옴
증명서 유횩기간이 있음
CA 는 안전한 서버에 따로 저장되어 있음 -> 마스터 노드 CA서버
사용자가 많아지면 자동화된 인증서 관리 -> api가 내장되어 있음
jane.csr을 생성 후, jane-csr.yaml
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
...
spec:
reques: cat jane.csr | base64 | tr -d "\n"
kubectl get csr
kubectl certificate approve jane
컨트롤 매니저에 의하 관리 됨 CSR approving, CSR signing