文档中心>容器服务>实践教程>网络>在 TKE 上使用 Pod 独立安全组

在 TKE 上使用 Pod 独立安全组

最近更新时间:2025-11-12 17:18:42

我的收藏

介绍

本文主要描述用户如何在 TKE 的普通节点和原生节点上,使用 Pod 独立安全组能力(SecurityGroupPolicy,简称 SGP)。
在 TKE Serverless 集群中,已经提供了 SGP 支持,详情请参见 容器服务 Pod 安全组。但是 TKE 普通节点和原生节点因网络能力限制(Pod 使用 ENI 弹性网卡共享 IP)此前未实现该功能。本次 TKE 网络组件全面升级,利用 VPC 侧提供的中继网卡(Trunking ENI)能力,通过给 Pod 单独分配中继出来的子网卡,子网卡单独绑定安全组,从而实现 Pod 绑定独立安全组 SGP 能力。

方案优势

支持 Pod 级别绑定独立安全组。
Pod 单独占用 IP,调度灵活性进一步增强,固定 IP 可在同可用区节点上任意调度。
基于中继网卡实现,单独占用配额,不占用原有的弹性网卡辅助 IP 资源以及独立网卡资源。

使用场景

减少暴露面,从而减少受到网络攻击的可能性。
通过安全组,可以让 Pod 配置其最小的暴露面,从而减少可能的攻击面,增强安全性。
最小粒度的网络安全策略控制。
Pod 绑定独立安全组实现了最小粒度的网络安全策略控制,更精准的控制每个应用的网络安全策略,从而增强集群整体安全性。
从虚拟机架构迁移到容器架构,复用应用已有的安全组。
传统虚机架构中,应用部署在虚机上,而安全组是绑定到虚拟机。从虚拟机架构迁移到容器架构后,使用 SGP 特性,这些安全组可以直接复用,从而保持原有的网络安全策略能力。

功能特性

支持与共享网卡方案共存,实现 Pod 粒度的方案设置和共存。
eniipamd 组件启用安全组功能时,Pod 设置安全组的优先级更高,其次按照 eniipamd 的安全组逻辑,继承节点的安全组设置(使用主网卡或者依照节点设置)。
同节点的 Pod 互访默认不经过安全组。

方案限制

节点上使用中继网卡的 Pod 数量受限于节点可绑定的中继网卡配额,目前默认为100,最大64C机型支持256。
目前仅支持 VPC-CNI 共享网卡 + 固定 IP 模式集群开启。
目前默认仅支持机型:“ITA5”、“M8”、“MA4”、“MA5”、“S8”、“S9”、“SA4”、“SA5”。其他机型添加到集群后,中继网卡配额会被赋值为0,禁止使用中继网卡独立安全组的 Pod 调度。如需使用其他机型,请 提交工单 申请网络侧支持。

使用方法

中继网卡相关接口授权

1. 访问管理控制台 > 策略 中,单击新建自定义策略
2. 选择按策略语法创建策略方式:
2.1 选择空白模板,单击下一步
2.2 策略名称可命名为 “SubENIForIPAMD”。复制并创建以下策略:
{
"statement": [
{
"action": [
"vpc:CreateSubNetworkInterface",
"vpc:DeleteSubNetworkInterface",
"cvm:CheckNetworkInterfaceSecurityGroupReady"
],
"effect": "allow",
"resource": [
"*"
]
}
],
"version": "2.0"
}
3. 单击完成
4. 创建完成后,在 访问管理控制台 > 角色 中,搜索 “IPAMDofTKE_QCSRole”。单击角色名称,在角色信息-权限中选择关联策略,勾选已创建完成的策略 “SubENIForIPAMD”,单击确定
5. 访问管理控制台 > 角色 中,搜索 “TKE_QCSRole”。单击角色名称,在角色信息-权限中选择关联策略,勾选已创建完成的策略 “SubENIForIPAMD”,单击确定
通过以上授权,赋予 TKE 及相关 tke-eni-ipamd 组件创建中继网卡和删除中继网卡接口的权限。

增量集群默认开启中继网卡功能

1. 增量集群默认开启该能力需添加白名单,请 提交工单 向容器服务申请权限。
2. 添加白名单后,创建集群时选择 vpc-cni 共享网卡多 IP 模式,并开启固定 Pod IP,则会自动开启中继网卡模式。

存量集群开启中继网卡功能

开启条件如下:
集群限制:VPC-CNI 网络模式,共享网卡,并开启固定 Pod IP。
版本限制:3.5.6 及以上版本。
操作步骤如下:
1. 登录 容器服务控制台,选择左侧导航中的集群
2. 集群页面,选择目标集群名称,进入集群详情页。
3. 选择左侧导航栏中的组件管理,在组件页面选择 eniipamd组件 右侧的修改全局配置,将 “vpc-cni.trunking-eni.enable-sub-eni” 配置项改为 true,修改后保存并退出。


集群开启 SGP 能力

集群开启 Trunking ENI 能力后,即可在普通节点和原生节点上使用 SGP。操作步骤如下:
1. 登录 容器服务控制台,选择左侧导航中的集群
2. 集群页面,选择目标集群名称,进入集群详情页。
3. 选择左侧导航栏中的组件管理,在组件页面单击新建
4. 新建组件管理页面,勾选 SecurityGroupPolicy。如下图所示:

5. 单击完成
6. 请在 安全组页面 创建 Pod 需要的安全组,例如 sg-xxxxyyyy。
7. 部署 SecurityGroupPolicy 的 CR,如下 yaml 文件。如果您更愿意根据服务账户标签选择 Pod,则可以替换 podSelector 为 serviceAccountSelector,必须指定其中一种类型的选择器。如果指定多个安全组,则所有安全组中的所有规则都会对选定的 Pod 有效,例如 yaml 文件中的 sg-xxxxyyyy。
apiVersion: vpcresources.tke.cloud.tencent.com/v1beta1
kind: SecurityGroupPolicy
metadata:
name: my-security-group-policy
namespace: my-namespace
spec:
podSelector:
matchLabels:
app: my-app
securityGroups:
groupIds:
- sg-xxxxyyyy
此后所有创建的 Pod,label 包含 app: my-app,都会使用 Trunking ENI 网络能力,并绑定 sg-xxxxyyyy 的安全组。
8. 进入 容器服务控制台,在集群的工作负载中,部署需要绑定安全组的应用,可参考如下 yaml 部署 nginx 的 deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
annotations:
labels:
app: my-app
spec:
terminationGracePeriodSeconds: 0
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
部署成功后,可以通过 kubectl get pod -oyaml,检查 Pod 相关信息,确认已经使用 Trunking ENI 能力,并绑定对应的安全组:

红框中关键信息说明如下:
# tke-sub-eni 表示 pod 已经使用了中继网卡
tke.cloud.tencent.com/networks: "tke-sub-eni"

# 表示该 pod 已经绑定了 pod 级别的安全组
tke.cloud.tencent.com/security-group-id: "sg-xx1,sg-xx2"

# 扩展资源,表示当前 pod 使用的 Trunking 网卡资源
tke.cloud.tencent.com/sub-eni: "1"
同时检查 Pod 使用的弹性网卡所关联的安全组是否符合预期,首先通过以下的命令获取 Pod 当前使用的中继网卡 ID:
kubectl -n <Pod 所在命名空间> get vipc <Pod 名称> -ojsonpath='{.metadata.labels.tke\\.cloud\\.tencent\\.com/eni-id}'
进入弹性网卡控制台,检索对应的中继网卡并进入其详情页并查看其关联的安全组: