kubernetes 入口控制器流量如何到达正确的节点?

jdzmm42g  于 2022-11-02  发布在  Kubernetes
关注(0)|答案(2)|浏览(151)

我们在Azure中有一个OpenShift 4.8集群,其中有3个主节点和10个工作节点。所有工作节点和主节点都添加在同一个负载平衡器下。我对入口流量如何到达集群有点困惑。当有人访问其应用的DNS时,流量通过端口80/443上的负载平衡器到达任何群集节点(包括主节点)。但入口控制器pod或仅在一个或两个节点上运行。流量如何准确到达正确的入口控制器pod?此外,一旦流量到达节点,它如何准确地识别将流量转发到的正确入口主机?围绕此问题的另一个问题是,为什么主节点和工作节点都添加到同一个负载平衡器下?

tf7tbtn2

tf7tbtn21#

流量如何准确到达正确的入口控制器pod?此外,一旦流量到达节点,它如何准确识别要将流量转发到的正确入口主机?
入口控制器不需要在每个计算节点上部署,因为它知道通往具有路由的单元的所有路径。

如何知道哪些节点可用

负载平衡器有一个健康检查功能来检查节点上的端口或http请求。这有助于了解入口pod工作的可用节点。

如何到达入口控制器

入口打开的端口在pod中,而不是节点。云提供商(如Azure)中的OpenShift为入口部署负载平衡器服务。这将在Azure中部署负载平衡器,并绑定节点上的端口(主机)接收来自OpenShift集群外部的请求。这些端口是随机定义的。负载平衡器服务在Azure中设置负载平衡器,以访问节点上的端口。因此,您不必担心节点上的哪些端口是打开的。

如何将请求传输到正确的Pod

入口控制器由作为L7代理模式工作的HAProxy组成。对入口控制器的请求应该具有“主机名”,并且应该与您定义的路由匹配。这允许将您的请求引导到正确的pod。
另一个与此相关的问题是,为什么主节点和工作节点都要添加到同一个负载平衡器下?
入口控制器是一个pod,因此如果您不指定“节点选择器”,则可以将pod部署到OpenShift集群中的任何节点。由于pod可能会意外地部署到不同的节点,因此负载平衡器已为此做好准备。

xu3bshqb

xu3bshqb2#

如果有人登陆这里寻找答案,那么在将数据包转发到服务的节点上有一个iptable规则
入口服务具有nodePort 30331。使用端口号grep ip表


# iptables -t nat -L KUBE-NODEPORTS -n  | column -t | grep "30331"

KUBE-MARK-MASQ             tcp             --   127.0.0.0/8  0.0.0.0/0    /*  ingress/default:https         */  tcp  dpt:30331
KUBE-XLB-MBAZS3WDHL45BPIZ  tcp             --   0.0.0.0/0    0.0.0.0/0    /*  ingress/default:https         */  tcp  dpt:30331

我的服务IP地址是:使用服务ip对ip表进行Grep


# iptables -t nat -L KUBE-SERVICES -n  | column -t | grep "172.70.92.82"

KUBE-SVC-HEVFQXAKPPGAL4BV  tcp            --   0.0.0.0/0    172.70.92.82   /*  ingress/default:http    cluster       IP          */     tcp   dpt:80                                                                          
KUBE-SVC-MBAZS3WDHL45BPIZ  tcp            --   0.0.0.0/0    172.70.92.82   /*  ingress/default:https    cluster      IP          */     tcp   dpt:443

相关问题