大规模场景可以通过独占网卡提升 Pod 间网络通信的性能表现,同时也可以为 Pod 网卡绑定独立的安全组,解决 Pod 间网络隔离的场景需求。本文为您介绍如何配置 Pod 独占弹性网卡。
说明
【邀测·申请试用】:该功能目前处于邀测阶段,如需使用,请提交申请。
容器服务支持在创建 VPC-CNI 网络模型的集群时开启 Trunk ENI 模式,开启后可以在 Trunk ENI 节点中为 Pod 提供独占弹性网卡资源,并指定 Pod 的子网和安全组。
大规模场景可以通过独占网卡提升 Pod 间网络通信的性能表现,同时也可以为 Pod 网卡绑定独立的安全组,解决 Pod 间网络隔离的场景需求。Trunk ENI 特性的主要能力如下:
配置 Pod 独占弹性网卡涉及的 CRD 资源对象包括:
说明
本步骤仅介绍了创建集群时 Trunk ENI 特性的关键配置,包括:开启 Trunk ENI 配置、安装 vpc-cni-controlplane 组件。创建集群的其他详细配置,请参见:创建集群。
集群配置步骤的关键配置项如下,其他参数按需配置即可。
配置项 | 说明 |
---|---|
容器网络模型 | 配置集群的容器网络(CNI)方案,本场景必须选择 VPC-CNI。 |
Trunk ENI | 默认关闭。开启后,可基于 Trunk ENI 支持 Pod 独占弹性网卡,提供 Pod 绑定安全组、指定子网调度等高级能力。本场景必须 开启 此配置。 |
apiVersion: network.volcengine.com/v1beta1 kind: VPCENIDefinition metadata: name: vpceni-default # 自定义 VPCENIDefinition 对象名称 namespace: default spec: vpcID: vpc-rr1s2d*** # 必选,集群所属私有网络(VPC)的 ID allocateType: type: Elastic # 必选,IP 分配模式,Elastic 表示弹性分配模式 securityGroupIDs: - sg-rrhowl*** # 必选,Pod 默认安全组 subnetIDs: - subnet-13f64*** # 必选,指定 VPC 中的子网 ID。包括:集群 Pod 子网中的部分或全部子网、集群 Pod 子网中未指定但属于指定 VPC ID 的其他子网 ID - subnet-13fy9***
spec
字段中的详细参数说明如下所示。
参数 | 是否必选 | 说明 | |
---|---|---|---|
vpcID | - | 是 | 集群所属私有网络(VPC)ID。 |
allocateType | type | 是 | IP 分配模式,本例中配置为 Elastic,表示弹性 IP 策略。Pod 删除后,IP 资源会同步释放。 |
securityGroupIDs | - | 是 | 配置安全组 ID。允许配置多个安全组,配置多个安全组时将同时生效。 |
subnetIDs | - | 是 | 配置 VPC 中的子网 ID,允许配置多个子网 ID。包括:集群 Pod 子网中的部分或全部子网、集群 Pod 子网中未指定但属于指定 VPC ID 的其他子网 ID。 |
apiVersion: network.volcengine.com/v1beta1 kind: PodNetworkDefinition metadata: name: vpceni1 # 自定义 PodNetworkDefinition 对象名称 namespace: default # PodNetworkDefinition 对象所在的命名空间 spec: ipResource: name: vpceni-default # 自定义的 VPCENIDefinition 对象名称,与上一步中配置的一致 type: VPCENIDefinition # 必选,指定网络资源类型,固定值 selectors: - podSelector: matchLabels: foo: bar # PodNetworkDefinition 对象中定义的 Pod 标签,用于匹配指定的 Pod,实现 Pod 独占弹性网卡 namespaceSelector: matchLabels: foo: bar # PodNetworkDefinition 对象中定义的 Namespace 标签,用于匹配指定的 Namespace,为 Namespace 中的全部 Pod 提供独占网卡能力
spec
字段中的详细参数说明如下所示。
参数 | 是否必选 | 说明 | |
---|---|---|---|
ipResource | name | 是 | 指定网络资源的名称,需要与 VPCENIDefinition 对象的配置一致。 |
type | 是 | 指定网络资源的类型,固定为VPCENIDefinition 。 | |
selectors | podSelector | 否 | 用于匹配 Pod 的 Labels,匹配的 Pod 在创建时将使用ipResource 指定的网络资源。 |
namespaceSelector | 否 | 用于匹配 Namespace 的 Labels,匹配的 Namespace 中所有 Pod 在创建时都将使用ipResource 指定的网络资源。 |
注意
podSelector
和namespaceSelector
非必选,允许基于期望的匹配方式配置。但至少需要配置 1 个参数,否则功能无法生效。selectors
为 List 结构,支持配置多个命名空间标签和 Pod 标签。每个 Item 支持同时配置命名空间标签和 Pod 标签。系统支持以下方式配置 Pod 独占弹性网卡,包括:
您可以在创建命名空间时,添加 PodNetworkDefinition 对象中定义的标签(例如:foo: bar
),为 Namespace 中的全部 Pod 提供独占网卡能力。示例如下:
apiVersion: v1 kind: Namespace metadata: name: namespace-demo # 命名空间的名称 labels: foo: bar # 添加 PodNetworkDefinition 对象中定义的标签
您可以在创建 Pod 时,添加 PodNetworkDefinition 对象中定义的标签(例如:foo: bar
),为该 Pod 提供独占网卡能力。示例如下:
apiVersion: v1 kind: Pod metadata: name: pod-demo # Pod 名称 namespace: default # Pod 所在命名空间 labels: foo: bar # 添加 PodNetworkDefinition 对象中定义的标签 spec: containers: - name: hello-pod image: nginx:latest ports: - containerPort: 80
您可以在创建工作负载时,添加 PodNetworkDefinition 对象中定义的标签(例如:foo: bar
),为该 Pod 提供独占网卡能力。以无状态负载为例,示例如下:
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-demo # 工作负载的名称 namespace: default # 工作负载所在的命名空间 spec: replicas: 1 selector: matchLabels: foo: bar template: metadata: labels: foo: bar spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80
配置完成后,匹配 PodNetworkDefinition 对象 Label 的 Pod 被系统自动补全 Pod Annotation(包括:ENI request/limit),Pod 将被调度到支持 Trunk 的节点上,并为 Pod 配置独占弹性网卡。
如下图所示,系统自动补全 Annotation k8s.volcengine.com/network-status
,则表示已经为 Pod 配置独占弹性网卡。
在 Pod 详情页面,选择 网卡 页签,可以查看独占网卡的相关信息。