当前位置: 首页 > 知识库问答 >
问题:

无法使用Nginx-ingress升级Kubernetes中的websocket连接

鲍宁
2023-03-14

我试图通过websockets连接到我的Mosquitto代理,但我无法做到这一点,因为连接没有升级。mosquitto代理公开端口9001以允许websocket连接,它运行在带有nginx-ingress控制器的Kubernetes集群后面。

$ kubectl get ingress mosquitto
NAME        HOSTS   ADDRESS   PORTS   AGE
mosquitto   *                 80      14m

.

$kubectl get service

NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE

mosquitto                 ClusterIP   10.108.206.11    <none>        9001/TCP,1883/TCP   12m
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: mosquitto
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: mosquitto
    spec:
      imagePullSecrets:
        - name: abb-login
      containers:
        - name: mosquitto
          image: ***/mosquitto:k8s2
          imagePullPolicy: Always
          ports:
            - containerPort: 9001
              protocol: TCP
            - containerPort: 1883
              protocol: TCP
          resources: {}

---
apiVersion: v1
kind: Service
metadata:
  name: mosquitto
spec:
  ports:
    - name: "9001"
      port: 9001
      targetPort: 9001
      protocol: TCP
    - name: "1883"
      port: 1883
      targetPort: 1883
      protocol: TCP
  selector:
    app: mosquitto
allow_duplicate_messages false

connection_messages true

log_dest stdout stderr
log_timestamp true
log_type all

persistence false

listener 1883

allow_anonymous true

listener 9001
protocol websockets

allow_anonymous false

auth_plugin /usr/lib/mosquitto-auth-plugin/auth-plugin.so
auth_opt_backends http
auth_opt_http_ip 127.0.0.1
auth_opt_http_getuser_uri /api/mosquitto/users
auth_opt_http_superuser_uri /api/mosquitto/admins
auth_opt_http_aclcheck_uri /api/mosquitto/permissions
auth_opt_acl_cacheseconds 1
auth_opt_auth_cacheseconds 0
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: mosquitto
  annotations:
    nginx.org/websocket-services: mosquitto
spec:
  rules:
    - http:
        paths:
          - path: /mosquitto-ws
            backend:
              serviceName: mosquitto
              servicePort: 80
MqttException (0) - java.io.IOException: WebSocket Response header: Incorrect upgrade.
opc-ua-adapter_1  |     at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:38)
opc-ua-adapter_1  |     at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:715)
opc-ua-adapter_1  |     at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
opc-ua-adapter_1  |     at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
opc-ua-adapter_1  |     at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
opc-ua-adapter_1  |     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
opc-ua-adapter_1  |     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
opc-ua-adapter_1  |     at java.base/java.lang.Thread.run(Thread.java:834)
192.168.39.1 - [192.168.39.1] - - [27/Feb/2019:09:59:14 +0000] "GET /mosquitto-ws HTTP/1.1" 308 171 "-" "-" 218 0.000 [default-mosquitto-9001] - - - - 5db23bb19698ac94612ff6ebac265bed
192.168.39.1 - [192.168.39.1] - - [27/Feb/2019:09:59:14 +0000] "\x88\x84\xDDi+\x5C\xECY\x1Bl" 400 157 "-" "-" 0 0.000 [] - - - - 2b8f177f0f62389ba7d918f9c36ee72e
192.168.39.1 - [192.168.39.1] - - [27/Feb/2019:09:59:14 +0000] "GET /mosquitto-ws HTTP/1.1" 308 171 "-" "-" 218 0.000 [default-mosquitto-9001] - - - - c99fe7606530ae938297e227e34084c0
192.168.39.1 - [192.168.39.1] - - [27/Feb/2019:09:59:14 +0000] "\x88\x84dB5aUr\x05Q" 400 157 "-" "-" 0 0.000 [] - - - - 375ec1ac17cc3e0f7595cf8c1cc752c3

共有1个答案

赫连捷
2023-03-14

尝试在mosquito入口定义中增加proxy-read-timeoutproxy-send-timeout

请参见NGinx入口文档:https://kubernetes.github.io/Ingress-NGinx/user-guide/mistaily/#websockets

 类似资料:
  • 我在设置kubernetes ingress-nginx时遇到了麻烦,以便在外部公开我的应用程序。下面是我所做的步骤: 应用程序部署: 创建了名为Ingress的命名空间 部署了statefulset集资源,用于在入口命名空间中描述我的应用程序(我们称之为testapp) 创建了ClusterIP服务,使我的应用程序在kube集群(testapp)中的入口命名空间中可用 入口nginx设置: nu

  • 我正在尝试使用Nginx入口公开Mariadb部署。 到目前为止,我已经查看了一些参考资料,但无法解决我的问题,如下所示。 > 为什么ingress nginx控制器tcp服务不工作? Kubernetes 1.16 Nginx入口(0.26.1)TCP Mariadb/MySQL服务不工作 https://kubernetes.github.io/ingress-nginx/user-guide

  • 我尝试按照本教程来使用nginx入口控制器。在我尝试让它工作的过程中,一些细节发生了变化——只有一个后端服务而不是两个,一些端口号和所有内容都在默认名称空间中运行。我在CentOS Linux 7.4.1708版虚拟机上有一个kubernetes主机和三个仆从。 后端和默认后端都可以通过各自的服务endpoint在集群内访问。nginx状态页面在外部可用(MasterHostIP:32000/ng

  • 什么起作用了? 使用Helm(启用RBAC)部署入口控制器 集群IP服务部署 什么不起作用? null K8S入口 注释中最后应用的配置(入口描述输出)显示入口资源清单。但是,我贴在下面作为参考 附加信息 null 任何关于我可能做错了什么的建议或见解将非常感谢。

  • 我在EKS上运行服务已经有一段时间了,今天无意中删除了nginx入口。现在,当我尝试使用以下url中的入口控制器模板设置入口时,只需稍加修改: https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.34.1/deploy/static/provider/aws/deploy-tls-termination.