TLS 인증서를 사용하여 Amazon EKS 애플리케이션의 HTTPS 연결을 활성화하려면 어떻게 해야 하나요?

3분 분량
0

전송 계층 보안(TLS) 인증서를 사용하여 Amazon Elastic Kubernetes Service(Amazon EKS) 애플리케이션의 HTTPS 연결을 활성화하고 싶습니다.

간략한 설명

Amazon EKS 애플리케이션에 대해 HTTPS 연결을 활성화하려면 다음을 수행해야 합니다.

  • 사용자 지정 도메인에 대한 유효한 TLS 인증서를 받습니다.

  • 로드 밸런서 서비스 유형을 사용하여 Kubernetes 서비스를 노출하거나 AWS 로드 밸런서 컨트롤러를 사용해 Kubernetes 수신 개체를 노출합니다(GitHub을 통해).

  • 사용자 지정 도메인을 로드 밸런서 DNS에 연결합니다.

해결 방법

사용자 지정 도메인에 대한 유효한 TLS 인증서를 받습니다.

  1. 사용자 지정 도메인에 대한 공개 AWS Certificate Manager(ACM) 인증서를 요청하거나 자체 TLS 인증서를 ACM에 업로드합니다.

  2. 로드 밸런서의 HTTPS 리스너에 사용할 인증서의 Amazon 리소스 이름(ARN)을 확인합니다.

  3. 샘플 NGINX 배포를 생성하려면 다음 명령을 실행합니다.

$ kubectl create deploy web --image=nginx --port 80 --replicas=3
  1. Amazon EKS 클러스터에 Kubernetes 포드가 배포되었는지 확인하려면 다음 명령을 실행합니다.
$ kubectl get pods -l app=web

참고: 포드 레이블은 app=web입니다. 이 레이블을 서비스 개체 선택기로 사용하여 포드 집합을 확인합니다.

로드 밸런서 서비스 유형을 사용해 Kubernetes 서비스 노출

참고: 애플리케이션 노출에 수신 개체를 이용하려면 수신 개체를 이용해 Kubernetes 노출 섹션으로 건너뛰세요.

  1. service.yaml 매니페스트 파일을 생성하려면, 서비스 유형 **LoadBalancer:**를 사용합니다.
cat <<EOF > loadbalancer.yaml
apiVersion: v1
kind: Service
metadata:
  name: lb-service
  annotations:
    # Note that the backend talks over HTTP.
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
    # TODO: Fill in with the ARN of your certificate.
    service.beta.kubernetes.io/aws-load-balancer-tls-cert: arn:aws:acm:{region}:{user id}:certificate/{id}
    # Only run TLS on the port named "https" below.
    service.beta.kubernetes.io/aws-load-balancer-tls-ports: "https"
    # By default In-tree controller will create a Classic LoadBalancer if you require a NLB uncomment below annotation.
    # service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
spec:
  selector:
    app: web
  ports:
  - name: http
    port: 80
    targetPort: 80
  - name: https
    port: 443
    targetPort: 80
  type: LoadBalancer
EOF
  1. 주석 service.beta.kubernetes.io/aws-load-balancer-tls-cert를 편집하여 ACM의 ARN을 포함하도록 합니다.

  2. loadbalancer.yaml 파일을 적용하려면 다음 명령을 실행하세요.

$ kubectl create -f loadbalancer.yaml
  1. 사용자 지정 도메인을 로드 밸런서의 DNS에 연결 섹션으로 건너뜁니다.

수집 개체를 사용해 Kubernetes 서비스 노출

참고: 다음 해결 방법은 Amazon EKS 클러스터에 AWS 로드 밸런서 컨트롤러를 설치했다고 가정합니다.

  1. 다음 예제에 따라 NodePort 유형의 Kubernetes 서비스를 생성합니다.
cat  <<EOF  > ingressservice.yaml
apiVersion: v1
kind: Service
metadata:
  name: web-nginx
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  type: NodePort
  selector:
    app: web
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "web-nginx-ingress"
  annotations:
    # Below annotation is to specify if the loadbalancer is "internal" or "internet-facing"	   
    alb.ingress.kubernetes.io/scheme: internet-facing
    # TODO: Fill in with the ARN of your certificate.
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:xxxx:certificate/xxxxxx
    # TODO: Fill in the listening ports.
    alb.ingress.kubernetes.io/listen-ports: '\[{"HTTP": 80}, {"HTTPS":443}\]'
    # Set HTTP to HTTPS redirects. Every HTTP listener configured will be redirected to below mentioned port over HTTPS.
    alb.ingress.kubernetes.io/ssl-redirect: '443'
  labels:
    app: web
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: "web-nginx"
                port:
                  number: 80
EOF

참고: 위 수집 매니페스트는 HTTP와 HTTPS에서 수신 대기한 다음 ALB에서 TLS를 종료하고 HTTP를 HTTPS로 리디렉션합니다.

  1. ingressservice.yaml 파일을 적용하려면 다음 명령을 실행합니다.
$ kubectl create -f ingressservice.yaml

사용자 지정 도메인을 로드밸런서의 DNS에 연결

  1. LoadBalancer 유형 서비스의 DNS URL을 반환하려면 다음 명령을 실행합니다.
$ kubectl get service
  1. Ingress 유형 서비스의 DNS URL을 반환하려면 다음 명령을 실행합니다.
$ kubectl get ingress/web-nginx-ingress
  1. 사용자 지정 도메인 이름을 로드 밸런서 이름과 연결합니다.

  2. 웹 브라우저에서 다음 HTTPS 프로토콜로 사용자 지정 도메인을 테스트합니다.

https://yourdomain.com
AWS 공식
AWS 공식업데이트됨 일 년 전