牧场主-如何公开我的服务?我的、牧场

2023-09-04 01:35:22 作者:阳光下的寄生虫

我有一个正在运行的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"。 牧场经营游戏 牧场主 公布 上架Steam支持简中

这在本地网络上有效,因为我得到的地址类似于http://hello.gabriel-milan.10.1.1.14.xip.io/,它将解析为10.1.1.14,这是本地地址。

我想为我的一个公网IP公开此服务。我如何才能做到这一点?

推荐答案

编辑2021-09-27:xip.io已消失,但我将在响应中保留这些引用,因为OP询问xip.io。替代方案是sslip.ionip.io,这两个选项的功能相同。您可以将我的回复中的xip.io替换为其中任何一个,以获得相同的结果。

有几种方法可以做到这一点。基于您使用的内网无法从Internet访问,节点没有公网IP,因此Kubernetes对映射到它们的公网IP一无所知。这就是它在EC2中的工作方式,或者在节点外发生NAT的任何地方。

如果这些节点是自定义集群(在其中安装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

您的入口控制器正在监听80/443上的HTTP流量,这也意味着您的服务不必是NodePort。它可以是ClusterIP,因为流量通过入口控制器,然后在群集中进行路由。

当您有外部负载均衡器并且需要将流量定向到特定的服务时,将使用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工作。