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/network/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 ---

本文作者:hukey

本文链接:https://www.cnblogs.com/hukey/p/15412081.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   hukey  阅读(1340)  评论(0编辑  收藏  举报
历史上的今天:
2019-10-15 [ Docker ] 基础的网络应用
2018-10-15 [ python ] 序列化模块
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 彩虹 Jay
彩虹 - Jay
00:00 / 00:00
An audio error has occurred.

彩虹 + 轨迹 (Live) - 周杰伦 (Jay Chou)

彩虹

词:周杰伦

曲:周杰伦

哪里有彩虹告诉我

哪里有彩虹告诉我

能不能把我的愿望还给我

能不能把我的愿望还给我

为什么天这么安静

为什么天这么安静

所有的云都跑到我这里

有没有口罩一个给我

有没有口罩一个给我

释怀说了太多就成真不了

释怀说了太多就成真不了

也许时间是一种解药

也许时间是一种解药

也是我现在正服下的毒药

也是我现在正服下的毒药

看不见你的笑 我怎么睡得着

看不见你的笑 我怎么睡得着

你的声音这么近我却抱不到

你的声音这么近我却抱不到

没有地球太阳还是会绕

没有地球太阳还是会绕

没有理由我也能自己走

没有理由我也能自己走

你要离开 我知道很简单

你要离开 我知道很简单

你说依赖 是我们的阻碍

你说依赖 是我们的阻碍

就算放开 但能不能别没收我的爱

就算放开 但能不能别没收我的爱

当作我最后才明白

当作我最后才明白

看不见你的笑 要我怎么睡得着

看不见你的笑 要我怎么睡得着

你的声音这么近我却抱不到

没有地球太阳还是会绕 会绕

没有理由我也能自己走掉

释怀说了太多就成真不了

也许时间是一种解药 解药

也是我现在正服下的毒药

轨迹

词:黄俊郎

曲:周杰伦

我会发着呆然后忘记你

接着紧紧闭上眼

想着哪一天 会有人代替

想着哪一天 会有人代替

让我不再想念你

我会发着呆 然后微微笑

我会发着呆 然后微微笑

接着紧紧闭上眼

又想了一遍 你温柔的脸

又想了一遍 你温柔的脸

在我忘记之前