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 的网络策略。网络策略中基于ingress和egress定义了流量方向,并基于ipBlock、namespaceSelector和podSelector进行入站/出站目标(命名空间、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
这个页面对您有帮助吗?
有用
有用
无用
无用