之前的文章讲了k8s ipip模式的使用以及流量路径,本篇文章主要是来讲解一下vxlan 模式下pod 流量是如何通信的。
一、ipip模式转vxlan
- 修改calico backend参数
将calico_backend参数由bird
设置为vxlan
,因为vxlan部署不使用bgp
修改calico controllers的configmap配置
[root@node1 ~]# kubectl edit cm/calico-config -n kube-system
calico_backend: vxlan ###修改为vxlan
重启calico controllers
[root@node1 ~]# kubectl rollout restart deploy/calico-kube-controllers -n kube-system
- 修改calico daemonset
编辑calico daemonset
[root@node1 ~]# kubectl edit ds/calico-node -n kube-system
- name: CALICO_IPV4POOL_IPIP
value: Never ####修改为Never,禁用ipip
- name: CALICO_IPV4POOL_VXLAN
value: Always ####修改为vxlan
2:禁用bird探针检测,因为vxlan不需要bgp,所以需要禁用
livenessProbe:
exec:
command:
- /bin/calico-node
- -felix-live
#- -bird-live ###禁用此处探针检查
periodSeconds: 10
initialDelaySeconds: 10
failureThreshold: 6
timeoutSeconds: 10
readinessProbe:
exec:
command:
- /bin/calico-node
- -felix-ready
#- -bird-live ######禁用此处探针检查
periodSeconds: 10
timeoutSeconds: 10
3:重启ds
[root@node1 ~]# kubectl rollout restart ds/calico-node -n kube-system
- 修改ippool
1:查看当前使用的ippool
[root@node1 ~]# kubectl get ippool
NAME AGE
default-ipv4-ippool 374d
new-ipv4-ippool 168d
2:修改ippool的模式
[root@node1 ~]# kubectl edit ippool/new-ipv4-ippool
apiVersion: crd.projectcalico.org/v1
kind: IPPool
metadata:
annotations:
projectcalico.org/metadata: '{"uid":"f8ba255e-198a-4d7b-86b7-d47dc7066960","creationTimestamp":"2023-11-01T06:45:12Z"}'
creationTimestamp: "2023-11-01T06:45:12Z"
generation: 5
name: new-ipv4-ippool
resourceVersion: "62183182"
uid: f8ba255e-198a-4d7b-86b7-d47dc7066960
spec:
allowedUses:
- Workload
- Tunnel
blockSize: 24
cidr: 172.16.0.0/16
ipipMode: Never ####禁用ipip
natOutgoing: true
nodeSelector: all()
vxlanMode: Always ###修改为vxlan
当vxlanMode参数设置为 Always 的时候,三层和二层的通信都通过vxlan的方式进行通信,当值为CrossSubnet的时候只有三层才进行vxlan的方式进行通信。
- 确认没有bgp运行