Debian上Kubernetes網絡配置指南
在Debian系統上配置Kubernetes網絡需完成基礎環境準備、集群初始化、網絡插件部署及驗證等關鍵步驟,以下是詳細流程:
Kubelet要求節點關閉swap,否則無法正常運行。執行以下命令:
sudo swapoff -a # 臨時關閉swap
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 永久禁用swap(注釋fstab中的swap行)
編輯/etc/network/interfaces
(Debian傳統方式)或使用Netplan
(Debian 10+推薦)設置靜態IP(集群節點需固定IP):
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
/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
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
導入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
安裝kubelet
、kubeadm
、kubectl
并鎖定版本(避免自動升級):
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # 鎖定版本
在主節點上執行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
命令(用于工作節點加入集群),請妥善保存。
將主節點的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間通信,常見插件及部署步驟如下:
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狀態
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
Weave Net無需額外配置,自動發現節點:
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
檢查節點狀態:
kubectl get nodes
所有節點應處于Ready
狀態。
測試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 # 驗證是否能訪問外部網絡
測試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的性能優化)。