温馨提示×

Debian上Kubernetes网络配置

小樊
52
2025-10-04 13:36:14
栏目: 智能运维

Debian上Kubernetes网络配置指南

在Debian系统上配置Kubernetes网络需完成基础环境准备集群初始化网络插件部署验证等关键步骤,以下是详细流程:

一、基础环境准备

1. 关闭Swap分区

Kubelet要求节点关闭swap,否则无法正常运行。执行以下命令:

sudo swapoff -a # 临时关闭swap sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 永久禁用swap(注释fstab中的swap行) 

2. 配置网络接口

编辑/etc/network/interfaces(Debian传统方式)或使用Netplan(Debian 10+推荐)设置静态IP(集群节点需固定IP):

  • 传统方式(static)
    auto eth0 iface eth0 inet static address 192.168.1.100 # 节点IP netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 8.8.4.4 
  • Netplan方式(YAML配置): 编辑/etc/netplan/01-netcfg.yaml
    network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: [192.168.1.100/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 8.8.4.4] 
    应用配置:sudo netplan apply

3. 安装容器运行时(Containerd)

Kubernetes推荐使用containerd作为容器运行时。执行以下命令:

sudo apt update sudo apt install -y containerd # 加载必要内核模块 cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # 配置sysctl参数(允许桥接流量) cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF sudo sysctl --system # 启动并启用containerd sudo systemctl enable --now containerd 

4. 添加Kubernetes软件源

导入GPG密钥并添加Kubernetes APT源:

sudo apt update sudo apt install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt update 

5. 安装Kubernetes核心组件

安装kubeletkubeadmkubectl并锁定版本(避免自动升级):

sudo apt install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl # 锁定版本 

二、初始化Kubernetes集群

主节点上执行kubeadm init命令,指定集群参数(如API服务器地址、Pod网络CIDR):

sudo kubeadm init \ --apiserver-advertise-address=192.168.1.100 \ # 主节点IP --pod-network-cidr=10.244.0.0/16 \ # Pod网络CIDR(需与网络插件匹配) --service-cidr=10.96.0.0/12 \ # Service网络CIDR(默认) --image-repository registry.aliyuncs.com/google_containers \ # 国内镜像加速 --kubernetes-version v1.28.0 # 指定Kubernetes版本 

初始化完成后,会输出kubeadm join命令(用于工作节点加入集群),请妥善保存。

三、配置kubectl

将主节点的admin.conf复制到当前用户的.kube目录,用于管理集群:

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 

四、部署网络插件

Kubernetes需要网络插件实现Pod间通信,常见插件及部署步骤如下:

1. Flannel(轻量级Overlay网络)

Flannel通过VXLAN技术实现跨节点Pod通信,适合小型集群:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 

验证插件状态:

kubectl get pods -n kube-system # 查看flannel相关Pod是否处于Running状态 

2. Calico(高性能三层网络,支持网络策略)

Calico提供更丰富的网络功能(如网络策略、BGP路由),适合生产环境:

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml 

若需调整配置(如启用IP-in-IP模式),可修改Calico的ConfigMap:

kubectl edit cm -n calico-system calico-config 

3. Weave Net(简单易用,自修复网络)

Weave Net无需额外配置,自动发现节点:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" 

五、验证网络配置

  1. 检查节点状态

    kubectl get nodes 

    所有节点应处于Ready状态。

  2. 测试Pod网络连通性: 创建测试Pod并访问外部网络:

    kubectl run nginx --image=nginx --restart=Never --rm -it -- /bin/sh # 在Pod内执行 apk add --no-cache curl # Debian基础镜像可能无curl,需安装 curl http://www.google.com # 验证是否能访问外部网络 
  3. 测试Pod间通信: 创建两个Pod并互相访问:

    kubectl run pod1 --image=busybox --restart=Never -- /bin/sh -c "while true; do sleep 3600; done" kubectl run pod2 --image=busybox --restart=Never -- /bin/sh -c "while true; do sleep 3600; done" # 获取Pod IP POD1_IP=$(kubectl get pod pod1 -o jsonpath='{.status.podIP}') POD2_IP=$(kubectl get pod pod2 -o jsonpath='{.status.podIP}') # 在pod1中ping pod2 kubectl exec -it pod1 -- ping $POD2_IP 

六、可选:配置防火墙规则

若系统启用了ufw(Uncomplicated Firewall),需允许Kubernetes相关端口:

sudo ufw allow 6443/tcp # Kubernetes API服务器 sudo ufw allow 10250/tcp # kubelet API sudo ufw allow 10255/tcp # kubelet只读API sudo ufw allow 2379:2380/tcp # etcd集群通信 sudo ufw allow 179/tcp # Calico BGP(若使用Calico) sudo ufw allow 4789/udp # Calico VXLAN sudo ufw reload 

通过以上步骤,即可在Debian系统上完成Kubernetes网络配置。需根据实际需求选择网络插件,并参考插件官方文档调整高级配置(如Calico的BGP、Flannel的性能优化)。

0