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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM