k8s ingress https

김세벽·2024년 7월 17일
post-thumbnail

1. cert-manager,ingress-nginx 설치 확인

위와 같이 Running 상태의 Pod가 보이면 cert-manager와 ingress-nginx가 성공적으로 설치된 것입니다.
$ kubectl get pods -n cert-manager
$ kubectl get pods -n ingress-nginx

2. Target Service, Deployment/Pod 배포

deployment

$ vim deploy-service.yaml
//
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service-01
  namespace: ingress-nginx
spec:
  type: LoadBalancer
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: ingress-nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
          protocol: TCP
//

yaml파일 작성

Service, Deployment/Pod 배포

3. Ingress 배포

$ vim ingress.yaml
//
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: ingress-nginx
  annotations:
    # 리다이렉트를 활성화하는 어노테이션
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    # ClusterIssuer 참조
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    # 내 도메인
    - ksb-test.r-e.kr
    # TLS 인증서를 저장할 Secret
    secretName: ksb-test.r-e.kr-tls
  rules:
  - host: ksb-test.r-e.kr
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service-01
            port:
              number: 80
//

yaml파일 작성

Ingress 배포

아직 Issuer(nginx-issuer)가 없는 상태이기 때문에 Issuing 상태 및 Ready:False 상태를 가진 Certificate가 생성됩니다.

기존에 존재하는 Secret이 없기 때문에 임시로 임시 Private Key를 생성합니다. 그 결과 아래와 같이 Secret이 생성됩니다.

  • Certificate가 인증받기 위한 요청을 처리하기 위해 CertificateRequest 오브젝트를 자동으로 생성합니다. 이 때 Secret의 Private Key를 통한 PEM encoded 정보가 Request에 포함됩니다.
  • 이 역시 아직 Issuer가 존재하지 않기 때문에, Pending 상태로 유지됩니다.

4. Issuer 생성

$ vim clusterissuer.yaml
//
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: giroro3527@gmail.com
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          ingressClassName: nginx
//

yaml파일 작성

  • 인증을 위해 CA 서버로 Let’s Encrypt(https://letsencrypt.org/)를 사용합니다.
  • Let’s Encrypt는 staging/production이 구분되어 있습니다.
  • 일정 시간 내 여러번 인증서를 요청하는 경우 일정 시간 내에는 인증서 발급이 제한되므로 테스트시에는 staging 경로를 사용할 수 있도록 합니다.

issuer 생성

profile
normal

0개의 댓글