手机怎么网站模板,wordpress文章模板,wordpress转发微信,开发app的网站有哪些文章目录 概要命名空间之间的路由同一节点上的 Pod 到 Pod 路由跨节点的 Pod 间路由总结 概要
在前一篇讨论网络接口的内容中#xff0c;详细分析了如何识别所有参与 Pod 间路由的接口。同时#xff0c;以简明的非技术语言阐述了 Cilium 在 Kubernetes 集群中的路由机制。接… 文章目录 概要命名空间之间的路由同一节点上的 Pod 到 Pod 路由跨节点的 Pod 间路由总结 概要
在前一篇讨论网络接口的内容中详细分析了如何识别所有参与 Pod 间路由的接口。同时以简明的非技术语言阐述了 Cilium 在 Kubernetes 集群中的路由机制。接下来将展示具体实现。
我们仍将沿用上一章节形成的示意图 继续采用相同的方法模拟数据包从左上角的公寓Pod10.0.1.73 出发传递至 Kubernetes 集群中的其他 Pod。在此之前将看看命名空间的概念并通过新的类比进一步完善示意图。
命名空间之间的路由
命名空间是一种逻辑对象组用于在集群中实现隔离。然而在默认配置的 Kubernetes 集群中所有 Pod 无论是否属于同一命名空间都可以彼此通信。因此命名空间的隔离功能并不等同于限制 Pod 之间的通信。若需控制这种通信行为需要通过创建网络策略来实现。 命名空间可以类比为集群中所有建筑的同一楼层。每座建筑内处于相同楼层的所有公寓在逻辑上归属于同一命名空间。以下示例展示了命名为 web 的命名空间结构。
$ kubectl get pods -n web -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
redis-77598f9f86-g4dqg 1/1 Running 0 19h 10.0.1.73 k8sworker1.pci.co.id none none
redis-77598f9f86-hpmsh 1/1 Running 0 18h 10.0.0.222 k8smaster.pci.co.id none none
service-python-7f7c9d4fc4-jhp4d 1/1 Running 0 8d 10.0.1.135 k8sworker1.pci.co.id none none
webserver-5f9579b5b5-4vj77 1/1 Running 0 19h 10.0.0.150 k8smaster.pci.co.id none none
webserver-5f9579b5b5-qw2m4 1/1 Running 0 19h 10.0.1.48 k8sworker1.pci.co.id none none这是一层楼上的四个公寓/Pod被归类为同一个命名空间 路由过程不涉及 Pod 所在的命名空间仅使用目标 IP 地址。接下来将展示如何从同一栋大楼节点中的公寓 10.0.1.73路由至公寓 10.0.1.48。
同一节点上的 Pod 到 Pod 路由
从 Pod 10.0.1.73 启程目标为访问 10.0.1.48。首先需查阅路由表以确定到达目标的路径。然而在出发之前必须获取目标的 MAC 地址。只有同时获得目标的 IP 地址和 MAC 地址才能开始路由过程。因此需要查看 ARP 表查找目标的 MAC 地址。ARP 表包含了同一 IP 子网内已知的 MAC 地址与 IP 地址的映射。如果该地址不在表中则会发送 ARP 请求向网络中的其他设备查询目标的 MAC 地址。收到目标地址后将其记录到 ARP 表中。此时经过确认已准备好启动路由过程Pod 开始出发。 接下来分析如何在源 Pod 10.0.1.73中追踪该过程。
$ kubectl exec -it -n web redis-77598f9f86-g4dqg -- ip route
default via 10.0.1.70 dev eth0 mtu 1450
10.0.1.70 dev eth0 scope link路由指令非常简洁对于每个目标均通过 10.0.1.70并使用 Pod 中的唯一网络接口 eth0。可以从上述示意图中看出10.0.1.70是 cilium_host 的 IP 地址。接下来检查 ARP 表
$ kubectl exec -it -n web redis-77598f9f86-g4dqg -- arp -aarp -a 命令列出了 ARP 表的内容但其中没有任何记录。 一种发送侦查请求的方法是使用 arping 工具向目标发送请求。 需要注意的是假如所使用镜像不包含这些 命令可以使用下面的方式安装
kubectl exec -it -n web redis-77598f9f86-g4dqg -- apt update
kubectl exec -it -n web redis-77598f9f86-g4dqg -- apt install net-tools
kubectl exec -it -n web redis-77598f9f86-g4dqg -- apt update arping当然建议尽量使用 busybox 和 netshoot镜像这些镜像提供了在故障排除过程中非常有用的网络工具。 确认有了这些网络命令工具后可以向目标发出请求
$ kubectl exec -it -n web redis-77598f9f86-g4dqg -- arping 10.0.1.48
arping: lookup dev: No matching interface found using getifaddrs().
arping: Unable to automatically find interface to use. Is it on the local LAN?
arping: Use -i to manually specify interface. Guessing interface eth0.
ARPING 10.0.1.48
58 bytes from 9a:a4:00:74:ef:bb (10.0.1.48): index0 time5.200 usec
58 bytes from 9a:a4:00:74:ef:bb (10.0.1.48): index1 time7.701 usec
58 bytes from 9a:a4:00:74:ef:bb (10.0.1.48): index2 time7.401 usec缺失的信息即目标的 MAC 地址现已获取。接下来可验证该信息是否已记录在源 Pod 的 ARP 表中
$ kubectl exec -it -n web redis-77598f9f86-g4dqg -- arp -a
? (10.0.1.70) at 9a:a4:00:74:ef:bb [ether] on eth0所需信息已成功获取。然而可能会疑惑为何在此未显示目标 IP 地址 10.0.1.48。在传统网络中通常能够看到目标 IP 地址但在 Kubernetes 集群中网络由 Cilium 管理。此外从源 Pod 的路由表可以观察到所有目标的通信均通过 cilium_host 接口进行。 因此即便是在同一 IP 子网内的 Pod 间进行通信节点上的 cilium_host 依然会接收并处理所有流量。 此外以下命令可用于快速显示集群中 cilium_host 和各节点的所有 IP 地址
$ kubectl get ciliumnodes
NAME CILIUMINTERNALIP INTERNALIP AGE
k8smaster.pci.co.id 10.0.0.169 172.19.6.5 49d
k8sworker1.pci.co.id 10.0.1.70 172.19.6.8 47d在传统网络的二层交换中目标 MAC 地址通常与目标 IP 地址直接关联。然而在 Kubernetes 网络中情况有所不同。那么究竟是哪一个接口的 MAC 地址为 9a:a4:00:74:ef:bb 以下将对此进行解析
$ ip a | grep -B1 -A2 -i 9a:a4:00:74:ef:bb
1857: lxc45ed99168f62if1856: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 9a:a4:00:74:ef:bb brd ff:ff:ff:ff:ff:ff link-netns cni-635aef78-02ec-0461-5e37-830ca81c8812inet6 fe80::98a4:ff:fe74:efbb/64 scope linkvalid_lft forever preferred_lft forever该 MAC 地址对应的是节点的 LXC 接口这是源 Pod 通往目标的下一步路径。在本系列网络文章的第一篇中已提及在 LXC 接口处有一个“服务者”等待(配置了一个服务组件),于引导通信流向目标 从传统的 Linux 路由视角来看此处目标的通信路径并不直观。这是因为路由由 Cilium Agent 使用 eBPF 技术完成。鉴于目标与源 Pod 位于同一 IP 子网内Cilium Agent 会将流量直接切换至目标的 LXC 接口最终到达目标 Pod。 目标 Pod 在响应源 Pod 时会经历相同的过程。为确保表述完整以下展示了目标 Pod 中的路由表和 ARP 表
$ kubectl exec -it -n web webserver-5f9579b5b5-qw2m4 -- ip route
default via 10.0.1.70 dev eth0 mtu 1450
10.0.1.70 dev eth0 scope link$ kubectl exec -it -n web webserver-5f9579b5b5-qw2m4 -- arp -a
? (10.0.1.70) at a6:bf:8b:47:ee:3e [ether] on eth0$ ip a | grep -B1 -A2 -i a6:bf:8b:47:ee:3e
1859: lxc9a32fc44db3cif1858: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether a6:bf:8b:47:ee:3e brd ff:ff:ff:ff:ff:ff link-netns cni-980c48cf-6b31-2ca3-4b39-fa0b409a1b66inet6 fe80::a4bf:8bff:fe47:ee3e/64 scope linkvalid_lft forever preferred_lft forever从传统 Linux 路由的视角来看所有流量均被转发至 cilium_host目标 MAC 地址则对应于节点中与 Pod 关联的 LXC 接口。这一行为与源 Pod 的情况完全相同。
跨节点的 Pod 间路由
接下来将探讨如何从源 Pod 10.0.1.73位于某一节点访问目标 Pod 10.0.0.222位于另一节点。初始的路由过程与之前相同但当流量到达 LXC 接口的“服务者”时目标 IP 地址被判定为不属于同一 IP 子网因此流量会被引导至大厅中的 cilium_host。随后流量通过 cilium_vxlan 接口进行路由最终到达托管目标 Pod 的节点。 现将查看主机的路由表
kubeuserk8sworker1:~$ ip route
default via 172.19.7.254 dev eth0 proto static
10.0.0.0/24 via 10.0.1.70 dev cilium_host proto kernel src 10.0.1.70 mtu 1450
10.0.1.0/24 via 10.0.1.70 dev cilium_host proto kernel src 10.0.1.70
10.0.1.70 dev cilium_host proto kernel scope link
172.19.6.0/23 dev eth0 proto kernel scope link src 172.19.6.8在此并未呈现太多信息因为路由是通过 eBPF 完成的并由 Cilium Agent 管理正如前述所示。 另外为了全面展示相关信息Cilium Agent Pod 中的网络接口输出和 ip route 与节点的完全相同。这是因为在启动时Cilium Agent 会将这些信息提供给节点。可通过以下命令检查 Cilium Agent
kubectl exec -it -n kube-system cilium-kbwq7 -- ip a
kubectl exec -it -n kube-system cilium-kbwq7 -- ip route因此流量通过 VXLAN 隧道到达节点 目标节点。以下是该节点的路由表
kubeuserk8smaster:~/yaml$ ip route
default via 172.19.7.254 dev eth0 proto static
10.0.0.0/24 via 10.0.0.169 dev cilium_host proto kernel src 10.0.0.169
10.0.0.169 dev cilium_host proto kernel scope link
10.0.1.0/24 via 10.0.0.169 dev cilium_host proto kernel src 10.0.0.169 mtu 1450
172.19.6.0/23 dev eth0 proto kernel scope link src 172.19.6.5从传统的 Linux 路由视角来看除了所有针对 Pod 子网的流量都会被引导到由 Cilium Agent 管理的 cilium_host 外并未显示出更多的内容。这一过程与在其他节点所观察到的情况完全一致。当流量到达 cilium_vxlan 接口时借助 eBPF 映射流量将被引导通过一条隐秘通道最终到达左上角 Pod 的 LXC 区域接口进而抵达目标。
总结
Cilium 在 Kubernetes 中使用 eBPF 进行数据包路由的工作原理。在传统 Linux 路由视角下流量会通过常规路由过程传递但 Cilium 通过 eBPF 技术实现了更高效的路由。特别是Cilium 使用了“服务者”模式和秘密通道使得流量在 Kubernetes 集群内部更加迅速和精确地转发。 在跨节点路由中Cilium 会将流量通过 cilium_vxlan 接口传递进一步利用 eBPF 引导流量到达目标 Pod。而通过传统 Linux 路由命令查看时虽然看不见所有的细节但通过 Cilium 代理的管理和 eBPF 的支持流量路由的速度显著提升。 总的来说Cilium 的网络路由通过结合传统网络技术与现代的 eBPF 技术提供了更高效、灵活的网络连接方案。 kubeneters-循序渐进Cilium网络一 kubeneters-循序渐进Cilium网络二 kubeneters-循序渐进Cilium网络三 [kubeneters-循序渐进Cilium网络四 文章转载自: http://www.morning.qwmdx.cn.gov.cn.qwmdx.cn http://www.morning.mkccd.cn.gov.cn.mkccd.cn http://www.morning.wklhn.cn.gov.cn.wklhn.cn http://www.morning.mrbmc.cn.gov.cn.mrbmc.cn http://www.morning.rnqyy.cn.gov.cn.rnqyy.cn http://www.morning.wfyqn.cn.gov.cn.wfyqn.cn http://www.morning.lrflh.cn.gov.cn.lrflh.cn http://www.morning.wbfly.cn.gov.cn.wbfly.cn http://www.morning.rgpsq.cn.gov.cn.rgpsq.cn http://www.morning.pskjm.cn.gov.cn.pskjm.cn http://www.morning.rzrbw.cn.gov.cn.rzrbw.cn http://www.morning.lmfmd.cn.gov.cn.lmfmd.cn http://www.morning.gyqnc.cn.gov.cn.gyqnc.cn http://www.morning.hsdhr.cn.gov.cn.hsdhr.cn http://www.morning.nrqnj.cn.gov.cn.nrqnj.cn http://www.morning.iiunion.com.gov.cn.iiunion.com http://www.morning.btqqh.cn.gov.cn.btqqh.cn http://www.morning.hprmg.cn.gov.cn.hprmg.cn http://www.morning.gnfkl.cn.gov.cn.gnfkl.cn http://www.morning.cprls.cn.gov.cn.cprls.cn http://www.morning.qieistand.com.gov.cn.qieistand.com http://www.morning.bctr.cn.gov.cn.bctr.cn http://www.morning.ckfqt.cn.gov.cn.ckfqt.cn http://www.morning.tpbhf.cn.gov.cn.tpbhf.cn http://www.morning.leyuhh.com.gov.cn.leyuhh.com http://www.morning.fxxmj.cn.gov.cn.fxxmj.cn http://www.morning.kcbml.cn.gov.cn.kcbml.cn http://www.morning.bby45.cn.gov.cn.bby45.cn http://www.morning.ckxd.cn.gov.cn.ckxd.cn http://www.morning.rwqj.cn.gov.cn.rwqj.cn http://www.morning.tlnkz.cn.gov.cn.tlnkz.cn http://www.morning.qnzk.cn.gov.cn.qnzk.cn http://www.morning.nqbcj.cn.gov.cn.nqbcj.cn http://www.morning.fkdts.cn.gov.cn.fkdts.cn http://www.morning.pbzlh.cn.gov.cn.pbzlh.cn http://www.morning.rlhgx.cn.gov.cn.rlhgx.cn http://www.morning.jzlfq.cn.gov.cn.jzlfq.cn http://www.morning.zwdrz.cn.gov.cn.zwdrz.cn http://www.morning.wgqtj.cn.gov.cn.wgqtj.cn http://www.morning.hbpjb.cn.gov.cn.hbpjb.cn http://www.morning.rfxyk.cn.gov.cn.rfxyk.cn http://www.morning.zlff.cn.gov.cn.zlff.cn http://www.morning.smfbw.cn.gov.cn.smfbw.cn http://www.morning.lqpzb.cn.gov.cn.lqpzb.cn http://www.morning.dbqcw.com.gov.cn.dbqcw.com http://www.morning.dydqh.cn.gov.cn.dydqh.cn http://www.morning.wtcbl.cn.gov.cn.wtcbl.cn http://www.morning.hpnhl.cn.gov.cn.hpnhl.cn http://www.morning.ghxkm.cn.gov.cn.ghxkm.cn http://www.morning.kbfzp.cn.gov.cn.kbfzp.cn http://www.morning.nxhjg.cn.gov.cn.nxhjg.cn http://www.morning.ysllp.cn.gov.cn.ysllp.cn http://www.morning.jxcwn.cn.gov.cn.jxcwn.cn http://www.morning.gnmhy.cn.gov.cn.gnmhy.cn http://www.morning.trnl.cn.gov.cn.trnl.cn http://www.morning.syqtt.cn.gov.cn.syqtt.cn http://www.morning.kfcfq.cn.gov.cn.kfcfq.cn http://www.morning.ydwnc.cn.gov.cn.ydwnc.cn http://www.morning.rdzgm.cn.gov.cn.rdzgm.cn http://www.morning.fwnqq.cn.gov.cn.fwnqq.cn http://www.morning.ngcsh.cn.gov.cn.ngcsh.cn http://www.morning.ldcrh.cn.gov.cn.ldcrh.cn http://www.morning.yhyqg.cn.gov.cn.yhyqg.cn http://www.morning.wqsjx.cn.gov.cn.wqsjx.cn http://www.morning.plflq.cn.gov.cn.plflq.cn http://www.morning.dlurfdo.cn.gov.cn.dlurfdo.cn http://www.morning.ldzss.cn.gov.cn.ldzss.cn http://www.morning.xtyyg.cn.gov.cn.xtyyg.cn http://www.morning.gbfck.cn.gov.cn.gbfck.cn http://www.morning.cszbj.cn.gov.cn.cszbj.cn http://www.morning.mfjfh.cn.gov.cn.mfjfh.cn http://www.morning.wdshp.cn.gov.cn.wdshp.cn http://www.morning.qbgff.cn.gov.cn.qbgff.cn http://www.morning.kmcfw.cn.gov.cn.kmcfw.cn http://www.morning.ndmbd.cn.gov.cn.ndmbd.cn http://www.morning.lwwnq.cn.gov.cn.lwwnq.cn http://www.morning.ysskn.cn.gov.cn.ysskn.cn http://www.morning.qsfys.cn.gov.cn.qsfys.cn http://www.morning.jhxdj.cn.gov.cn.jhxdj.cn http://www.morning.nlnmy.cn.gov.cn.nlnmy.cn