如何使用 TLS 憑證為我的 Amazon EKS 應用程式啟用 HTTPS 連線?

3 分的閱讀內容
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. 若要確認 Kubernetes Pod 是否已部署在您的 Amazon EKS 叢集上,請執行下列命令:

    $ kubectl get pods -l app=web

    **注意:**Pod 會標示為 app=web。使用此標籤做為服務物件的選取器,以識別一組 Pod。

使用負載平衡器服務類型公開您的 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,然後終止 Application Load Balancer 上的 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. 在 Web 瀏覽器中,使用下列 HTTPS 協定測試您的自訂網域:

    https://yourdomain.com
AWS 官方
AWS 官方已更新 6 個月前