首页主机资讯ubuntu k8s网络配置怎样实现

ubuntu k8s网络配置怎样实现

时间2026-01-15 15:48:54发布访客分类主机资讯浏览1316
导读:Ubuntu 上 Kubernetes 网络配置实操指南 一 前置准备与规划 节点网络与内核参数 关闭 swap:sudo swapoff -a 并注释 /etc/fstab 中的 swap 行,避免 kubelet 异常。 开启桥接流...

Ubuntu 上 Kubernetes 网络配置实操指南

一 前置准备与规划

  • 节点网络与内核参数
    • 关闭 swapsudo swapoff -a 并注释 /etc/fstab 中的 swap 行,避免 kubelet 异常。
    • 开启桥接流量转发(/etc/sysctl.d/k8s.conf):
      • net.bridge.bridge-nf-call-iptables = 1
      • net.bridge.bridge-nf-call-ip6tables = 1
      • net.ipv4.ip_forward = 1
      • 执行 sudo sysctl --system 生效。
  • 容器运行时与 kubeadm
    • 安装并启用 containerd(或 Docker),配置 cgroups 驱动一致(常见为 systemd)。
    • 安装 kubeadm/kubelet/kubectl,并 sudo systemctl enable --now kubelet
  • 规划 Pod 网段与 Service 网段
    • 常见做法:Service 使用 10.96.0.0/12(默认),Pod 网段按插件选择,例如 10.244.0.0/16(Flannel 常用)192.168.0.0/16(Calico 常用)
    • 如使用 kubeadm init,通过 --pod-network-cidr 指定 Pod 网段,例如:sudo kubeadm init --pod-network-cidr=10.244.0.0/16
  • 主机名与解析
    • 建议设置 /etc/hostname/etc/hosts,保证节点间可解析,便于排障与调度稳定。

二 使用 kubeadm 初始化并安装 CNI 插件

  • 初始化控制平面(示例):
    • sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    • 完成后按提示拷贝 kubeconfig:mkdir -p $HOME/.kube & & sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config & & sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 安装 CNI 网络插件(三选一,保持 Pod CIDR 与插件配置一致)
    • Calico(推荐,策略能力强)
      • kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
      • kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
    • Flannel(上手简单,覆盖常见场景)
      • 下载并修改 kube-flannel.yml,确保 net-conf.json.Network--pod-network-cidr 一致(如 10.244.0.0/16
      • kubectl apply -f kube-flannel.yml
    • Cilium(eBPF 驱动,性能与可观测性好)
      • helm repo add cilium https://helm.cilium.io/
      • helm install cilium cilium/cilium --namespace kube-system
  • 验证
    • kubectl get nodes 看到所有节点 Ready
    • kubectl get pods -n kube-system 插件相关 Pod Running
    • 运行测试:kubectl run nginx --image=nginx --port=80 并检查 kubectl get pods 与日志。

三 节点网络与网桥的声明式管理(可选)

  • 场景:需要以 Kubernetes CRD 的方式统一管理节点网卡、Bond、VLAN、Bridge 等(例如在混合云/裸金属环境)。
  • 方案:使用 kubernetes-nmstate(基于 NetworkManagernmstate 库)
    • 前置:Ubuntu 默认 netplan,需切换 renderer 为 NetworkManager
      • 编辑 /etc/netplan/00-installer-config.yamlrenderer: NetworkManager
      • sudo netplan generate & & sudo netplan apply
      • 验证:/usr/sbin/NetworkManager --version(需 > = 1.20
    • 部署 kubernetes-nmstate(示例,按版本替换 URL)
      • kubectl apply -f https://github.com/nmstate/kubernetes-nmstate/releases/download/v0.82.0/namespace.yaml
      • kubectl apply -f https://github.com/nmstate/kubernetes-nmstate/releases/download/v0.82.0/nmstate.io_nmstates.yaml
      • kubectl apply -f https://github.com/nmstate/kubernetes-nmstate/releases/download/v0.82.0/operator.yaml
      • 创建 CR 触发:kubectl create -f - < < EOF ... EOF(见下文示例)
    • 验证:kubectl -n nmstate get pods 看到 handler 正常运行。

示例 NMState CR(将节点 eth1 加入 bond0,并创建 bridge0 作为 Linux 网桥)

apiVersion: nmstate.io/v1
kind: NMState
metadata:
  name: nmstate
spec:
  nodeSelector:
    kubernetes.io/hostname: your-node-name
  desiredState:
    interfaces:
      - name: bond0
        type: bond
        state: up
        link-aggregation:
          mode: 802.3ad
          options:
            miimon: "100"
        slaves:
          - eth1
      - name: bridge0
        type: bridge
        state: up
        bridge:
          ports:
            - bond0
    dns-resolver:
      config:
        search: []
        servers:
          - 223.5.5.5
          - 8.8.8.8
    routes:
      config:
        - destination: default
          next-hop-address: 192.168.1.1
          table-id: 254

提示:生产使用前先在测试节点验证,避免锁死管理口;变更会由 nmstate-handler 在节点上原子化应用。

四 验证与常见问题

  • 连通性验证
    • 跨节点 Pod 互通:kubectl run test-nginx --image=nginx --restart=Never -it --rm -- curl http://< 另一节点PodIP>
    • 服务访问:kubectl expose deployment nginx --port=80 --type=NodePortLoadBalancer,用节点 IP 与端口访问验证。
  • 常见问题速查
    • 节点 NotReady:检查 CNI 插件 Pod 是否 Running、Pod CIDR 是否与插件配置一致、节点网络(VxLAN/路由)是否可达。
    • Pod 之间不通:确认 NetworkPolicy 未误拦截;检查安全组/云防火墙是否放通 VxLAN 8472/UDP 或对应后端端口。
    • Service 不通:确认 kube-proxy 正常运行(iptables/ipvs),以及云厂商 LoadBalancer 外部 IP 分配状态。
    • 多插件冲突:同一集群只保留 一个 CNI 插件,避免 IP 分配与路由冲突。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: ubuntu k8s网络配置怎样实现
本文地址: https://pptw.com/jishu/780127.html
k8s应用在ubuntu上如何部署 ubuntu上k8s版本怎么选

游客 回复需填写必要信息