You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
容器网络
使用 NetworkPolicy 实现网络访问控制
复制全文
下载 pdf
使用 NetworkPolicy 实现网络访问控制
Kubernetes 网络策略(NetworkPolicy)提供基于策略的网络控制。您可以通过 NetworkPolicy 从 IP 地址或网络端口层面控制 Pod 级别的网络流量。本文介绍 NetworkPolicy 的配置方法和使用场景。
说明
  • 邀测·申请试用:该功能目前处于邀测阶段,如需使用,请提交申请。
使用限制
  • VKE NetworkPolicy 能力仅支持在 VPC-CNI 网络模型的集群中使用。
  • vpc-cni 组件需升级至 v1.6.4 及以上版本。
  • 使用 NetworkPolicy 控制网络流量时,请注意对集群规模的限制。详情请参见 使用限制
  • 使用 NetworkPolicy 控制网络流量时,暂不支持以下场景
  • should allow egress access to server in CIDR block
  • should deny ingress access to updated pod
  • should allow ingress access from updated pod
  • should enforce except clause while egress access to server in CIDR block
  • should enforce ingress policy allowing any port traffic to a server on a specific protocol [Feature:UDP]
  • should ensure an IP overlapping both IPBlock.CIDR and IPBlock.Except is allowed
  • should properly isolate pods that are selected by a policy allowing SCTP, even if the plugin doesn't support SCTP
操作步骤
步骤一:开启 NetworkPolicy
  1. 在左侧导航栏中选择 集群,单击目标集群名称,进入集群管理页面。
  1. 在左侧导航栏中,选择 组件管理
  1. 网络 页签找到 vpc-cni 组件,将鼠标移动到组件卡片上,单击 配置,开启 NetworkPolicy 功能。
注意
  • 开启(或关闭)NetworkPolicy 功能后,需要近 1 分钟时间生效。
  • 修改此配置将导致组件重启,请在业务低峰期进行操作。
  1. 单击 确定,完成配置。
步骤二:配置 NetworkPolicy
开启 NetworkPolicy 功能后,您可以通过配置 NetworkPolicy 资源,指定具体 Pod 的网络策略。网络策略中基于ingressegress定义了流量方向,并基于ipBlocknamespaceSelectorpodSelector进行入站/出站目标(命名空间、Pod)筛选。
配置示例和重点参数说明,如下所示:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: network-policy-demo # NetworkPolicy 名称
namespace: default # NetworkPolicy 所属命名空间
spec:
podSelector: # Pod 选择器,使用标签选择需要进行网络管控的 Pod。未指定具体 Label 时,表示集群中的所有 Pod
matchLabels:
app: nginx
policyTypes: # 网络策略的生效方向,取值:Ingress(入站策略)、Egress(出站策略)
- Ingress
- Egress
ingress: # 入站策略配置详情
- from: # 入站策略中的流量源,仅有指定的源对象能够访问指定 Pod
- ipBlock: # 入站流量的源 CIDR,只支持配置为集群外部的 IP 地址,不支持匹配集群内地址(例如 Node IP 地址)
cidr: 192.168.1.0/24
except: # 入站流量源 CIDR 中的排除 IP 或子 CIDR,在 CIDR 中允许排除某些 IP 地址,不允许其进行访问 Pod
- 192.168.1.100/32
- namespaceSelector: # 命名空间选择器,允许包含指定标签命名空间中的 Pod 访问指定 Pod
matchLabels:
namespace: doc-demo
- podSelector: # Pod 选择器,允许包含指定标签的 Pod 访问指定 Pod
matchLabels:
app: nginx
ports: # 允许访问的端口
- protocol: TCP # 允许访问的端口协议
port: 6379 # 允许访问的端口号
egress: # 出站策略配置详情
- to: # 出站策略中的流量目的,Pod 只能访问指定的目的对象
- ipBlock: # 出站流量的目标 CIDR,只支持配置为集群外部的 IP 地址,不支持匹配集群内地址(例如 Node IP 地址)
cidr: 10.0.0.0/24
except: # 出站流量目的 CIDR 中的排除 IP 或子 CIDR,在 CIDR 中允许排除某些 IP 地址,不允许 Pod 访问
- 10.0.1.100/32
- namespaceSelector: # 命名空间选择器,仅允许指定 Pod 访问包含指定标签命名空间中的其他 Pod
matchLabels:
namespace: doc-demo
- podSelector: # Pod 选择器,仅允许指定 Pod 访问包含标签的其他 Pod
matchLabels:
app: nginx
ports: # 允许访问的端口
- protocol: TCP # 允许访问的端口协议
port: 5978 # 允许访问的端口号
重点字段说明,如下表所示:
字段
说明
policyTypes
配置 NetworkPolicy 策略中的流量管控方向,取值:
  • Ingress:入站流量策略,即外部流量进入指定的 Pod。
  • Egress:出站流量策略,即指定的 Pod 访问外部。
ipBlock
静态 CIDR 网段,用于指定集群外部的 IP 地址。Pod 与指定外部 IP 地址之间的流量,将受到 NetworkPolicy 策略的管控。
说明
该字段只支持配置为集群外部的 IP 地址,不支持匹配集群内地址,例如 Node IP 地址。
namespaceSelector
命名空间选择器,通过标签选择需要进行网络流量管控的命名空间。该命名空间下的所有 Pod 均会受到 NetworkPolicy 策略的管控。
podSelector
Pod 选择器,通过标签选择需要进行网络流量管控的 Pod。符合筛选条件的 Pod 会受到 NetworkPolicy 策略的管控。
结果验证
配置确认
  1. 在左侧导航栏中,单击 工作负载 > 对象浏览器。
  1. 分类 下拉菜单中选择 API Group,使用名称networking.k8s.io检索资源对象。
  1. 单击资源名称,进入资源详情页面,可以看到 NetworkPolicy 资源分类。
  1. 单击 NetworkPolicy 资源名称,进入资源详情,即可查看、修改或删除 NetworkPolicy 配置。
流量验证
配置完成后,您可以在集群中创建多个工作负载,并基于已配置的 NetworkPolicy 流量规则,验证不同 Pod 之间的流量规则是否生效。例如:当配置了仅允许相同命名空间内互访的规则时,分别在不同命名空间内部署多个 Pod。登录 Pod 并使用 Ping 命令,即可验证其仅能访问相同命名空间的其他 Pod,而不能跨命名空间访问。示例如下:
root@deployment-demo-a-7796***:/# ping 192.168.2.159
PING 192.168.2.159 (192.168.2.159) 56(84) bytes of data.
64 bytes from 192.168.2.159: icmp_seq=1 ttl=64 time=0.021 ms
64 bytes from 192.168.2.159: icmp_seq=2 ttl=64 time=0.030 ms
64 bytes from 192.168.2.159: icmp_seq=3 ttl=64 time=0.027 ms
64 bytes from 192.168.2.159: icmp_seq=4 ttl=64 time=0.021 ms
--- 192.168.2.159 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3057ms
rtt min/avg/max/mdev = 0.021/0.024/0.030/0.004 ms
root@deployment-demo-a-7796***:/# ping 192.168.2.157
PING 192.168.2.157 (192.168.2.157) 56(84) bytes of data.
配置示例
相同命名空间内互访
以下 YAML 配置示例定义了一个 NetworkPolicy 策略,仅允许相同命名空间下的 Pod 互相访问,但不能被其他命名空间的 Pod 访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: demo-1 # NetworkPolicy 资源名称
namespace: default # NetworkPolicy 网络策略所属命名空间
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- podSelector: {}
拒绝所有入站流量
以下 YAML 配置示例定义了一个 NetworkPolicy 策略,允许 Pod 拒绝任何入站流量,即 Pod 不能被任何对象访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: demo-2 # NetworkPolicy 资源名称
namespace: default # NetworkPolicy 网络策略所属命名空间
spec:
podSelector: {}
policyTypes:
- Ingress
ingress: []
仅允许指定命名空间访问
以下 YAML 配置示例定义了一个 NetworkPolicy 策略,仅允许标签为name: demo-workspace命名空间下的 Pod 访问集群中的其他 Pod。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: demo-3 # NetworkPolicy 资源名称
namespace: default # NetworkPolicy 网络策略所属命名空间
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector: # 命名空间选择器
matchLabels: # 命名空间标签匹配
name: demo-workspace
仅允许访问指定命名空间
以下 YAML 配置示例定义了一个 NetworkPolicy 策略,仅允许集群中的 Pod 访问标签为name: demo-workspace命名空间下的 Pod。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: demo-4 # NetworkPolicy 资源名称
namespace: default # Pod 所属命名空间
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- namespaceSelector: # 命名空间标签匹配
matchLabels:
name: demo-workspace
仅允许访问指定 CIDR
以下 YAML 配置示例定义了一个 NetworkPolicy 策略,仅允许集群中的 Pod 访问集群外部 CIDR 为172.16.0.0/16、协议为TCP、端口号为8080的对象,不能访问其他网络对象或端口。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: demo-5 # NetworkPolicy 资源名称
namespace: default # Pod 所属命名空间
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 172.16.0.0/16 # Pod CIDR
ports: # 指定端口
- protocol: TCP # 端口协议
port: 8080 # 端口号
仅允许指定 CIDR 访问
以下 YAML 配置示例定义了一个 NetworkPolicy 策略,仅允许集群中的 Pod 被集群外部 CIDR 为172.16.0.0/16的对象,通过TCP协议、80端口进行访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: demo-6 # NetworkPolicy 资源名称
namespace: default # Pod 所属命名空间
spec:
podSelector: {}
policyTypes:
- Ingress
ingress:
- from:
- ipBlock:
cidr: 172.16.0.0/16 # Pod CIDR
ports: # 指定端口
- protocol: TCP # 端口协议
port: 80 # 端口号
最近更新时间:2026.08.19 14:51:58
这个页面对您有帮助吗?
有用
有用
无用
无用