Cilium Vxlan 模式(一)

网友投稿 459 2022-09-11

Cilium Vxlan 模式(一)

基础知识

通信四元组信息

源 IP 地址 、源 MAC 地址、目的 IP 地址、目的 MAC 地址

如果想使用 vxlan ,那么必须提前知道对端的 ip 地址。

ARP广播只有在一个广播域内有效,路由器具有天然的屏蔽广播报文的特性,广播报文终止于路由器的接口上。

因为请求的地址,并不是网关的地址,不会通过三层走网关,二层的通信是通过 ARP 广播

二层需要防环,三层路由通过路由表的维护,基本不会有环

为什么需要 VXLAN ?

​​华为 vxlan 文档​​

一句话总结,为了解决虚拟化的发展过程中的,服务器迁移的问题,诞生了 overlay 大二层通信的 vxlan,可以随意迁移,相当于在计算机网口交换机更换不同的 Access 口。

linux 点对点 vxlan 演示

主机信息:

主机 50 网卡IP:192.168.0.50/24 vxlan ip: 20.1.1.2/24

主机 60 网卡IP:192.168.0.60/24 vxlan ip: 20.1.1.3/24

50 主机操作

# 50 主机创建 vxlan0 网卡ip link add vxlan0 type vxlan id 5 dstport 4789 remote 192.168.0.60 local 192.168.0.50 dev ens33# 查看创建网卡信息ip -d link show vxlan0

# 给网卡添加 ip 地址ip address add 20.1.1.2/24 dev vxlan0ip link set vxlan0 up# 查看网卡的 IP 地址ifconfig vxlan0

60 主机操作

ip link add vxlan0 type vxlan id 5 dstport 4789 remote 192.168.0.50 local 192.168.0.60 dev ens33ip address add 20.1.1.3/24 dev vxlan0 ip link set vxlan0 upifconfig vxlan0

分析数据报文

50 主机指定网卡 ping 操作

# 指定 vxlan0 进行ping 操作ping -I 20.1.1.2 20.1.1.3

60 主机抓包

注意:需要对 ens33 抓包,这样才能看到两层 IP地址

tcpdump -pne -i ens33 -w vxlan0.cap

通过 wareshark 进行包分析

报文均经过 vxlan 进行封装

arp 广播 目的地址为 20.1.1.3

返回了目的地址的 MAC 地址

标准的 vxlan 报文

cilium vxlan 模式

cilium 默认就是 vxlan 模式

root@master:~# cat 1.10.6.yaml | grep tunnel tunnel: vxlan

通过抓取不同 node 网卡报文进行测试验证

# kubectl create deployment cni-test --image=burlyluo/nettoolbox:latest --replicas=3# kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATEScni-test-76d79dfb85-5l4w9 1/1 Running 0 78s 10.0.0.133 node-1.whale.com cni-test-76d79dfb85-7thf8 1/1 Running 0 78s 10.0.0.67 node-1.whale.com cni-test-76d79dfb85-jfqc5 1/1 Running 0 78s 10.0.1.215 node-2.whale.com ~# kubectl exec -it cni-test-76d79dfb85-5l4w9 -- ping 10.0.1.215

node-2 节点抓包

tcpdump -pne -i ens33 -w cilium_vxlan.cap

首先需要修改默认 wireshark 解析

将 UDP的 端口修改为 8472 ,最后一栏协议修改为 VXLAN

查看 ICMP 报文

进入任意一个cilium 容器中,查看VNID 是否和图中一致

kubectl exec -it cilium-fxdkr -- bashcilium endpoint list | grep 3352cilium identity list | grep 3352

Cilium vxlan ICMP报文中 Request VNID 和 Reply VNID 不一定相同

注意,这个特性是 cilium 自带的,类似于交换机的 trunk 口,VNID 类比于不同的vlan ID

查看当前有几个不同的 VNID

cilium VNID 就是每个应用的 identity,不同的应用具有不同 VNID

​​cilium_identity_get​​

kubectl exec -it cilium-fxdkr -- bashroot@node-2:/home/cilium# cilium identity list ID LABELS1 reserved:host2 reserved:world3 reserved:unmanaged4 reserved:health5 reserved:init6 reserved:remote-node3352 k8s:app=cni-test k8s:io.cilium.k8s.namespace.labels.kubernetes.io/metadata.name=default k8s:io.cilium.k8s.policy.cluster=default k8s:io.cilium.k8s.policy.serviceaccount=default k8s:io.kubernetes.pod.namespace=default53142 k8s:io.cilium.k8s.namespace.labels.kubernetes.io/metadata.name=kube-system k8s:io.cilium.k8s.policy.cluster=default k8s:io.cilium.k8s.policy.serviceaccount=coredns k8s:io.kubernetes.pod.namespace=kube-system k8s:k8s-app=kube-dns60388 k8s:app=test-nginx k8s:io.cilium.k8s.namespace.labels.kubernetes.io/metadata.name=default k8s:io.cilium.k8s.policy.cluster=default k8s:io.cilium.k8s.policy.serviceaccount=default k8s:io.kubernetes.pod.namespace=default

测试场景:

如图所示,cni-test 中的 pod 去ping test-nginx 不同节点的pod,并在node上进行抓包验证 VNID

~# kubectl get pod -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATEScni-test-76d79dfb85-5l4w9 1/1 Running 0 123m 10.0.0.133 node-1.whale.com cni-test-76d79dfb85-7thf8 1/1 Running 0 123m 10.0.0.67 node-1.whale.com cni-test-76d79dfb85-jfqc5 1/1 Running 0 123m 10.0.1.215 node-2.whale.com test-nginx-976fbbd77-2j26l 1/1 Running 0 19h 10.0.1.119 node-2.whale.com

# pingkubectl exec -it cni-test-76d79dfb85-5l4w9 -- ping 10.0.1.119

# 抓包tcpdump -pne -i ens33 -w cilium_vnid.cap

request VNID 3352

reply VNID 60388

总结:cilium VNID 就是每个应用的 identity,不同的应用具有不同 VNID,这种类似于 不同vlan ID 的 在 trunk 口通信的方式,是需要注意的地方,flannel vxlan 和calico vxlan 都是相同的 VNID

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ChaosMesh 半离线安装过程
下一篇:品牌营销如何出圈,顾家家居这波操作值得借鉴!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~