내용으로 건너뛰기

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

4분 분량
0

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

간략한 설명

Amazon EKS 애플리케이션의 HTTPS 연결을 활성화하려면 다음 작업을 완료하십시오.

  • 사용자 지정 도메인에 대한 유효한 TLS 인증서를 받습니다.
  • 로드 밸런서 서비스 유형을 사용하여 Kubernetes 서비스를 노출하거나, AWS 로드 밸런서 컨트롤러를 사용하여 Kubernetes 인그레스 개체를 노출합니다.
  • 사용자 지정 도메인을 로드 밸런서 DNS에 연결합니다.

해결 방법

사용자 지정 도메인에 대한 유효한 TLS 인증서 받기

사용자 지정에 유효한 TLS 인증서를 받으려면 다음 단계를 완료하세요.

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

  2. 로드밸런서의 HTTPS 리스너에 사용할 인증서의 ARN을 식별합니다.

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

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

    $ kubectl get pods -l app=web

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

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

참고: 인그레스 개체 사용하여 애플리케이션을 노출하려면, 인그레스 개체를 사용하여 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-type: external
        # 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}
        # Run TLS only on the port named "https" below.
        service.beta.kubernetes.io/aws-load-balancer-ssl-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
  2. 주석 service.beta.kubernetes.io/aws-load-balancer-tls-cert를 편집하여 ACM의 ARN을 포함하도록 합니다.

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

    $ kubectl create -f loadbalancer.yaml
  4. 사용자 지정 도메인을 로드 밸런서의 DNS에 연결 섹션으로 계속 진행합니다.

인그레스 개체를 사용하여 Kubernetes 서비스 노출

참고: 다음 해결 방법에서는 Amazon EKS 클러스터에 AWS 로드 밸런서 컨트롤러를 설치했다고 가정합니다. 자세한 내용을 보려면 GitHub 웹 사이트에서 aws-load-balancer-controller를 참조하세요.

인그레스 개체를 사용하여 Kubernetes 서비스를 노출하려면 다음 단계를 완료하세요.

  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 is 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에서 수신한 다음 애플리케이션 로드 밸런서에서 TLS를 종료하고 HTTP를 HTTPS로 리디렉션합니다.
  2. ingressservice.yaml 파일을 적용하려면 다음 명령을 실행합니다.
    $ kubectl create -f ingressservice.yaml

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

사용자 지정 도메인을 로드 밸런서의 DNS와 연결하려면 다음 단계를 완료하세요.

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

    $ kubectl get service
  2. Ingress 유형 서비스의 DNS URL을 반환하려면 다음 명령을 실행합니다.

    $ kubectl get ingress/web-nginx-ingress
  3. 사용자 지정 도메인 이름을 로드 밸런서 이름과 연결합니다.

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

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