云服务器K8S集群网络策略配置实践
文章分类:售后支持 /
创建时间:2026-01-09
用云服务器搭建K8S(Kubernetes)集群时,网络策略配置是关键的安全防线——它能精准控制集群内组件间的通信,避免无关流量干扰,让应用运行更可控。下面从概念到实战,带你掌握这一核心技能。
理解K8S网络策略:给Pod装"智能门禁"
K8S网络策略就像小区的智能门禁系统。小区里有不同楼栋(Pod)和住户(服务),门禁能规定外卖员(外部流量)只能进1栋、快递员(内部流量)可进2栋。在K8S集群中,网络策略通过标签选择器定义规则,决定哪些Pod能互相访问、允许的端口和协议,相当于给每个Pod装了"智能门禁"。
实践前的环境准备
首先要在云服务器上搭好K8S集群,这是基础。需确认两点:一是集群状态正常(用`kubectl get nodes`检查节点),二是网络插件已正确安装(如Calico、Flannel)。不同网络插件对策略的支持略有差异,Calico对复杂策略的兼容性更优,新手可选Flannel快速上手。
创建测试用Pod与服务
为演示策略效果,我们创建两组测试资源:Web应用Pod(模拟前端)和数据库Pod(模拟后端)。以下是具体YAML配置:
Web应用Pod及服务:
apiVersion: v1
kind: Pod
metadata:
name: web-app
labels:
app: web
spec:
containers:
- name: web-container
image: nginx
---
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 80
数据库Pod及服务:
apiVersion: v1
kind: Pod
metadata:
name: db-app
labels:
app: db
spec:
containers:
- name: db-container
image: mysql
---
apiVersion: v1
kind: Service
metadata:
name: db-service
spec:
selector:
app: db
ports:
- protocol: TCP
port: 3306
targetPort: 3306
用`kubectl apply -f 文件名.yaml`命令完成资源创建,确保`kubectl get pods`能看到两个Pod处于Running状态。
配置核心网络策略:限定Web访问数据库端口
现在要实现"仅允许Web应用访问数据库3306端口"的策略。编写以下YAML:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: web-to-db-policy
spec:
podSelector:
matchLabels:
app: db # 策略作用于标签为app:db的Pod(即数据库Pod)
policyTypes:
- Ingress # 控制入站流量
ingress:
- from:
- podSelector:
matchLabels:
app: web # 允许来源:标签为app:web的Pod(即Web应用Pod)
ports:
- protocol: TCP
port: 3306 # 仅允许访问3306端口
执行`kubectl apply -f 策略文件名.yaml`后,策略生效。此时数据库Pod的入站流量被严格限制:只有Web应用Pod能通过3306端口连接,其他Pod或端口请求会被自动阻断。
验证策略效果:实测流量是否受控
通过两步验证策略是否生效:
1. 测试非3306端口访问:在Web应用Pod中执行`kubectl exec -it web-app -- telnet db-service 8080`(假设8080是未开放端口),应提示连接失败。
2. 测试3306端口访问:执行`kubectl exec -it web-app -- telnet db-service 3306`,若看到MySQL欢迎信息则说明连接成功。
若第一步失败、第二步成功,说明网络策略配置正确。
通过这套实践流程,你能快速掌握云服务器K8S集群的网络策略配置。实际业务中,可根据需求扩展策略——比如限制外部IP访问、设置出口流量白名单等,让集群网络既灵活又安全。
工信部备案:粤ICP备18132883号-2