ACM을 사용하여 Amazon EKS 워크로드에서 HTTPS 트래픽을 종료하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 4월 22일

AWS Certificate Manager(ACM)를 사용하여 Amazon Elastic Container Service for Kubernetes(Amazon EKS) 워크로드에서 HTTPS 트래픽을 종료하려면 어떻게 해야 합니까?

간략한 설명

Kubernetes Service 객체에 대해 Elastic Load Balancer 수준에서 HTTPS 트래픽을 종료하려면 다음을 수행해야 합니다.

  • type 필드를 LoadBalancer로 설정하여 Kubernetes 서비스를 게시합니다.
  • ACM 인증서Amazon 리소스 이름(ARN)을 지정합니다. 이렇게 하면 Elastic Load Balancer가 생성될 때 Kubernetes API 서버가 해당 인증서를 연결할 수 있습니다.

참고: 아래 해결 방법에서는 작업자 노드가 연결된 활성 Amazon EKS 클러스터가 있다고 가정합니다.

해결 방법

1.    로드 밸런서의 HTTPS 수신기에 사용할 인증서의 ARN을 식별합니다.

2.    Amazon EKS 클러스터에 등록된 노드를 식별하려면 kubectl이 구성된 환경에서 다음 명령을 실행합니다.

$ kubectl get nodes

3.    텍스트 편집기에서 다음 코드가 포함된 deployment.yaml 매니페스트 파일을 생성합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: echo-pod
  template:
    metadata:
      labels:
        app: echo-pod
    spec:
      containers:
      - name: echoheaders
        image: k8s.gcr.io/echoserver:1.10
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080

4.    Kubernetes Deployment 객체를 생성하려면 다음 명령을 실행합니다.

$ kubectl create -f deployment.yaml

5.    Kubernetes 포드가 Amazon EKS 클러스터에 배포되었는지 확인하려면 다음 명령을 실행합니다.

$ kubectl get pods

참고: 포드에는 app=echo-pod 레이블이 지정되어 있습니다. 이 레이블을 포트 집합을 식별하기 위한 Service 객체의 선택기로 사용할 수 있습니다.

6.    텍스트 편집기에서 다음 코드가 포함된 service.yaml 매니페스트 파일을 생성합니다.

apiVersion: v1
kind: Service
metadata:
  name: echo-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-ssl-cert: arn:aws:acm:{region}:{user id}:certificate/{id}
    # Only run SSL on the port named "https" below.
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
spec:
  selector:
    app: echo-pod
  ports:
  - name: http
    port: 80
    targetPort: 8080
  - name: https
    port: 443
    targetPort: 8080
  type: LoadBalancer

7.    Service 객체를 생성하려면 다음 명령을 실행합니다.

$ kubectl create -f service.yaml

8.    LoadBalancer 유형 서비스의 DNS URL을 반환하려면 다음 명령을 실행합니다.

$ kubectl get service

참고: 클러스터에서 실행 중인 활성 서비스가 많은 경우 명령 출력에서 유형이 LoadBalancer인 적절한 서비스의 URL을 가져와야 합니다.

9.    Amazon EC2 콘솔을 열고 로드 밸런서를 선택합니다.

10.    로드 밸런서를 선택한 다음 수신기를 선택합니다.

11.    수신기 ID에서 로드 밸런서 포트가 443으로 설정되어 있는지 확인합니다.

12.    SSL 인증서에서 YAML 파일에 정의한 SSL 인증서가 로드 밸런서에 연결되었는지 확인합니다.

13.    웹 브라우저에서 다음 HTTPS 프로토콜로 LoadBalancer URL을 테스트합니다.

https://randomString1-randomString2.{region}.elb.amazonaws.com

성공적인 응답에서는 호스트 이름, 포드 정보, 서버 값, 요청 정보 및 요청 헤더를 포함하여 클라이언트에 대한 세부 정보가 있는 웹 페이지를 반환합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?