java怎么拦截某个对象
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
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
# 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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~