如何使用 TLS 憑證為我的 Amazon EKS 應用程式啟用 HTTPS 連線?
我想要使用 Transport Layer Security (TLS) 憑證為我的 Amazon Elastic Kubernetes Service (Amazon EKS) 應用程式啟用 HTTPS 連線。
簡短說明
若要為您的 Amazon EKS 應用程式啟用 HTTPS 連線,必須執行下列動作:
- 取得自訂網域的有效 TLS 憑證。
- 採用負載平衡器服務類型公開 Kubernetes 服務,或使用 AWS 負載平衡器控制器公開 Kubernetes 傳入物件。
- 將您的自訂網域關聯至負載平衡器的 DNS。
解決方案
取得自訂網域的有效 TLS 憑證:
1. 為您的自訂網域申請公開 AWS Certificate Manager (ACM) 憑證,或將您自己的 TLS 憑證上傳至 ACM。
2. 識別您要與負載平衡器 HTTPS 接聽程式搭配使用的憑證 Amazon Resource Name (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 服務一節。
1. 若要建立服務 .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
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 負載平衡器控制器。
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/tls-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。
2. 若要套用 ingressservice.yaml 檔案,請執行下列命令:
$ kubectl create -f ingressservice.yaml
將您的自訂網域關聯至負載平衡器的 DNS
1. 若要傳回 LoadBalancer 類型服務的 DNS URL,請執行下列命令:
$ kubectl get service
2. 若要傳回 Ingress 類型服務的 DNS URL,請執行下列命令:
$ kubectl get ingress/web-nginx-ingress
4. 在網頁瀏覽器中,使用下列 HTTPS 通訊協定測試您的自訂網域:
https://yourdomain.com

相關內容
- 已提問 4 個月前lg...
- 已提問 4 個月前lg...
- 已提問 4 個月前lg...
- 已提問 4 個月前lg...
- 已提問 4 個月前lg...
- AWS 官方已更新 2 個月前
- AWS 官方已更新 3 個月前
- AWS 官方已更新 5 個月前