ingress-nginx-controller 를 적용 후에 https 로 브라우저에서 통신을 하면 아래와 같이 "Kubernetes Ingress Controller Fake Certificate" 인증서가 사용되게 된다.

이는 ingress controller 가 만든 기본 인증서이며, nginx pod 로 들어오는 모든 통신에 적용된다. 그렇다면 이 기본 인증서가 아닌 전용 인증서를 적용하려면 어떻게 할까? Ingress 에 tls Secret 을 적용하면 된다. nginx pod 와 ingress 에 모두 인증서가 존재하면 ingress 의 인증서만 사용되기 때문이다.

 

1. 사설 인증서 생성

https://secjong.tistory.com/130 를 참고하여 사설 인증서를 생성한다.

 

2. tls Secret 생성

아래와 같은 커맨드로 쿠버네티스 클러스터의 특정 네임스페이스에 tls 타입의 Secret 을 생성한다.

// tls 타입 Secret 생성
$ kubectl -n sample-ns create secret tls sample-tls-secret --key=tls.key --cert=tls.crt

// 확인
$ kubectl -n sample-ns get secret sample-tls-secret -o yaml

 

3. Ingress 에 tls 적용

아래와 같은 커맨드로 적용할 Ingress 를 수정하여 spec.tls[].secretName 에 Secret 이름과 spec.tls[].hosts[] 에 적용할 도메인 목록을 지정한다.

$ kubectl -n sample-ns edit ingress sample-portal-ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  ...
spec:
  ingressClassName: nginx
  rules:
  - host: portal.com
    http:
      paths:
      - backend:
          service:
            name: portal-api
            port:
              number: 80
        path: /
        pathType: Prefix
  # 아래 부분을 추가
  tls:
  - hosts:
    - portal.com
    secretName: sample-tls-secret
...

 

4. 확인

다시 동일한 주소로 접속해보면 해당 도메인의 전용 인증서로 나타난다.

 

참고로, Ingress 에 tls 를 적용하게 되면, 자동으로 ssl-redirect: "true" 가 기본값으로 적용된다. 따라서, http 로 요청시 자동으로 443 포트(즉, https 로) 리다이렉션 된다. 만약 이러한 리다이렉션을 하지 않기 위해서는 아래처럼 명시적으로 ssl-redirect: "false" 를 설정해야 한다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,