Ubuntu上Kubernetes網絡配置指南
在Ubuntu上配置Kubernetes網絡需完成基礎集群搭建、網絡插件選擇與部署、網絡驗證及可選策略配置四大步驟,以下是詳細操作流程:
在配置網絡前,需確保Ubuntu節點已安裝Docker(容器運行時)及Kubernetes核心組件(kubelet、kubeadm、kubectl)。
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io
sudo systemctl enable --now docker
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
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # 鎖定版本避免自動升級
僅在Master節點執行以下命令,初始化集群時需指定Pod網絡CIDR(與后續網絡插件網段一致,如10.244.0.0/16
):
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
初始化完成后,配置kubectl
以連接集群:
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跨節點通信,常見插件及安裝流程如下:
Calico基于BGP協議,提供高性能三層網絡及細粒度安全策略,適合中大規模生產環境。
curl -O https://docs.projectcalico.org/v3.26/manifests/calico.yaml
192.168.0.0/16
,需編輯calico.yaml
,搜索CALICO_IPV4POOL_CIDR
修改為集群實際網段(如10.244.0.0/16
);若節點使用雙網卡,添加IP_AUTODETECTION_METHOD
指定主網卡(如interface=eth0
)。kubectl apply -f calico.yaml
kubectl get pods -n calico-system # 所有Pod應為Running狀態
Flannel通過Overlay網絡實現跨節點通信,配置簡單,資源消耗低,適合中小規模集群。
curl -O https://raw.githubusercontent.com/flannel-io/flannel/v0.22.0/Documentation/kube-flannel.yml
net-conf.json
中的Backend.Type
從vxlan
改為host-gw
,提升網絡性能。kubectl apply -f kube-flannel.yml
kubectl get pods -n kube-flannel # 所有Pod應為Running狀態
安裝插件后,通過創建測試Pod驗證網絡是否正常:
kubectl run nginx --image=nginx --port=80
POD_IP=$(kubectl get pod nginx -o jsonpath='{.status.podIP}')
kubectl run test-pod --image=busybox --rm -it -- wget -qO- http://$POD_IP
若能正常訪問Nginx頁面,說明網絡配置成功。若需控制Pod間通信(如限制某命名空間Pod僅能訪問特定服務),可使用Calico的網絡策略功能。以下示例創建一個允許同一命名空間內Pod互相訪問的策略:
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: allow-same-namespace
namespace: default # 應用到default命名空間
spec:
selector: all() # 匹配所有Pod
ingress:
- action: Allow
source: {} # 允許同一命名空間內的所有來源
egress:
- action: Allow
destination: {} # 允許訪問同一命名空間內的所有目標
應用策略:
kubectl apply -f network-policy.yaml
--pod-network-cidr
需與所選網絡插件的網段完全一致(如Calico的CALICO_IPV4POOL_CIDR
),否則會導致網絡不通。kubeadm join
命令加入集群(命令在Master節點初始化時生成),加入后需等待節點狀態變為Ready
。通過以上步驟,即可在Ubuntu上完成Kubernetes網絡配置,實現Pod間的穩定通信。