인그레스로 SSL 인증서를 설정하면 파드 각각에 SSL 설정을 따로 할 필요가 없어 편하다.
SSL 인증서 기한이 만료되어도 인그레스에만 인증서를 업데이트하면 된다.
일반적으로 CA에서 인증서를 발급하여 사용하지만, 개인적으로는 테스트 목적이기때문에 사설 인증서를 생성하여 사용한다.
-- 인증서 생성
root@k8s-master1:~# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=kube-book.com"
Generating a RSA private key
.......................................+++++
..................+++++
writing new private key to 'tls.key'
-- 인증서 확인
root@k8s-master1:~# ls
tls.crt tls.key
1번에서 생성한 cert와key로 시크릿을 생성한다
-- 시크릿 생성
root@k8s-master1:~# kubectl create secret tls tlssecret --key tls.key --cert tls.crt
secret/tlssecret created
-- 시크릿 확인
root@k8s-master1:~# kubectl get secrets tlssecret
NAME TYPE DATA AGE
tlssecret kubernetes.io/tls 2 2m30s
.spec 하위 필드로 .tls[].secretName 필드에 시크릿 명을 설정한다.
root@k8s-master1:~# vi ingress-ssl.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-ssl
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
spec:
tls:
- hosts:
- localhost
secretName: tlssecret
rules:
- host: localhost
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: s1
port:
number: 80