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

Exposing HTTP2 service (over TLS) from Kubernetes on AWS

我有 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 出于某种原因假设它是 HTTP 1.1(与 HTTP 2.0 相比)并且当一方开始发送二进制数据(与文本数据相比)时吠叫。

补充说明:我没有使用任何 Ingress 控制器。

还有一个想法。潜在地,我可以在应用程序中引入 TLS 终止(相对于在负载均衡器上进行)并作为示例切换到 NLB。但是,在解决方案中带来了很多问题,我宁愿为此使用负载均衡器。

根据您问题中的注释; TLS 应该在 CLB 处终止,您应该删除 service.beta.kubernetes.io/aws-load-balancer-backend-protocol(默认为 tcp)。