前言
Kubernetes 集群默认所有命名空间、所有 Pod 全网互通,没有任何隔离。生产环境里不同业务、命名空间需要做网络隔离保障安全,NetworkPolicy 就是实现 Pod 级防火墙隔离的核心资源。
本文搭配可直接复现的 bash 实操命令、原理讲解与面试考点,全面掌握网络策略与跨命名空间访问管控。
一、NetworkPolicy 核心概念
1. 定义
NetworkPolicy 是 K8s 的 Pod 层级网络防火墙,管控 Pod 之间、Pod 与外网的入站、出站流量,可依据 Pod 标签、命名空间标签、外网 IP 划定访问权限,实现网络隔离与访问管控。
2. 核心特性
- 默认全放行:未配置策略时,集群所有 Pod 自由互通
- 白名单生效:配置规则后,仅放行指定流量,其余全部拒绝(可降低管理成本)
- 作用粒度:针对 Pod 做精细化访问限制
- 双向管控:支持入站 Ingress、出站 Egress 流量控制
3. 主要用途
隔离不同业务命名空间,阻拦未授权跨命名空间访问,提升集群网络安全性。
二、实验规划
- memdb 命名空间:部署受保护业务 Pod
- mobapp 命名空间:授权可访问的客户端 Pod
- default 命名空间:未授权测试客户端
- 实验目标:仅允许 mobapp 命名空间访问 memdb 服务,其余命名空间一律禁止访问
三、完整实操命令
1. 创建业务命名空间
kubectl create namespace memdb
kubectl create namespace mobapp
2. 给授权命名空间打标签(策略匹配必备)
kubectl label namespace mobapp name=mobapp
kubectl get namespace –show-labels
3. memdb 命名空间创建被访问 Pod
cat > nppod.yml <<EOF
apiVersion: v1
kind: Pod
metadata:
name: pod
namespace: memdb
labels:
app: httpd
spec:
containers:
– name: httpd
image: httpd
ports:
– name: web
containerPort: 80
restartPolicy: OnFailure
EOF
kubectl create -f nppod.yml
kubectl get pod -n memdb -o wide
4. mobapp 命名空间创建客户端 Pod
cat > nppod1.yml <<EOF
apiVersion: v1
kind: Pod
metadata:
name: pod1
namespace: mobapp
labels:
app: nginx
spec:
containers:
– name: httpd
image: httpd
ports:
– name: web
containerPort: 80
restartPolicy: OnFailure
EOF
kubectl create -f nppod1.yml
kubectl get pod -n mobapp -o wide
5. 配置 NetworkPolicy 访问策略
cat > np.yml <<EOF
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-from-namespace-mobapp
namespace: memdb
spec:
podSelector: {}
policyTypes:
– Ingress
ingress:
– from:
– namespaceSelector:
matchLabels:
name: mobapp
ports:
– protocol: TCP
port: 80
EOF
kubectl create -f np.yml
策略说明:作用于 memdb 下全部 Pod,仅放行 mobapp 命名空间对 80 端口的入站访问,其他所有命名空间均不可访问。
一旦设置策略,未被允许的命名空间一律无法访问(白名单机制)
6. default 命名空间创建测试 Pod
cat > nptest.yml <<EOF
apiVersion: v1
kind: Pod
metadata:
name: pod-default
spec:
containers:
– name: busybox
image: busybox
command:
– /bin/sh
– -c
– "sleep 10m"
restartPolicy: OnFailure
EOF
kubectl create -f nptest.yml
四、访问测试与结果分析
1. 未授权 default 命名空间访问
kubectl exec -it pod-default — wget 172.16.93.228
结果:连接超时访问失败,流量被网络策略拦截
2. 授权 mobapp 命名空间访问
kubectl exec -it pod1 -n mobapp — wget 172.16.93.228
结果:请求正常响应,成功访问目标服务
3. 未被配置 NetworkPolicy 访问策略的 mobapp 默认可以被任何命名空间内 Pod 访问
kubectl exec -it pod-default — wget 172.16.245.2
结果:请求正常响应,成功访问目标服务
五、面试简答题标准答案
什么是 NetworkPolicyNetworkPolicy 是 Pod 层级的网络防火墙,控制 Pod 之间、Pod 和外网的入站出站流量,可限定指定 Pod、命名空间、外网地址的访问权限,实现网络隔离管控。
如何控制跨命名空间 Pod 访问集群默认命名空间间互通,借助 NetworkPolicy,在目标命名空间配置策略,通过 namespaceSelector 匹配允许访问的命名空间,设置流量白名单,阻断未授权跨命名空间访问。
六、核心总结
七、实验资源清理命令
# 删除实验Pod
kubectl delete -f nppod.yml
kubectl delete -f nppod1.yml
kubectl delete -f nptest.yml
# 删除网络策略
kubectl delete -f np.yml
# 删除自定义命名空间
kubectl delete namespace memdb mobapp
# 校验清理状态
kubectl get pod -n memdb
kubectl get pod -n mobapp





