- 文档首页
容器服务
弹性容器实例 VCI
用户指南
VCI Agent Sandbox
网络隔离策略
网络隔离策略
本文主要介绍 VCI Agent Sandbox 的网络隔离策略,包括相关机制、使用限制、两种创建方式以及对应场景操作步骤。
网络隔离是 Sandbox 安全模型的核心组成部分,通过网络策略(NetworkPolicy)能力,在 Pod 网络层面控制 Sandbox 实例的入方向(Ingress)和出方向(Egress)流量。该机制确保只有经过授权的组件能够访问 Sandbox,同时限制 Sandbox 的出站访问范围。
- NetworkPolicy 暂不支持在普通节点(ECS 节点)和虚拟节点混部场景中使用,具体表现为:
- 当 NetworkPolicy 中设置了namespaceSelector或podSelector规则白名单时,策略不会作用于 ECS 节点上的 Pod。
- 来自 ECS Pod 的请求,或访问 ECS Pod 的请求,仍会被拦截。如需放行,需通过 ipBlock 方式显式声明 Pod IP。
- 对于需要进行网络隔离的 Pod,除了设置 NetworkPolicy 外,还需要在 Pod Annotation 中添加vci.volcengine.com/network-policy-enabled: "true",表示启用网络隔离能力,否则隔离策略不会生效。
您可以通过 SandboxTemplate Managed 和直接创建 NetworkPolicy 两种方式建立网络隔离策略。两种网络隔离方式的详细介绍如下所示。
SandboxTemplate Managed(推荐)
直接创建 NetworkPolicy
SandboxTemplate(API 版本:extensions.agents.x-k8s.io/v1alpha1)是定义 Sandbox 实例模板的资源。沙箱控制器(Sandbox Controller)根据 SandboxTemplate 批量或动态创建沙箱时,会自动在底层生成对应的原生 Kubernetes NetworkPolicy 资源。
在 SandboxTemplate 中通过networkPolicyManagement字段和networkPolicy字段控制 NetworkPolicy 的管理模式。
两种方式对比如下表所示。
说明
以下操作步骤以通过 SandboxTemplate Managed 方式自定义 NetworkPolicy 为例。
步骤一:(可选)创建以 VCI 方式部署的工作负载
创建用于测试访问连通性的 VCI Pod,若已有相关 VCI Pod,可跳过本步骤。
- 使用 kubectl 连接目标 VCI 业务集群。详情请参见 连接集群。
- 创建工作负载的 YAML 文件。示例文件vci-deployment-demo.yaml代码如下:
- 执行以下命令,获取 Pod IP 和 Pod 名称,以备后续连通测试中使用。
下文提供三个使用 NetworkPolicy 的场景示例,覆盖最常见的入站白名单与出站白名单组合,可按业务需要选用:
- 场景一:按应用标签放行入站访问,适用于已知调用方具备稳定标签的场景。
- 场景二:按来源 IP 放行入站访问,适用于调用方无法通过标签稳定选中、但 IP 可控的场景。
- 场景三:按应用标签或 IP 放行出站访问,适用于需要限制沙箱对外访问范围的场景。
本场景通过入站规则,仅允许特定标签对应的 Pod 访问 Sandbox,其他来源一律拒绝。
- 创建 SandboxTemplate,并在 podTemplate 的 Annotations 中通过vci.volcengine.com/network-policy-enabled开启 NetworkPolicy。示例 SandboxTemplate YAML 文件sandbox-template-demo1.yaml内容如下所示。
- 执行以下命令,创建 SandboxTemplate。
- 创建 SandboxClaim 的 YAML 文件。示例 YAML 文件sandbox-claim-demo1.yaml内容如下所示。
- 执行以下命令,从 SandboxClaim 资源的status.sandbox.podIPs中获取 Sandbox Pod 的 IP。
- 从放行的 Pod 访问 Sandbox Pod,验证连通性。
- 创建未放行的示例 Pod 并对目标 Sandbox 发起入站请求。
当调用方无法通过标签稳定选中但 IP 可控时,可改用ipBlock指定单个 IP 或 CIDR 网段放行入站访问。如需排除子网内个别 IP,可在ipBlock中追加except字段,详细操作,请参见 Kubernetes 官方文档。本场景将步骤一中测试 Pod 的 IP 作为唯一放行源。 - 创建 SandboxTemplate,并在 podTemplate 的 Annotations 中通过vci.volcengine.com/network-policy-enabled开启 NetworkPolicy。示例 SandboxTemplate YAML 文件sandbox-template-demo2.yaml内容如下所示。
- 执行以下命令,创建 SandboxTemplate。
- 创建 SandboxClaim 的 YAML 文件。示例 YAML 文件sandbox-claim-demo2.yaml内容如下所示。
- 执行以下命令,从 SandboxClaim 资源的status.sandbox.podIPs中获取 Pod IP 地址。
- 从放行的 Pod 访问 Sandbox Pod,验证连通性。
- 创建未放行的示例 Pod 并对目标 Sandbox 发起入站请求。
相较前两个场景聚焦入站,本场景聚焦出站方向,下文示例中ingress保持全放通,仅通过egress限制 Sandbox 对外访问范围。
- 创建 SandboxTemplate,并在 podTemplate 的 Annotations 中通过vci.volcengine.com/network-policy-enabled开启 NetworkPolicy。示例 SandboxTemplate YAML 文件sandbox-template-demo3.yaml内容如下所示。
- 执行以下命令,创建 SandboxTemplate。
- 创建 SandboxClaim 的 YAML 文件。示例 YAML 文件sandbox-claim-demo3.yaml内容如下所示。
- 执行以下命令,从 SandboxClaim 资源的status中获取 Sandbox 名称,Pod 默认与 Sandbox 同名。
- 从 Sandbox Pod 访问未放行的 Pod,验证出站拦截。
最近更新时间:2026.10.23 19:26:52