Ubuntu環境下Kubernetes網絡配置指南
在Ubuntu上配置Kubernetes(K8s)網絡需完成基礎環境準備、集群初始化、網絡插件安裝及驗證四大核心步驟,確保Pod、節點及服務間通信正常。
sudo ufw disable # 臨時關閉
# 生產環境建議用iptables/nftables替代,或配置K8s需要的端口規則
sudo swapoff -a # 臨時關閉
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 永久關閉(注釋fstab中的swap行)
編輯/etc/sysctl.d/k8s.conf
,添加以下內容:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
應用配置:
sudo sysctl --system
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker
sudo apt update
# 添加Kubernetes倉庫密鑰
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
# 添加Kubernetes倉庫
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(需與后續網絡插件兼容,如Calico常用192.168.0.0/16
):
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
初始化完成后,記錄輸出的kubeadm join
命令(用于Worker節點加入集群)。
將集群配置復制到當前用戶目錄,便于后續管理:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
K8s要求使用CNI插件實現Pod間虛擬網絡,常見選項如下:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
驗證插件狀態:
kubectl get pods -n calico-system # 應顯示所有Pod為Running狀態
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
kubectl get nodes # 所有節點應顯示為Ready
kubectl run nginx-test --image=nginx --port=80
kubectl get pods -o wide
kubectl exec -it nginx-test -- /bin/sh
ping <另一Pod-IP>
通過網絡策略限制Pod間通信(如僅允許my-app
命名空間的Pod訪問default
命名空間的app=my-app
標簽Pod):
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: restrict-access
namespace: default
spec:
podSelector:
matchLabels:
app: my-app
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: my-app
ports:
- protocol: TCP
port: 80
應用策略:
kubectl apply -f network-policy.yaml
注意事項:
--pod-network-cidr
匹配(如Calico默認支持192.168.0.0/16
,Flannel默認支持10.244.0.0/16
);kubeadm join
命令。