Kubernetes-集群内部网络-

时间:2020-06-07 21:25:15

标签: kubernetes load-balancing

我试图了解Kubernetes的网络连接,并在GKE网络文档中遇到了以下代码片段... GKE - Networking。这说...

openssl ts -verify -in image.tsr -data image.png -CAfile cacert.pem

对此我有两个问题...

  1. 假设有5个节点,其中3个节点是服务的一部分。现在,其中一个Pod(来自不属于服务一部分的节点)希望与服务进行通信...它通过服务的FQDN查找服务。.此节点中的kube-proxy是否将流量发送到其中一个Pod服务的一部分?
  2. 此外,它还说kube-proxy负载平衡了整个pod的流量...这是怎么做的?如果只有一个节点进行流量路由,它将了解哪个节点是下一个要获取流量的节点/吊舱。但是Service会随机选择节点(服务中具有)吗?

有人可以澄清一下吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

请为您的问题找到答案:

1)这个节点中的kube-proxy是否将流量发送到服务中的其中一个pod?

kube-proxy会将流量路由到正确的广告连播。集群中的每个节点都将具有kube-proxy,并且每个kube-proxy将编写iptable规则以在使用serviceIP时将流量重定向到Pod

2)让我们举个例子:

我们有4个节点集群和两个带有2个副本的应用程序。

node1 -> application1_pod1
node2 -> application1_pod2
node3 -> application2_pod1
node4 -> application2_pod2 
(all 4 pods are running in different node)

现在application1想使用application2的服务名称与application2对话。

1. application1_pod1 may talk to application2_pod1
1.1 (once this is done, node1 iptables will route next traffic to application2_pod2)
2. application1_pod2 may talk to application2_pod1 (as the iptables of node2 is not aware of previous traffic in node1)
2.1 (once this is done, node2 iptables will route next traffic to application2_pod2)
3. application1_pod1 will talk to application2_pod2 (because of 1.1)
4. application1_pod2 will talk to application2_pod2 (because of 2.1)

因此,在第2步结束时,到application2_pod1的流量为100%,到application2_pod2的流量为0%。 在第4步结束时,到application2_pod2的流量是50%,到application2_pod2的流量是50%

因此,严格来说,这不是循环,而是最终循环。

如何将服务IP转换为podIP?

ServiceIP是虚拟IP 。 PodIP基本上是containerIP(与某些运行过程相关联)。 ServiceIP以循环方式指向PodIP。

kube-proxy将在每个节点中编写如下的iptable规则:(假设有3个容器)

When destination is equal to serviceIP, then route to 

- PodIP1 with 33% probability, 
- PodIP2 with 33% probability and
- PodIP3 with 34% probability

为此,kube-proxy将侦听服务(主要是端点)的创建和来自API服务器的更新。

答案 1 :(得分:2)

检查official doc的这一部分

kube-proxy在3种不同的代理模式下运行:

  1. 用户空间代理模式
  2. iptables代理模式
  3. IPVS代理模式

实现细节有所不同,但通常来说,kube-proxy管理与服务和端点的连接。而且像代理服务器一样,它可以将不属于其节点的流量重定向到正确的流量。

所以...

1)是

2)您引用的文档专门针对GKE。如果您查看k8s的官方文档,则只会发现kube-proxy in iptables mode chooses a backend at random.,其他模式将使用轮询或用户指定的方法来分发流量。