k8s 双网卡部署记录

16 阅读2分钟

背景: 最近使用Hyper-V玩虚拟机,由于开启了安全机制,本身设置的NAT网络被禁止了,无奈设置了双网卡方式,一个网卡用于动态获取IP,相当于独立使用一个网卡自动从路由器获取IP来上网,这里为什么没有设置静态IP,是因为笔记本的网络环境可能更换,如果静态IP,可能在新的网络环境就无法上网了,然而动态IP也有弊端,一是MobaXterm的session无法保存动态IP记录,另一个k8s集群重新启动后,使用的CNI插件Flannel或者本身k8s的网络检测机制也无法适应动态IP,为此添加了一个静态IP网卡,这里静态IP只为满足刚才所说的弊端,然而这里出现了两个问题,一是静态网卡的优先级可能高于动态网卡,从而影响网关的配置,二来k8s节点无法确定使用对应的静态IP,可以说是理想很好,但是具体配置起来还比较麻烦,这里整理下具体配置的方法。

  1. 网卡配置 (ubuntu24)
network:
  version: 2
  ethernets:
    eth0:  # NAT网卡(自动获取IP)
      dhcp4: yes
      dhcp4-overrides:
        route-metric: 1  # 设置最高优先级
      nameservers:
        addresses: [8.8.8.8, 114.114.114.114]

    eth1:  # Host-Only网卡(静态IP)
      addresses: [192.168.56.100/24]
      routes:
        - to: 192.168.56.0/24
          via: 192.168.56.254
          metric: 100  # 低优先级,仅内网
      # 禁止eth1成为默认网关
      dhcp4: no

  1. kubeadm init --config /etc/kubernetes/kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.56.100  # 您的静态IP
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///run/containerd/containerd.sock  # 原来 --cri-socket 参数
  imagePullPolicy: IfNotPresent
  taints: null

---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.35.0  # 原来 --kubernetes-version 参数
controlPlaneEndpoint: "k8s.master.org:6443"  # 原来 --control-plane-endpoint 参数
networking:
  podSubnet: "10.244.0.0/16"  # 原来 --pod-network-cidr 参数
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers  # 原来 --image-repository 参数

  1. kube join --config /etc/kubernetes/kubeadm-config-node.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: JoinConfiguration
nodeRegistration:
  kubeletExtraArgs:
    node-ip: "192.168.56.101"  # 你的静态IP
  criSocket: unix:///run/containerd/containerd.sock
discovery:
  bootstrapToken:
    token: "9t9glf.tqvh8wf3gwq757pu"  # 原来 --token 参数
    apiServerEndpoint: "k8s.master.org:6443"
    caCertHashes:
      - "sha256:bc4492f24a8c744cea9eb93eecd640424789bb21173a8982abf1326892638504"  # 原来 --discovery-token-ca-cert-hash 参数

至此所有的配置结束,总结一是系统网卡的优先级需要明确,二是k8s集群在初始化的时候需要配置具体的静态IP,否则后面会自动获取IP, 然后本身的IP不会自动完全更新,导致实际的IP会有问题。