以下是Ubuntu上配置Kubernetes网络的关键技巧:
系统参数优化
修改/etc/sysctl.d/kubernetes.conf
,启用网桥转发并关闭IPv6:
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
net.ipv6.conf.all.disable_ipv6=1
执行sysctl -p
使配置生效。
静态IP配置
通过/etc/netplan/
配置网卡静态IP,确保节点间网络可达,例如:
network:
version: 2
ethernets:
ens33:
addresses: [192.168.1.100/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8]
执行netplan apply
生效。
推荐插件
安装插件
以Calico为例:
kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
Flannel则使用:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
防火墙规则
使用UFW限制仅开放必要端口(如API Server的6443、节点间通信的10250等),关闭默认的NodePort端口范围(30000-32767)或限制访问来源。
示例:
sudo ufw allow from 10.0.0.0/24 to any port 6443 proto tcp # 仅允许集群内访问API Server
sudo ufw deny in on ens33 from any to any port 30000:32767 # 禁止外部访问NodePort
网络策略(NetworkPolicy)
通过YAML定义Pod间通信规则,例如限制特定命名空间的Pod只能访问数据库服务:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-access
spec:
podSelector:
matchLabels:
app: database
ingress:
- from:
- namespaceSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 3306
应用策略:kubectl apply -f network-policy.yaml
。
调整MTU
根据网络环境设置Pod的MTU(如1500或9000),避免分片。在Calico中可通过注解配置:
metadata:
annotations:
cni.projectcalico.org/mtu: "1500"
启用IPVS负载均衡
在Kubernetes中配置IPVS模式提升Service转发效率,编辑/etc/kubernetes/manifests/kube-proxy.yaml
,设置mode: ipvs
。
网络连通性测试
kubectl exec
进入Pod,通过ping
或curl
测试Pod间通信。kubectl get pods -n kube-system
。监控工具集成
部署Prometheus+Grafana监控网络流量、延迟等指标,重点关注Pod间通信延迟和丢包率。