从 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
)。
我有 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
)。