- 首页 >
- 问答 >
-
智能运维 >
- Debian环境下Kubernetes的网络设置
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/udp 或 51821/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
- 常见问题排查:
- 节点 NotReady:检查 kube-proxy、CNI 插件 Pod 是否 Running,查看节点事件 kubectl describe node 与 kubectl logs -n kube-system 。
- Pod 间不通:确认 Pod CIDR 与 CNI 配置一致,跨节点通信未被防火墙/安全组阻断。
- Service 访问异常:核对 Service ClusterIP、NodePort、Endpoints 是否正确;必要时检查 kube-proxy 模式(iptables/ipvs)与日志。
- 端口冲突:确保 6443/10250/30000-32767 等端口未被占用,云上安全组策略已放行。