温馨提示×

Debian上Kubernetes网络配置

小樊
64
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