본문 바로가기
Cloud/Kubernetes

HTTPS통신을 위한 Nginx Ingress 설정

by _Nate 2023. 4. 13.
반응형

이번 포스팅에서는 HTTPS통신을 위해 Nginx Ingress + cert-manager를 구성해 보겠다.


1. cert-manager

 

kubectl apply

Learn how to install cert-manager using kubectl and static manifests

cert-manager.io

 

2. self-signed Issuer

  • cert-manager는 다양한 Issuer를 통해 인증서 관리가 가능하다.

https://cert-manager.io/docs/

  • 테스트 용도를 위한 구축으로 실제 인증서가 없기 때문에 이번 포스팅에서는 self-signed issuer를 사용한다.
  • Issuer는 Namespace별로 종속되는 Issuer와 Cluster전체에 적용 가능한 ClusterIssuer가 존재한다.

 

3. Issuer 및 certificate 생성

  • Namespace에 종속되지 않는 ClusterIssuer를 생성한다.
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: selfsigned-cluster-issuer
spec:
  selfSigned: {}

 

  • 위에 생성한 ClusterIssuer를 참조하는 Certificate를 생성한다.
  • Certificate는 Namespace별로 종속되며 해당 Certificate를 통해 key를 갖는 secret이 생성된다.
  • 해당 secret을 통해 Namespace내의 서비스들은 HTTPS통신이 가능하다.
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: my-selfsigned-ca
  namespace: test
spec:
  isCA: true
  commonName: example.test.com
  secretName: example-secret
  privateKey:
    algorithm: RSA
    size: 2048
  issuerRef:
    name: selfsigned-cluster-issuer
    kind: ClusterIssuer
    group: cert-manager.io

 

  • 각각의 resource가 생성되었는지 확인한다.
test@DESKTOP-F55SF6V:~/cert-manager (⎈|test-cluster:default)# k get clusterissuer
NAME                        READY   AGE
selfsigned-cluster-issuer   True    27h

 

test@DESKTOP-F55SF6V:~/cert-manager (⎈|test-cluster:default)# k get cert -n test
NAME               READY   SECRET           AGE
my-selfsigned-ca   True    example-secret   38m

 

test@DESKTOP-F55SF6V:~/cert-manager (⎈|test-cluster:default)# k get secret -n test
NAME                 TYPE                             DATA   AGE
example-secret       kubernetes.io/tls                3      17m

 

4. Ingress 설정하기

  • 생성된 secret을 참고하여 Ingress설정을 진행한다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
  name: test-ing
  namespace: test
spec:
  ingressClassName: nginx
  rules:
  - host: example.test.com
    http:
      paths:
      - backend:
          service:
            name: nginx-svc
            port:
              number: 80
        path: /
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - example.test.com
    secretName: example-secret

 

  • Ingress를 생성 후 https://example.test.com 을 호출해보면 아래와 같이 접속되는 것을 확인할 수 있다.
  • 정식 인증서가 아니라 에러는 나지만 테스트용도로 사용하기엔 문제가 없다.

반응형

최근 Let's Encrypt나 CSP에서 제공하는 다른 Issuer들도 많이 사용한다.

갱신기간을 정해두고 자동으로 관리해준다는 점에서 cert-manager는 큰 장점이 있다.

반응형