我有一个正在运行的Rancher设置,如下所示:
在公网IP上运行rancher/rancher容器的宿主机; 无法从Internet访问独占网络(10.1.1.0/24)中的节点。我的目标是使用Rancher负载平衡或任何类似的东西为Web应用程序提供服务。 为此,我执行了以下步骤:
在3个Pod上将端口80/tcp映射为名为"web-app"的NodePort(监听端口是随机的),使用"rancher/Hello-world"镜像部署工作负载; 在同一命名空间中添加名为"Hello"的入口,选择"自动生成.xip.io
主机名"并将"/"添加到端口80上的"web-app"。
这在本地网络上有效,因为我得到的地址类似于http://hello.gabriel-milan.10.1.1.14.xip.io/,它将解析为10.1.1.14,这是本地地址。
我想为我的一个公网IP公开此服务。我如何才能做到这一点?
编辑2021-09-27:xip.io
已消失,但我将在响应中保留这些引用,因为OP询问xip.io
。替代方案是sslip.io
和nip.io
,这两个选项的功能相同。您可以将我的回复中的xip.io
替换为其中任何一个,以获得相同的结果。
如果这些节点是自定义集群(在其中安装Docker,然后使用Rancher中的docker run
命令安装RKE并将集群加入Rancher),则在安装之前,您可以单击右下角的高级选项链接,并为每个节点设置公有和私有IP。
执行此操作时,节点会收到一个包含公有IP的标签,该地址将与您在设置Inress时生成的xip.io
主机名一起使用。
如果没有该标签,xip.io
主机名会获取节点的主IP,在本例中该节点位于专用网络上。
如果您这样做,即使您的入口控制器正在侦听多个节点,您的流量也只会到达群集上的一个节点。
相反,在运行多节点集群时,我建议您在所有工作节点(或入口控制器正在侦听的节点,如果不是在每个节点上侦听)之前放置一个第4层负载均衡器。输入80和443,然后将其用作您的域的目标。domain.com -> load balancer -> ingress controller (on all nodes) -> Service -> Pods
当您有外部负载均衡器并且需要将流量定向到特定的服务时,将使用NodePort服务。在这种情况下,外部负载均衡器将取代入口控制器。您为每个应用程序创建节点端口服务,然后告诉负载均衡器将应用程序A的流量发送到端口30547上的每个节点或该服务的任何节点端口。
顺便说一句,如果您在云提供商中,您可以将它们组合到一个LoadBalancerService中。这将在节点上创建NodePort服务,然后接触云提供商的API并部署云负载均衡器,然后使用节点和服务的端口对其进行编程,并在服务的生命周期内维护该配置。概括地说:
您的节点不知道其公网IP,因此xip.io
主机名也不知道
在您的节点前面放置一个第4层负载均衡器,并将流量发送到所有节点上的80/443
将您的服务更改为ClusterIP
向负载均衡器发送流量
此外,如果您不想部署负载平衡器,作为一种解决办法,您可以删除Inress并重新创建它,但不是自动创建xip.io
主机名,而是选择设置主机名并手动创建。如果某个节点的公网IP为1.2.3.4
,则您可以将其设置为any.thing.you.want.1.2.3.4.xip.io
,它会返回1.2.3.4
给DNS查询。
您无法编辑现有xip.io
入口并将其更改为不同的手动xip.io
主机名。您必须重新创建它。
在此解决方法中,流量仍会进入入口控制器,因此您仍然可以将服务从NodePort更改为ClusterIP。
透露:我为Rancher工作。
上一篇:在lambda EX pressions多个Where子句子句、多个、EX、lambda
下一篇:SSLCONNECT返回=1错误号=0状态=错误:Ruby和Ubuntu 14.04中的证书验证失败错误、证书、状态、SSLCONNECT