网络配置(NetworkAttachmentDefinition)
操作场景
- 容器绑定子网:Pod IP会被约束在特定的网段中,不同命名空间之间可实现网络隔离。
- 容器绑定安全组:支持为同一命名空间的Pod设置安全组规则,实现自定义访问策略。
约束与限制
- 网络配置(NetworkAttachmentDefinition)仅在CCE Turbo集群中可用,且集群为1.23.8-r0、1.25.3-r0及以上版本。
- 仅默认配置 default-network 支持开启网卡预热,用户自定义配置中的容器子网不支持网卡预热。未开启网卡预热时,工作负载实例的创建速度会减慢,因此不适用于高性能Pod创建场景。
- 如需删除NetworkAttachmentDefinition,请先删除对应的命名空间下使用该配置创建的Pod(带有名为“cni.yangtse.io/network-status”的annotation),详情请参见删除网络配置。
通过控制台配置
- 登录CCE控制台。
- 单击集群名称进入集群,在左侧选择“系统配置”,选择“网络配置”页签。
集群中存在默认配置default-network,对所有未配置容器子网的命名空间生效,“集群信息”页面的网络信息中的“默认容器子网”即为default-network中的容器子网。该配置不可删除。
- 单击右上角“创建网络配置”,在弹窗中配置子网和命名空间等信息。
- 名称:自定义名称,最长支持253个字符。default-network、default、mgnt0、mgnt1四个名称为系统预留,请勿使用。
- 命名空间:请选择命名空间。不同配置之间的命名空间不可重复。若无命名空间可选请单击后方的“创建命名空间”进行创建。
- 容器子网:请选择子网。若无子网可选请单击后方的“创建子网”进行创建,创建完成后单击刷新按钮。最多可选择 20 个子网。
- 关联安全组:默认为容器ENI安全组,您也可以选择单击后方的“创建安全组”进行创建,创建完成后单击刷新按钮。最多可选择5个安全组。
- 完成基本配置后单击“创建”,创建完成后页面自动返回到网络配置列表,可以看到新添加的容器子网配置已在列表中。
通过kubectl命令行配置
本节说明通过kubectl命令创建NetworkAttachmentDefinition的方法。
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 修改networkattachment-test.yaml。
vi networkattachment-test.yaml
apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: annotations: yangtse.io/project-id: 05e38** name: example namespace: kube-system spec: config: '{ "type":"eni-neutron", "args":{ "securityGroups":"41891**", "subnets":[ { "subnetID":"27d95**" } ] }, "selector":{ "namespaceSelector":{ "matchLabels":{ "kubernetes.io/metadata.name":"default" } } } }'
表1 关键参数说明 参数
是否必填
参数类型
描述
apiVersion
是
String
表示API的版本号。固定为 k8s.cni.cncf.io/v1。
kind
是
String
创建的对象类别。固定为 NetworkAttachmentDefinition。
yangtse.io/project-id
是
String
项目ID。
name
是
String
配置名称。
namespace
是
String
配置资源所在命名空间,固定为 kube-system。
config
是
表2 config字段数据结构说明Object
配置内容,为json格式的字符串。
表2 config字段数据结构说明 参数
是否必填
参数类型
描述
type
是
String
固定为eni-neutron。
args
否
Object
配置参数。
selector
否
表4Object
选择该配置所作用的命名空间。
表3 args字段数据结构说明 参数
是否必填
参数类型
描述
securityGroups
否
String
安全组ID。若未对安全组存在规划,请选择和default-network中的安全组一致。
获取方式:
登录虚拟私有云控制台,在左侧导航栏选择“访问控制 > 安全组”,单击安全组名称,在“基本信息”页签下找到“ID”字段复制即可。
subnets
是
Array of subnetID Objects
容器子网ID列表,至少需填写一个,不可以为空,格式如下:
[{"subnetID":"27d95**"},{"subnetID":"827bb**"},{"subnetID":"bdd6b**"}]
同一VPC下非集群的子网ID。
获取方式:
登录虚拟私有云控制台,在左侧导航栏选择“虚拟私有云 > 子网”,单击子网名称,在“基本信息”页签下找到“子网ID”字段复制即可。
- 创建NetworkAttachmentDefinition。
kubectl create -f networkattachment-test.yaml
回显如下,表示NetworkAttachmentDefinition已创建。
networkattachmentdefinition.k8s.cni.cncf.io/example created
删除网络配置
您可以查看新添加网络配置的YAML,也可以对新添加的配置进行“删除”操作。
在删除网络配置时,需先删除该配置所对应的容器,否则将删除失败。
- 执行以下命令筛选集群中使用该配置的Pod(其中example为示例配置名称,请自行替换):
kubectl get po -A -o=jsonpath="{.items[?(@.metadata.annotations.cni\.yangtse\.io/network-status=='[{\"name\":\"example\"}]')]['metadata.namespace', 'metadata.name']}"
返回结果中包含了该配置关联的Pod名字及命名空间。
- 删除创建该Pod的Owner,其Owner可能为Deployment、StatefulSet、DaemonSet或Job类型的工作负载。