4.1.5.2 NGINX Ingress Controller에서 TLS termination(OCI LB 레벨)
NGINX Ingress Controller 설치
SSL 인증서를 secret으로 등록하기
SSL 인증서를 발급받습니다. 여기서는 Self-Signed 인증서가 아닌 무료 인증서를 사용하겠습니다.
압축파일을 풀면 다음 세가지 파일이 포함되어 있습니다.
kubectl 사용이 가능한 Cloud Shell 또는 작업환경에 접속합니다.
발급받은 인증서 Zip 파일을 업로드 하고, 압축을 해제합니다.
ingress가 설치될 namespace에 인증서 파일을 이용하여, secret을 만듭니다.
kubectl create namespace ingress-nginx kubectl create secret tls ssl-certificate-secret-thekoguryo.xyz --key private.key --cert certificate.crt -n ingress-nginx
Ingress Controller 설치
kubectl 사용이 가능한 Cloud Shell 또는 작업환경에 접속합니다.
nginx ingress controller 설치할 파일 deploy.yaml을 다운로드 받습니다.
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.0/deploy/static/provider/cloud/deploy.yaml
ingress-nginx-controller의 Load Balancer Service 유형에 대한 설정을 annotation으로 추가합니다.
metadata 하위에 Load balancer를 위한 annotations 들을 추가합니다.
- SSL 포트와 SSL 인증서를 등록해 줍니다.
- WAF, WAA 등도 동작을 위해 OCI Load Balancer 유형으로 하고, Listener를 HTTP 프로토콜은 지정합니다.
spec.ports 하위에 https의 targetPort를 http로 변경합니다.
--- apiVersion: v1 kind: Service metadata: labels: ... name: ingress-nginx-controller namespace: ingress-nginx annotations: oci.oraclecloud.com/load-balancer-type: "lb" service.beta.kubernetes.io/oci-load-balancer-shape: "flexible" service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "10" service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "10" service.beta.kubernetes.io/oci-load-balancer-backend-protocol: "HTTP" service.beta.kubernetes.io/oci-load-balancer-ssl-ports: "443" service.beta.kubernetes.io/oci-load-balancer-tls-secret: ssl-certificate-secret-thekoguryo.xyz spec: loadBalancerIP: 152.69.xxx.xxx ... ports: - appProtocol: http name: http port: 80 protocol: TCP targetPort: http - appProtocol: https name: https port: 443 protocol: TCP targetPort: http ... type: LoadBalancer ...
다음 명령으로 NGINX Ingress Controller를 설치합니다.
kubectl apply -f deploy.yaml
설치 확인
kubectl get all -n ingress-nginx
OCI 콘솔에 로그인합니다.
좌측 상단 햄버거 메뉴에서 Networking > Load Balancers로 이동합니다.
IP 주소를 통해 ingress controller와 연동된 Load Balancer를 확인후 클릭합니다.
생성된 OCI Load Balancer의 Listeners를 확인합니다.
- 프로토콜이 HTTP(80), HTTPS(443)으로 설정되고 HTTPS에는 SSL 인증서가 등록된 것을 볼 수 있습니다.
DNS 등록
발급한 SSL 인증서가 와일드카드 인증서가 아닌, 단일 인증서라 편의상 도메인 구입 사이트에서 직접 등록하겠습니다.
도메인을 구입한 사이트로 이동합니다.
DNS 관리화면에서 A 타입으로 ingress controller의 Public IP를 등록합니다.
글로벌하게 DNS 정보가 업데이트되는 것은 시간이 걸릴 수 있습니다.
테스트
이전 테스트 앱을 아래 yaml 파일로 일부 수정하여 배포합니다.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-path-basic spec: ingressClassName: nginx rules: - host: www.thekoguryo.xyz http: paths: - path: /blue pathType: Prefix backend: service: name: nginx-blue-svc port: number: 80 - path: /green pathType: Prefix backend: service: name: nginx-green-svc port: number: 80
https 로 애플리케이션을 접속합니다. 인증서 오류없이 HTTPS로 연결되는 것을 볼 수 있습니다.
인증서가 유효한지 확인합니다. 발급한 SSL 인증서가 정상 등록된 것을 알 수 있습니다.
이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.