利用nginx反向代理kubesphere终端访问

avatar 2023年3月15日18:15:28 评论 681 次浏览

利用nginx做反向代理kubesphere,目的是为了在自建环境中通过nginx反向代理到kuberetes中的ingress,然后利用ingress做集群内部的解析,利用nginx代理kubesphere的方式可以参考: https://www.wulaoer.org/?p=2827

但是利用nginx反向代理kubesphere之后会出现kubesphere平台通过终端访问的时候会用到WebSocket,下面就说一下如何通过WebSocket来解决,kubesphere的终端请求“Could not connect to the container. Do you have sufficient privileges?”,在我没有使用代理之前是可以直接在平台上使用终端访问的,使用代理之后才会出现上面的错误。因为连接容器就是用的WebSocket,接着上面的继续。WebSocket使用HTTP中的Upgrade协议头将连接从HTTP升级到WebSocket。这使得WebSocket程序可以更容易的使用现已存在的基础设施。大部分现在的浏览器都支持WebSocket。所以我们只需要在location中添加即可。

       location / {
          proxy_pass http://ops-gateway/;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $https;
          proxy_set_header Host $http_host;
          proxy_set_header X-NginX-Proxy true;
          proxy_set_header WL-Proxy-Client-IP $remote_addr;
          proxy_redirect default;
          proxy_redirect http:// https://; #以下是配置WebSocket
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "$connection_upgrade";
 
     }

同时也需要在在http中添加map指令,该作用主要是根据客户端请求中的值,来构造改变connection_upgrade的值,即根据变量的值创建新的变量connection_upgrade, 创建的规则就是{}里面的东西。其中的规则没有做匹配,因此使用默认的,即 http_upgrade为空字符串的话,那么值就是 close。

 .............................
         tcp_nodelay on;
         map $http_upgrade $connection_upgrade {
             default upgrade;
             ''      close;
         }
         fastcgi_connect_timeout 300;
         fastcgi_send_timeout 300;
         fastcgi_read_timeout 300;
 .............................

然后保存重启即可,这里就不测试截图了,如果遇到相同问题的可以试一下。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: