欢迎光临
我们一直在努力

K8s网络隔离实战|NetworkPolicy 详解(跨命名空间访问控制+完整实验)

前言

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 匹配允许访问的命名空间,设置流量白名单,阻断未授权跨命名空间访问。

  • 六、核心总结

  • NetworkPolicy 实现 Pod 级精细化网络隔离,采用白名单管控逻辑
  • 跨命名空间访问依靠命名空间标签匹配授权,提前打标签策略才可生效
  • 白名单模式边界清晰,便于故障排查,长期降低网络运维管理成本
  • 生产环境可划分业务、数据库、测试网段,通过策略严格隔离防护
  • 七、实验资源清理命令

    # 删除实验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

    赞(0)
    未经允许不得转载:171主机测评 » K8s网络隔离实战|NetworkPolicy 详解(跨命名空间访问控制+完整实验)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址