arm64 系统克隆主机上 部署 k8s 跨节点 pod 网络不通 解决方法

前言

​ 测试环境中使用了一台 长城 arm 架构的服务器,创建几台虚拟机准备测试安装 kubernetes 。按照之前 虚拟化的使用方式,创建并安装一台虚拟机后,后面的虚拟机从安装好系统的虚拟机克隆而来。再克隆好的主机上搭建完 Kubernetes 之后,发现跨节点的 Pod 无法访问。


附上参考链接:https://zhangguanzhang.github.io/2020/11/06/kylin-arm-clone-vxlan-error/


环境信息


系统版本:

image-20211015163307946


集群信息:

image-20211015163826828


node 信息:

image-20211015163412152


coredns 信息:

image-20211015163935260



排查过程


创建了测试 Pod :

[root@k8s-master ~]# cat ngx-test.yaml 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: ngx-test
  name: ngx-test
spec:
        #replicas: 1
  selector:
    matchLabels:
      app: ngx-test
  template:
    metadata:
      labels:
        app: ngx-test
    spec:
      containers:
      - image: nginx:alpine-arm64
        name: nginx
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: ngx-test
  name: ngx-test
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: ngx-test

image-20211015165502299


通过 master 节点直接访问 Pod 地址:

image-20211015165606927


发现问题:Pod 网络跨主机无法通信。

尝试在 Pod 所在的主机进行访问:

image-20211015165854325


发现问题:跨集群节点的Pod 网络是无法访问的。


目前问题到这里就想到 是否是网络插件 flannel 出了问题。于是继续排查 flannel :

image-20211015170152373


最初,进行了 ping 测试并使用 tcpdump进行排查,无解。开始怀疑是否是 kylin arm64 兼容性的问题,但是切换到 centos 7 arm64 搭建k8s一切正常,排除了 kvm虚拟化和兼容性的问题。

由于最初创建虚拟机是通过 克隆 的方式来创建三台虚拟机的,考虑过 mac 地址的问题,也给忽略了。

查阅相关资料,看到有大佬已经处理过类似的问题:

https://zhangguanzhang.github.io/2020/11/06/kylin-arm-clone-vxlan-error/

我出现的情况和他文中的一模一样。


回到上面的图片才发现 三张虚拟机网络 flannel.1 mac地址竟然全部一样的。查看下 集群分配的mac 地址:

image-20211015170352897

果然问题出在 mac 地址上面。


解决过程

根据大佬给出的办法,首先创建 link 文件:

集群内的每个节点都需要创建:

cat << 'EOF' > /etc/systemd/10-flannel.1.link
[Match]
OriginalName=flannel.1

[Link]
MACAddressPolicy=none
EOF

查看是否运行:

image-20211015171501567


再次,删除节点的 flannel.1 虚拟网卡

ip link delete flannel.1

然后删除节点对应的 kube-flannel-ds* Pod 使其 重新创建:

kubectl delete po -n kube-system  kube-flannel-ds-skhkq

重新生成的 flannel.1 网卡的 mac 地址就更新了。

image-20211015172816310


确保,网络的mac 和集群显示的 mac 地址统一:

image-20211015173508350


每个节点如上操作后,再次进行 跨节点访问测试:

image-20211015173619624


到此,跨节点的Pod网络恢复正常。


总结


出现跨节点 Pod 无法访问的问题:

  1. 查看 集群节点 是否处于 Ready 状态
  2. 检查 flannel.1 Pod 是否正常运行
  3. 查看所有节点 flannel.1 网卡 mac 是否一致
  4. 克隆主机一定要注意网卡mac 一致的问题


--- EOF ---
原文地址:https://www.cnblogs.com/hukey/p/15412081.html