在AWS上公开Kubernetes的HTTP2服务(通过TLS)



我有一个HTTP2服务。它部署在EKS(AWS Kubernetes(上。我正试图把它暴露在互联网上。

如果我在没有TLS的情况下公开它(使用下面的代码(,一切都很好。我可以访问它。

apiVersion: v1
kind: Service
metadata:
name: demoapp
spec:
type: LoadBalancer
ports:
- name: http
port:  80
targetPort: 5000
selector:
name: demoapp

如果我正在添加TLS,我将获得HTTP 502(坏网关(。

apiVersion: v1
kind: Service
metadata:
name: demoapp
annotations:
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: somearn
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"  
spec:
type: LoadBalancer
ports:
- name: https
port: 443
targetPort: 5000
selector:
name: demoapp

我有一个猜测(这可能是错误的(,service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http理所当然地假设它是HTTP1.1(相对于HTTP2.0(,并在其中一方开始发送二进制(相对于文本数据(时吠叫。

附加说明:我没有使用任何Ingress控制器。

还有一个想法。可能的是,我可以在应用程序中使用TLS终止(而不是在负载均衡器上进行(,并作为示例切换到NLB。然而,在解决方案中带来了很多麻烦,我宁愿使用负载均衡器。

基于问题中的注释;TLS应该终止于CLB,并且您应该删除service.beta.kubernetes.io/aws-load-balancer-backend-protocol(默认为tcp(。

最新更新