温馨提示×

Debian环境下Kubernetes的网络设置

小樊
45
2025-12-22 23:51:43
栏目: 智能运维

Debian环境下Kubernetes网络设置

一 基础网络与内核参数

  • 禁用 Swap:执行 sudo swapoff -a,并在 /etc/fstab 中注释含 swap 的行,避免 kubelet 异常。
  • 加载内核模块:
    sudo modprobe overlay
    sudo modprobe br_netfilter
    并在 /etc/modules-load.d/containerd.conf 写入:
    overlay
    br_netfilter
  • 开启桥接与转发(/etc/sysctl.d/99-kubernetes-k8s.conf):
    net.bridge.bridge-nf-call-iptables = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.ipv4.ip_forward = 1
    应用:sudo sysctl --system。
  • 容器运行时建议:安装并配置 containerd(或 containerd + cri-dockerd),确保与 kubelet 使用一致的 cgroup 驱动(systemd 或 cgroups v1)。
  • 主机名与解析:为每个节点设置唯一主机名,并在 /etc/hosts 中写入节点 IP 与主机名映射,便于内网解析与排查。

二 防火墙与端口规划

  • 若使用 UFW,放行控制面与节点通信端口(示例):
    控制面:sudo ufw allow 6443/tcp(API Server)、2379-2380/tcp(etcd)、10250/tcp(kubelet API)、10251/tcp(kube-scheduler)、10252/tcp(kube-controller-manager)、10255/tcp(kubelet 只读)。
    工作节点:sudo ufw allow 10250/tcp;NodePort 范围 sudo ufw allow 30000:32767/tcp
    重载:sudo ufw reload。
  • 如使用 Calico:放行 179/tcp(BGP)、4789/udp(VXLAN);如使用 Flannel VXLAN:放行 8472/udp(默认 VXLAN 端口,部分清单使用 51820/udp51821/udp,以所用清单为准)。
  • 云厂商或物理网络环境:确保安全组/ACL 同步放行上述端口,避免跨节点通信被拦截。

三 集群初始化与 Pod 网络 CIDR

  • 初始化控制面(示例,按需替换参数):
    sudo kubeadm init \ –apiserver-advertise-address=192.168.16.20 \ –control-plane-endpoint=192.168.16.20 \ –pod-network-cidr=10.244.0.0/16 \ –service-cidr=10.100.0.0/16 \ –image-repository=registry.aliyuncs.com/google_containers \ –kubernetes-version=v1.28.0
  • 配置 kubectl:
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 工作节点加入:在 master 初始化完成后,使用 kubeadm join 命令加入集群(命令由 init 输出提供)。

四 安装网络插件

  • Calico(推荐,生产常用):
    kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
    如使用 BGP 或混合网络,按需调整 Calico 的 IPPool 与 BGP 配置。
  • Flannel(简单上手):
    下载官方 kube-flannel.yml(或采用项目发布清单),执行:
    kubectl apply -f kube-flannel.yml
    注意 Flannel 默认使用 10.244.0.0/16 作为 Pod CIDR,需与 kubeadm 的 --pod-network-cidr 保持一致。
  • 验证插件就绪:
    watch kubectl get pods -n kube-system
    待所有 Pod Running 后,检查节点状态:kubectl get nodes,应为 Ready

五 连通性验证与常见问题

  • 基础连通性测试:
    kubectl create deployment nginx-app --image=nginx --replicas=2
    kubectl expose deployment nginx-app --name=nginx-web-svc --type=NodePort --port=80 --target-port=80
    kubectl get svc nginx-web-svc(获取 NodePort,如 31743
    从集群内:kubectl run -it --rm debug --image=busybox:1.36 --restart=Never – nslookup nginx-web-svc
    从集群外:curl http://<任意节点IP>:31743
  • 常见问题排查:
    1. 节点 NotReady:检查 kube-proxy、CNI 插件 Pod 是否 Running,查看节点事件 kubectl describe node 与 kubectl logs -n kube-system
    2. Pod 间不通:确认 Pod CIDR 与 CNI 配置一致,跨节点通信未被防火墙/安全组阻断。
    3. Service 访问异常:核对 Service ClusterIP、NodePort、Endpoints 是否正确;必要时检查 kube-proxy 模式(iptables/ipvs)与日志。
    4. 端口冲突:确保 6443/10250/30000-32767 等端口未被占用,云上安全组策略已放行。

0