-1

我有一个在 ubuntu VM 上运行的 kubernetes 集群,我按照启用 kubernetes 入口功能的文档创建了这个集群。

该集群内部运行了多个服务,其中有 3 个我想对外公开。其中之一是基于 REST 的服务,其他使用 websocket 连接。

在主机 VM 上,在遵循文档和一些摆弄之后,我可以通过 curl'ing localhost 来访问这些服务。

我现在想通过一个特定的接口 (ens160) 公开这些服务,以便我可以通过另一个团队正在构建的一些客户端自动化来访问这些服务。

我的第一次尝试是使用 IP 表将来自 80/443 的流量映射到 127.0.0.1,这适用于 REST 服务。

sudo iptables -t nat -A PREROUTING -p tcp -i ens160 --dport 443 -j DNAT --to-destination 127.0.0.1:443
sudo iptables -A FORWARD -p tcp -d 127.0.0.1 --dport 443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A PREROUTING -p tcp -i ens160 --dport 80 -j DNAT --to-destination 127.0.0.1:80
sudo iptables -A FORWARD -p tcp -d 127.0.0.1 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

但是 websocket 连接没有建立。

对我来说,这种方法似乎是一种“脆弱”的方法,我想知道是否有更好的方法将这个 kubernetes 集群暴露给我的“公司网络”,然后对进来的数据包执行 DNAT。

我会以错误的方式解决这个问题吗?

谢谢,马克斯萨金特

4

1 回答 1

1

我已经解决了这个问题,它与我所做的无关。

通过查看流量,我可以看到连接失败的原因是:

HTTP 15020: SOCKET ERROR: self signed certificate Error: self signed certificate
    at TLSSocket.onConnectSecure (node:_tls_wrap:1530:34)
    at TLSSocket.emit (node:events:394:28)
    at TLSSocket._finishInit (node:_tls_wrap:944:8)
    at TLSWrap.ssl.onhandshakedone (node:_tls_wrap:725:12)

我通过设置解决了这个问题:

rejectUnauthorized: false

在 socket.io 中

请关闭,因为我已经自己解决了。

谢谢,马克斯萨金特

于 2021-08-05T17:27:30.113 回答