티스토리 뷰

쿠버네티스 클러스터에 ingress 컨트롤러가 설치되어 있는지 확인한다.
만약 없다면 설치하고 설치한 ingress 컨트롤러 타입을 기억하고 인증서를 발급할 도메인을 준비한다. (예: abc.com)

1. Service 배포

# vi deploy-web.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: pghmv2sm.kr.private-ncr.ntruss.com/webweb:1.0 # 컨테이너 이미지는 알아서 변경
        ports:
        - containerPort: 80
      imagePullSecrets:
      - name: regcred
      nodeSelector:
        ncloud.com/nks-nodepool: kr2-node-01
---
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  type: NodePort
  selector:
    app: web
  ports:
    - protocol: TCP
      port: 80
kubectl create -f deploy-web.yaml

2. cert-manager 배포

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.3/cert-manager.yaml
...


# cert-manager 설치 확인
kubectl get pod -n cert-manager

3. Let's Encrypt issuer 구성

아래 yaml 파일에서 이메일 주소(spec.acme.email)와 ingress 타입(spec.acme.solvers.selector[0].http01.ingrss.class)을 확인하고 nginx 또는 traefik 등 자신이 사용할 ingress 타입을 기입한다.

# vi cluster-issuer.yaml

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory # The ACME server URL
    email: user@example.com  # Email address used for ACME registration
    privateKeySecretRef: # Name of a secret used to store the ACME account private key
      name: letsencrypt-prod
    solvers:  # Enable the HTTP-01 challenge provider
    - http01:
      ingress:
        class: nginx  # 자신의 ingress 컨트롤러 타입 기재

cluster issuer 생성 및 생성 여부 확인

kubectl create -f cluster-issuer.yaml

# Issuer 상태 확인
kubectl describe clusterissuer letsencrypt-prod

4. TLS Ingress 리소스 배포

# vi web-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
  annotations:
      kubernetes.io/tls-acme: "true"
      nginx.ingress.kubernetes.io/rewrite-target: /
      nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
      nginx.ingress.kubernetes.io/ssl-redirect: "true"
      nginx.ingress.kubernetes.io/proxy-body-size: "100M"
      cert-manager.io/cluster-issuer: letsencrypt-prod   # 클러스터 이슈어 (cluster-issuer.yaml)에서 지정한 명칭
spec:
  tls:
  - hosts:
    - abc.com                             # 인증서를 적용할 도메인으로 변경
    secretName: web-devbox-kr-cert         # 인증서 key가 저장되는 secret
  rules:
  - host: abc.com                         # 인증서를 적용할 도메인으로 변경
    http:
      paths:
      - path: /
        backend:
          service:
            name: web
            port: 
              number: 80
kubectl create -f web-ingress.yaml

kubectl get certificate -A

kubectl describe certificate web-devbox-kr-cert

kubectl describe secret web-devbox-kr-cert

4. 브라우저로 접속 확인

https://abc.com

'Server & Etc > Kubernetes' 카테고리의 다른 글

Ubuntu 20.04 서버에 K3s 클러스터 구성하기  (0) 2022.05.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크