Nginx 在google ingress controller中建立https后,websocket连接失败

Nginx 在google ingress controller中建立https后,websocket连接失败,nginx,websocket,kubernetes,amazon-elb,kubernetes-ingress,Nginx,Websocket,Kubernetes,Amazon Elb,Kubernetes Ingress,我在kubernetes中部署了一个应用程序,它由GoogleIngressController(服务名为ELB)提供服务。应用程序运行良好。但在我应用https相关配置的那一刻,https即将到来,但websocket失败了 下面是服务文件和配置映射 对于http: kind: Service apiVersion: v1 metadata: name: ingress-nginx namespace: ingress-nginx labels: app: ingress-

我在kubernetes中部署了一个应用程序,它由GoogleIngressController(服务名为ELB)提供服务。应用程序运行良好。但在我应用https相关配置的那一刻,https即将到来,但websocket失败了

下面是服务文件和配置映射

对于http:

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
  annotations:
    # Enable PROXY protocol
    service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*'
    # Increase the ELB idle timeout to avoid issues with WebSockets or Server-Sent Events.
    service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: '3600'
spec:
  type: LoadBalancer
  selector:
    app: ingress-nginx
  ports:
  - name: http
    port: 80
    targetPort: http
  - name: https
    port: 443
    targetPort: https

---------------------------------------------------------------------------------------------------


kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
data:
  use-proxy-protocol: "true"
对于https:

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "arn:aws:acm:us-east-1:2xxxxxxxxxxxxxxxxxxx56:certificate/3fxxxxxxxxxxxxxxxxxxxxxxxxxx80" 
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http"
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https" 
    # Increase the ELB idle timeout to avoid issues with WebSockets or Server-Sent Events.
    service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: '3600'
spec:
  type: LoadBalancer
  selector:
    app: ingress-nginx
  ports:
  - name: http
    port: 80
    targetPort: http
  - name: https
    port: 443
    targetPort: http

------------------------------------------------------------------------------------------

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
data:
  use-proxy-protocol: "false"

configmap中是否缺少任何注释或数据?请帮帮我

我想问题在于注释:

service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http"
对于websocket连接,ELBs中的后端协议必须是TCP

另外,我看到您正在使用Nginx入口控制器,也许您想在配置中设置这些变量

proxy-read-timeout: "3600"
proxy-send-timeout: "3600"

以避免连接关闭。

您好!如果答案解决了问题,请将其标记为正确