如何为AWS负载均衡器自动分配的DNS配置HTTPS?
AWS Kubernetes LoadBalancer Service HTTPS 配置方案
首先明确结论:你无法直接为AWS自动分配的*.elb.amazonaws.com格式域名申请ACM公有可信证书,AWS限制了第三方机构不得为amazonaws.com二级域名下的子域名颁发公有SSL证书,你可以通过以下方案实现HTTPS配置:
方案一:使用自定义域名(生产环境推荐)
这是生产环境通用的标准实现方案,步骤如下:
- 准备一个归你所有的自定义域名(例如
example.com,可在AWS Route53或任意域名服务商处注册) - 在ACM中为你计划使用的子域名(例如
gateway.example.com)申请公有SSL证书,完成域名所有权验证后获取证书ARN - 修改你的Service配置,调整端口规则和annotations,参考配置如下:
kind: Service apiVersion: v1 metadata: name: gateway-svc annotations: service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:<你的集群区域>:<你的AWS账号ID>:certificate/<你的证书ID> service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443" # 可选配置:自动将80端口的HTTP请求重定向到443 HTTPS端口 # service.beta.kubernetes.io/aws-load-balancer-ssl-redirect: "443" spec: selector: app: gateway type: LoadBalancer ports: - name: http port: 80 targetPort: 4000 - name: https port: 443 targetPort: 4000
- 等待Service创建完成,获取AWS自动分配的ELB域名
- 在你的域名解析服务商处添加一条CNAME记录,将你使用的子域名(如
gateway.example.com)解析到上述ELB域名即可。后续直接访问https://gateway.example.com即可获得可信的HTTPS连接。
方案二:使用自签名证书(测试场景使用)
如果是临时测试场景不想注册自定义域名,可以使用自签名证书实现,缺点是浏览器会提示证书不受信任,手动跳过风险提示后即可使用:
- 自行生成自签名SSL证书,将证书的Common Name字段填写为ELB自动分配的域名
- 将生成的自签名证书导入到ACM中,获取对应的证书ARN
- 在Service的annotations中填写上述导入的证书ARN,其余配置和方案一一致即可。
注意事项
- ACM证书的区域必须和你的Kubernetes集群、ELB实例所在区域保持一致
- 如果你的域名托管在AWS Route53,可部署
ExternalDNSKubernetes组件自动完成CNAME记录的创建,无需手动操作解析配置
内容的提问来源于stack exchange,提问作者Gurkmeja101
相关产品推荐
相关产品推荐

