如何使用 TLS 证书为我的 Amazon EKS 应用程序激活 HTTPS 连接?
我想使用传输层安全性协议(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 资源名称(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. 要创建 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-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. 在 Web 浏览器中,使用以下 HTTPS 协议测试您的自定义域:
https://yourdomain.com

相关内容
- 已提问 3 个月前lg...
- 已提问 3 个月前lg...
- 已提问 4 个月前lg...
- 已提问 1 个月前lg...
- 已提问 4 个月前lg...
- AWS 官方已更新 1 个月前
- AWS 官方已更新 5 个月前
- AWS 官方已更新 1 年前