AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
如何使用 TLS 憑證為我的 Amazon EKS 應用程式啟用 HTTPS 連線?
我想使用 TLS 憑證為我的 Amazon Elastic Kubernetes Service (Amazon EKS) 應用程式啟用 HTTPS 連線。
簡短描述
若要為 Amazon EKS 應用程式啟動 HTTPS 連線,請完成下列任務:
- 為您的自訂網域取得有效的 TLS 憑證。
- 使用負載平衡器服務類型公開您的 Kubernetes 服務,或使用 AWS 負載平衡器控制器公開您的 Kubernetes 輸入物件。
- 將自訂網域與負載平衡器的 DNS 建立關聯。
解決方法
為您的自訂網域取得有效的 TLS 憑證
若要取得自訂網域的有效 TLS 憑證,請完成下列步驟:
-
為您的自訂網域申請公有 AWS Certificate Manager (ACM) 憑證,或將您自己的 TLS 憑證上傳至 ACM。
-
識別您要與負載平衡器的 HTTPS 接聽程式搭配使用的憑證 ARN。
-
若要建立範例 NGINX 部署,請執行下列命令:
$ kubectl create deploy web --image=nginx --port 80 --replicas=3 -
若要確認 Kubernetes Pod 是否已部署在您的 Amazon EKS 叢集上,請執行下列命令:
$ kubectl get pods -l app=web**注意:**Pod 會標示為 app=web。使用此標籤做為服務物件的選取器,以識別一組 Pod。
使用負載平衡器服務類型公開您的 Kubernetes 服務
注意:若要使用輸入物件公開您的應用程式,請繼續使用輸入物件公開您的 Kubernetes 服務一節。
若要使用負載平衡器服務類型公開您的 Kubernetes 服務,請完成下列步驟:
-
若要建立 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 -
編輯註釋 service.beta.kubernetes.io/aws-load-balancer-tls-cert 以包含 ACM 的 ARN。
-
若要套用 loadbalancer.yaml 檔案,請執行下列命令:
$ kubectl create -f loadbalancer.yaml -
繼續將自訂網域與負載平衡器的 DNS 建立關聯一節。
使用輸入物件公開您的 Kubernetes 服務
**注意:**以下解決方案假設您已在 Amazon EKS 叢集中安裝 AWS 負載平衡器控制器。如需詳細資訊,請參閱 GitHub 網站上的 aws-load-balancer-controller。
若要使用輸入物件公開您的 Kubernetes 服務,請完成下列步驟:
- 根據下列範例建立 NodePort 類型的 Kubernetes 服務:
**注意:**先前的輸入資訊清單會偵聽 HTTP 和 HTTPS,然後終止 Application Load Balancer 上的 TLS,然後再將 HTTP 重新導向至 HTTPS。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 - 若要套用 ingressservice.yaml 檔案,請執行下列命令:
$ kubectl create -f ingressservice.yaml
將自訂網域與負載平衡器的 DNS 建立關聯
若要將自訂網域與負載平衡器的 DNS 建立關聯,請完成下列步驟:
-
若要傳回 LoadBalancer類型的服務的 DNS URL,請執行下列命令:
$ kubectl get service -
若要傳回 Ingress 類型的服務的 DNS URL,請執行下列命令:
$ kubectl get ingress/web-nginx-ingress -
在 Web 瀏覽器中,使用下列 HTTPS 協定測試您的自訂網域:
https://yourdomain.com
- 語言
- 中文 (繁體)

相關內容
已提問 2 年前