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命令。