공부/Kubernetes

nginx-ingress의 SSL/TLS/HTTPS 설정

토고미 2021. 7. 12. 17:25

이번 포스팅은 자세한 설명은 하지 않고

Ingress 컨트롤러가 띄워져있다는 가정하에, Ingress 설정을 어떻게 하는지만 올려본다.

 

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: togomi-api-server-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: "/destinationAPI" # 어느 API PATH로 보낼지
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/secure-backends: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  tls:
  - hosts:
    - togomi.api-server.{Ingress 컨트롤러의 로드밸런서 IP}
    secretName: togomi-api-server-ingress
  rules:
  - host: togomi.api-server.{Ingress 컨트롤러의 로드밸런서 IP}
    http:
      paths:
      - path: /test # 어떤 API가 왔을 때 라우팅 할지
        backend:
          serviceName: togomi-api-server-ingress-service # ClusterIP로 정의된 서비스
          servicePort: 443

기본적인 설정을 제외하고 TLS 통신을 위한 것만 보자면

 

nginx.ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"

이 두개의 annotation이 들어가야 ingress가 해당 서비스와 https로 통신을 한다.

 

또,  https 통신에 필요한 인증서와 키는 spec.tls에 시크릿으로서 만들어서 설정해준다.

시크릿은 Ingress 객체가 만들어지는 네임스페이스와 같은 곳에 있어야 한다.

 

마지막으로, backend.serviceName에 적어주는 서비스는 반드시 ClusterIP여야 한다.

 

그 이외에는 기본 ingress 설정과 같다.