1

以下是ip routeKubernetes 集群(基于 aws)的一个工作节点中的命令输出:

$ip route
default via 10.6.16.1 dev eth0 
10.6.16.0/21 dev eth0 proto kernel scope link src 10.6.22.111 
111.97.95.0/26 via 10.6.145.224 dev tunl0 proto bird onlink 
111.98.108.64/26 via 10.6.144.128 dev tunl0 proto bird onlink 
111.98.163.0/26 via 10.6.147.100 dev tunl0 proto bird onlink 
111.101.172.128/26 via 10.6.86.141 dev tunl0 proto bird onlink 
111.103.57.192/26 via 10.6.17.44 dev eth0 proto bird 
111.103.80.128/26 via 10.6.85.178 dev tunl0 proto bird onlink 
111.105.231.0/26 via 10.6.23.120 dev eth0 proto bird 
111.115.208.128/26 via 10.6.80.11 dev tunl0 proto bird onlink 
blackhole 111.126.117.128/26 proto bird 
111.126.117.129 dev cali8934275ty scope link 
111.126.117.132 dev cali983hfsdf4 scope link 
111.126.117.140 dev cali443gfby45 scope link

我对 Kubernetes 很陌生,想了解一些与此输出和 Calico 网络相关的事情:

  1. 如果 eth0 的 IP 为 10.6.22.111/21,那么 10.6.16.1 是什么样的 IP 地址 - 它是 Internet 网关吗?
  2. 另一个工作节点有两个具有相同 IP=10.6.145.224 的 Pod(Pod calico-node-74hde и kube-proxy-internal)——这是如何工作/可能的?
  3. 为什么我们需要黑洞路线?
4

1 回答 1

3

如果 eth0 的 IP 为 10.6.22.111/21,那么 10.6.16.1 是什么样的 IP 地址 - 它是 Internet 网关吗?

是的,你是对的,这确实是默认(互联网)网关。因此,例如在您的本地计算机上,默认路由将保存您家庭路由器的 IP。


另一个工作节点有两个具有相同 IP=10.6.145.224 的 Pod(Pod calico-node-74hde и kube-proxy-internal)——这是如何工作/可能的?

这是可能的,因为他们已经设置了hostNetwork: true. 检查它自己运行例如:

kubectl get po -n kube-system calico-node-74hde

并寻找hostNetwork领域。如果此字段设置为true,则 pod(更具体地说是 pod 中的容器)将不会进行网络隔离,并且可以访问主机网络接口,这就是这些 pod 具有主机 IP 的原因。


为什么我们需要黑洞路线?

我相信这个印花布问题可能会给我们一些答案。

我会试着解释一下。想象一下当有 2 个 pod 运行并通过网络相互发送数据的情况。

当其中一个 pod 被删除时,另一个 pod 可能无法识别它并继续向不存在的 IP 地址发送数据(并且由于没有 pod,因此也没有与该地址的接口)。

那么如果节点收到一个目的地址已经不存在的数据包该怎么办呢?

通常它会根据路由规则转发数据包。现在没有与 pod 关联的路由规则(刚刚被删除),数据包将根据最佳匹配规则发送。如果黑洞规则存在,数据包将被丢弃,但如果没有黑洞,数据包将通过默认网关转发(根据最佳匹配规则),您通常不希望这样。


让我知道它是否回答了您的问题。

于 2020-07-08T08:16:33.813 回答