阅读量:2
CentOS上Kubernetes网络策略配置指南
1. 前置准备
在配置网络策略前,需完成以下基础步骤:
- 安装Kubernetes集群:使用
kubeadm快速搭建集群,确保kubelet、kubectl已安装并启动。sudo yum install -y kubeadm kubelet kubectl --disable-gpg-check sudo systemctl enable --now kubelet sudo kubeadm init --pod-network-cidr=10.244.0.0/16 # 指定Pod网络CIDR(与网络插件要求一致) mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config - 部署网络插件:Kubernetes网络策略需通过网络插件实现(如Calico、Flannel),其中Calico是常用支持网络策略的插件。
部署后需验证插件状态:kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yamlkubectl get pods -n calico-system # 所有Pod应为Running状态
2. 网络策略核心概念
- podSelector:通过标签选择目标Pod(如
app: frontend),空选择器{}表示当前命名空间内所有Pod。 - policyTypes:定义策略类型,分为:
Ingress:控制进入Pod的流量;Egress:控制Pod发出的流量;
若同时指定两者,则同时控制双向流量。
- 流量规则:
ingress.from:定义入站流量来源(如Pod标签、命名空间标签、IP块);ingress.ports:定义允许的入站端口及协议(如TCP 80);egress.to/egress.ports:对应出站流量的目标及端口。
3. 常见网络策略示例
示例1:默认拒绝所有入站流量(最小权限起点)
若需强制所有Pod默认拒绝入站流量,可创建以下策略(作用于当前命名空间内所有Pod):
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: default # 替换为目标命名空间
spec:
podSelector: {} # 匹配所有Pod
policyTypes:
- Ingress # 仅控制入站流量
应用后,仅显式允许的流量可通过。
示例2:允许同一命名空间内特定Pod通信
若需允许带有app: frontend标签的Pod访问带有app: backend标签的Pod的8080端口(TCP),可创建以下策略:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
namespace: default
spec:
podSelector:
matchLabels:
app: backend # 作用于带有app: backend标签的Pod
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend # 来自带有app: frontend标签的Pod
ports:
- protocol: TCP
port: 8080
应用命令:kubectl apply -f allow-frontend-to-backend.yaml。
示例3:允许Pod访问外部IP块
若需允许带有app: db标签的Pod访问外部10.0.0.0/24网段的3306端口(TCP),可创建以下策略:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-db-to-external
namespace: default
spec:
podSelector:
matchLabels:
app: db
policyTypes:
- Egress # 仅控制出站流量
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24 # 允许的外部IP段
ports:
- protocol: TCP
port: 3306
此策略允许db Pod访问外部数据库服务。
示例4:组合策略(入站+出站)
若需允许app: user-service的Pod:
- 接收来自
app: frontend的Pod的80端口(TCP)流量; - 访问外部
192.168.1.0/24网段的443端口(TCP)。
可创建以下策略:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: combined-policy
namespace: default
spec:
podSelector:
matchLabels:
app: user-service
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
ports:
- protocol: TCP
port: 80
egress:
- to:
- ipBlock:
cidr: 192.168.1.0/24
ports:
- protocol: TCP
port: 443
4. 应用与验证网络策略
- 应用策略:将策略保存为YAML文件(如
policy.yaml),使用kubectl apply命令部署。kubectl apply -f policy.yaml - 查看策略:列出当前命名空间的网络策略,确认是否部署成功。
kubectl get networkpolicies -n - 验证策略:
- 创建临时测试Pod(如BusyBox):
kubectl run test-pod --image=busybox -it --rm --restart=Never -- sh - 在测试Pod中尝试访问目标Pod(如
app: backend的8080端口):wget -qO- http://:8080 - 根据策略预期,验证是否允许或拒绝访问(如
default-deny-ingress策略下,未显式允许的流量将被拒绝)。
- 创建临时测试Pod(如BusyBox):
注意事项
- 默认拒绝原则:Kubernetes网络策略默认允许所有流量,需通过
default-deny-ingress等策略明确拒绝未授权流量,确保最小权限。 - 标签规范化:为Pod添加清晰的标签(如
app: frontend、env: production),便于策略的精准匹配。 - 插件兼容性:确保网络插件(如Calico)版本与Kubernetes集群版本兼容,避免策略失效。
- 渐进式部署:先在小范围测试策略(如
test命名空间),确认无误后再推广至生产环境。
以上就是关于“centos k8s部署怎样进行网络策略配置”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm