如何通过Kubernetes Service配置AWS ELB实现HTTPS后端协议?
解决AWS ELB后端HTTPS端口实例协议配置问题
我之前也碰到过完全一样的问题!你现在的配置里,全局的service.beta.kubernetes.io/aws-load-balancer-backend-protocol把所有后端端口的实例协议都设成了HTTP,这就是为什么HTTPS端口转发到后端还是用HTTP的原因。要实现HTTPS端口对应后端用HTTPS协议,只需要用端口级的专属注解来覆盖全局配置就行。
具体修改方案
直接在Service的annotations里添加针对443端口的后端协议注解,修改后的完整YAML如下:
kind: Service apiVersion: v1 metadata: name: my_app namespace: my_namespace labels: dns: route53 annotations: domainName: my_app.my.domain.com # 全局设置HTTP端口的后端协议(也可以换成单独给80端口加注解) service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http # 重点:给443端口单独指定后端协议为HTTPS service.beta.kubernetes.io/aws-load-balancer-backend-protocol-443: https service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:iam::accountId:server-certificate/CertificateName" service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0 spec: type: LoadBalancer selector: app: my_app version: my_version ports: - protocol: TCP port: 80 targetPort: non_secure_port_name name: http - protocol: TCP port: 443 targetPort: secure_port_name name: https
关键细节解释
service.beta.kubernetes.io/aws-load-balancer-backend-protocol-<port>是Kubernetes为AWS ELB提供的端口级配置注解,<port>对应你Service里定义的端口号(这里就是443)。用它可以单独指定某个端口的后端实例协议,覆盖全局配置。- 如果你想更清晰,也可以去掉全局的
service.beta.kubernetes.io/aws-load-balancer-backend-protocol,分别给80和443端口加各自的注解:service.beta.kubernetes.io/aws-load-balancer-backend-protocol-80: http service.beta.kubernetes.io/aws-load-balancer-backend-protocol-443: https
验证方法
部署修改后的Service后,你可以通过AWS控制台或者aws elb describe-load-balancers命令查看ELB的监听配置:HTTPS(443)端口的后端实例协议应该已经变成HTTPS了,不需要再手动调整ELB。
内容的提问来源于stack exchange,提问作者Maxime Coulombe
相关产品推荐
相关产品推荐

