TL; DR
-
아래의 명령어는 kubernetes 1.19 버전에서 진행하였습니다.
-
인증서 생성
kubectl create secret tls ${secret-tls-name} --key ${tls-key} --cert ${tls-cert} -n ${namespace} --save-config- 인증서 생성(yaml)
kubectl create secret tls ${secret-tls-name} --key ${tls-key} --cert ${tls-cert} -n ${namespace} --dry-run=client -o yaml > secret.yaml- 인증서 교체
kubectl create secret tls ${secret-tls-name} --key ${tls-key} --cert ${tls-cert} -n ${namespace} --dry-run=client -o yaml | kubectl apply -f -소개
- 쿠버네티스는 클러스터 외부에서 들어오는 L7 트래픽을 처리하기 위해 ingress resource를 사용합니다.
- 이 때, TLS 기능을 사용하는 경우 다음과 같은 형식으로 secret resource를 생성해야 합니다.
apiVersion: v1
kind: Secret
metadata:
name: example-secret-tls
data:
tls.crt: # base64 encoded cert
tls.key: # base64 encoded key
type: kubernetes.io/tls- 그리고 ingress resource yaml 명세의 .spec.tls[].secretName에 생성한 secret의 이름을 지정해야 합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
tls:
- hosts:
- example.foo.com
secretName: example-secret-tls
rules:
- host: example.foo.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: bar
port:
number: 80인증서 생성
- 직접 key와 cert를 base64로 인코딩한 후에 secret resource를 생성해도 되지만 번거롭습니다.
- kubectl create secret tls 명령어를 이용하면 손 쉽게 ingress에서 사용할 tls secret을 생성할 수 있습니다.
kubectl create secret tls ${secret-tls-name} --key ${tls-key} --cert ${tls-cert} -n ${namespace} --save-config`인증서 교체
- --dry-run 옵션과 -o yaml 옵션을 이용하여 kubectl create secret tls 명령으로부터 yaml 명세를 얻어낼 수 있고, 해당 yaml을 이용하여 인증서를 교체할 수 있습니다.
kubectl create secret tls ${secret-tls-name} --key ${tls-key} --cert ${tls-cert} -n ${namespace} --dry-run -o yaml | kubectl apply -f -
