在使用路由器的传统家庭网络中,所有东西都在裸机上,我想在 Web 上公开应用程序,只有有限的集群入口点(端口 80 和 443 分别用于 http 和 https 流量),而不再打开不必要的端口,并在 ClusterIP 网络后面保持工作负载和服务的安全(无需使用 NodePort 为工作负载和服务公开端口)。
我的节点都没有公共 IP,只有我的路由器有。
Ingress 就是答案,因为它可以根据不同的主机名路由流量,同时使用相同的 IP 地址。
因为我的集群中的节点都在一个私有家庭网络中,所以没有关于如何做到这一点的简单说明。
此外,我想使用 xip.io 生成免费的 URL,用于测试在 WWW 上工作的目的,但是Automatically generate a .xip.io hostname
通过 Rancher UI 添加入口时的选项只能在我的本地网络上工作,而不是在网络上工作。
我为此头疼了好几天。
但我终于想通了,这很容易。
首先,我们需要进入路由器的设置并进行一些端口转发。
假设您的路由器的公共 IP 是16.43.236.65
,并且您的集群上有一个节点,其家庭网络上的内部私有 IP 是192.168.0.155
在路由器的设置中,将所有端口80
和443
流量转发到端口80
和443
其中一个节点的端口,使其基本上看起来像这样:
16.43.236.65:80
->192.168.0.155:80
16.43.236.65:443
->192.168.0.155:443
完成后,返回 Rancher 并单击Add Ingress
,Load Balancing
不幸Automatically generate a .xip.io hostname
的是,您的家庭网络中仍将使用您节点的私有 IP,并且只能在本地工作。
相反,您可以像这样选择Specify a hostname to use
和使用您的公共 IP xip.io
:
16.43.236.65.xip.io
现在配置其余的入口,我现在只是将所有内容保留为默认值,我使用Service
而不是Workload
for Target Backend
。
现在,在16.43.236.65.xip.io
浏览器上导航到时,您应该能够访问您在通过 Web 添加的 Ingress 中选择的服务。
如果您想使用 xip.io 添加其他服务,只需添加子域即可,例如:
another-service.16.43.236.65.xip.io
yet-another-service.16.43.236.65.xip.io
它可能看起来很神奇,但它的工作方式是通过主机名,所以你可以让任何域名指向同一个公共 IP,Ingress 会根据主机名知道将流量转发到哪里以及使用哪个服务/工作负载,我觉得很棒。它可能看起来很神奇,但它的工作方式是通过主机名,所以你可以让任何域名指向同一个公共 IP,Ingress 将知道将流量转发到哪里以及根据主机名使用哪个服务/工作负载,哪个我觉得很棒。
最后,如果你想使用一个实际的域名:在你的域名提供商的 DNS 设置中设置一个A Record
指向你路由器公共 IP 的域名。使用我们当前的示例将是16.43.236.65
.
在 Rancher 上添加一个 Ingress 并指定相同的域名。
相同的概念。希望这会有所帮助!