Cilium Vxlan 模式(一)
  TEZNKK3IfmPf 2023年11月14日 11 0

通信四元组信息

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

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

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

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

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

Cilium Vxlan 模式(一)

为什么需要 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

Cilium Vxlan 模式(一)

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

Cilium Vxlan 模式(一)

# 给网卡添加 ip 地址
ip address add 20.1.1.2/24 dev vxlan0
ip link set vxlan0 up

# 查看网卡的 IP 地址
ifconfig vxlan0

Cilium Vxlan 模式(一)

60 主机操作

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

ifconfig vxlan0

Cilium Vxlan 模式(一)

分析数据报文

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

Cilium Vxlan 模式(一)

返回了目的地址的 MAC 地址

Cilium Vxlan 模式(一)

标准的 vxlan 报文

Cilium Vxlan 模式(一)

cilium vxlan 模式

cilium 默认就是 vxlan 模式

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

Cilium Vxlan 模式(一)

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

<sub># kubectl create deployment cni-test --image=burlyluo/nettoolbox:latest --replicas=3

</sub># kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
cni-test-76d79dfb85-5l4w9 1/1 Running 0 78s 10.0.0.133 node-1.whale.com <none> <none>
cni-test-76d79dfb85-7thf8 1/1 Running 0 78s 10.0.0.67 node-1.whale.com <none> <none>
cni-test-76d79dfb85-jfqc5 1/1 Running 0 78s 10.0.1.215 node-2.whale.com <none> <none>

~# kubectl exec -it cni-test-76d79dfb85-5l4w9 -- ping 10.0.1.215

node-2 节点抓包

tcpdump -pne -i ens33 -w cilium_vxlan.cap

Cilium Vxlan 模式(一)

首先需要修改默认 wireshark 解析

选中 UDP 报文,右键点击 解码为(decode as)

Cilium Vxlan 模式(一)

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

Cilium Vxlan 模式(一)

查看 ICMP 报文

Cilium Vxlan 模式(一)

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

kubectl exec -it cilium-fxdkr -- bash

cilium endpoint list | grep 3352
cilium identity list | grep 3352

Cilium Vxlan 模式(一)

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 -- bash

root@node-2:/home/cilium# cilium identity list
ID LABELS
1 reserved:host
2 reserved:world
3 reserved:unmanaged
4 reserved:health
5 reserved:init
6 reserved:remote-node
3352 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=default
53142 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-dns
60388 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

Cilium Vxlan 模式(一)

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

Cilium Vxlan 模式(一)

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

Cilium Vxlan 模式(一)

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

request VNID 3352

Cilium Vxlan 模式(一)

reply VNID 60388

Cilium Vxlan 模式(一)

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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

TEZNKK3IfmPf