如何解决Kubernetes:无法通过 http 访问套接字 Nodejs 服务器
我正在使用 kubernetes 微服务架构来构建一个应用程序,其中 client(React) 和所有其他微服务都在集群中的容器内运行。
一切都处于开发模式,我的应用程序具有本地 DNS 解析/etc/hosts。 没有没有 SSL 证书。
第一个错误
当我尝试将客户端套接字(在容器内运行)连接到后端聊天服务(在另一个容器内运行)时
socket = io("http://cultor.dev/api/chat");
它向我抛出了这个错误:
GET https://cultor.dev/socket.io?EIO=4&transport=polling&t=NQLm0AH 404
第二个错误
当我尝试将客户端套接字(在容器内运行)连接到后端聊天服务(这次在 AWS 实例上运行)时:
socket = io("http:<server_IP>:5000");
它向我抛出了这个错误:
Mixed Content: The page at 'https://cultor.dev/to/5fcf18e9428b7300193bf3eb' was loaded over HTTPS,but requested an insecure XMLHttpRequest endpoint 'http://35.154.40.189:5000/socket.io/?
EIO=4&transport=polling&t=NQLk4nd'. This request has been blocked; the content must be served
over HTTPS.
第三个错误
当我尝试将客户端套接字(在容器内运行)连接到后端聊天服务(再次使用容器)时:
socket = io("https:cultor.dev/api/chat");
它给我这个错误同样的错误:
Mixed Content: The page at 'https://cultor.dev/to/5fcf18e9428b7300193bf3eb' was loaded over HTTPS,but requested an insecure XMLHttpRequest endpoint 'http://35.154.40.189:5000/socket.io/?
EIO=4&transport=polling&t=NQLk4nd'. This request has been blocked; the content must be served
over HTTPS.
我的 kubernetes 入口 nginx 配置
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
nginx.ingress.kubernetes.io/default-backend: ingress-nginx-controller
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/configuration-snippet: |
add_header Access-Control-Allow-Methods "POST,GET,OPTIONS";
add_header Access-Control-Allow-Credentials true;
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: "PUT,POST,OPTIONS"
nginx.ingress.kubernetes.io/websocket-services: "socket-service"
nginx.ingress.kubernetes.io/proxy-send-timeout: "1800"
nginx.ingress.kubernetes.io/proxy-read-timeout: "1800"
nginx.ingress.kubernetes.io/proxy-redirect-from: http
nginx.ingress.kubernetes.io/proxy-redirect-to: https
spec:
## our custom routing rules
rules:
- host: cultor.dev ## locally resolved from /etc/hosts
http:
paths:
- path: /api/chat/?(.*)
backend:
serviceName: chat-srv
servicePort: 3000
- path: /?(.*)
backend:
serviceName: client-srv ## frontend
servicePort: 3000
提前致谢,但我真的需要这个。我将不胜感激对此的解决方案。 此外,如果无需购买 SSL 证书就可以解决这个问题,那么对我来说会更好,因为我仍处于开发阶段。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。