Terway Trunk ENI支持为每个Pod配置固定IP、独立的虚拟交换机、安全组,能提供精细化流量管理、流量隔离、网络策略配置和IP管理能力。本文介绍了如何在Terway网络中为Pod配置固定IP及独立虚拟交换机、安全组。
背景信息
弹性网卡中继(Trunk ENI)是一种新的虚拟网卡。除了提供原有弹性网卡(ENI)相同的功能外,还支持将额外的ENI挂载到Trunk ENI上使用。这部分额外的ENI将以独占的方式分配给Pod。
在为集群启用Trunk ENI功能后,可以让一部分Pod使用自定义配置,另外的Pod则使用共享配置。Pod自定义配置是可选功能,默认情况下创建的Pod,使用的是共享ENI上的IP地址。只有当您主动声明为指定Pod开启自定义配置后,相应的Pod才能使用自定义配置。
启用Pod自定义配置后,集群内将部署terway-controlplane组件, 其工作模式如下图所示。

使用限制
- 在Terway网络中为Pod配置固定IP及独立虚拟交换机、安全组功能正在公测中,如需使用请到配额平台申请。
- 使用Terway插件Trunk功能,您需要选择支持Trunk功能,且响应参数为
EniTrunkSupported=true
的实例。关于实例支持情况,请参见 DescribeInstanceTypes。 - 单节点所支持Pod有数量限制,关于节点所支持容器网络Pod数量的详细描述,请参见节点所支持的容器网络Pod数量。
- Pod安全组规则不会应用到同节点Pod间流量及同节点上节点与Pod间流量。如果您需要限制,可以通过NetworkPolicy进行配置。
步骤一:创建ACK集群
创建ACK集群,网络插件选择Terway,在Terway模式中选中Trunk ENI支持。详细信息,请参见创建Kubernetes专有版集群和创建Kubernetes托管版集群。
步骤二:创建网络定义
apiVersion: network.alibabacloud.com/v1beta1
kind: PodNetworking
metadata:
name: example
spec:
allocationType:
type: Elastic/Fixed
releaseStrategy: TTL
releaseAfter: "1h"
selector:
podSelector:
matchLabels:
foo: bar
namespaceSelector:
matchLabels:
foo: bar
securityGroupIDs:
- sg-bpxxxx
vSwitchOptions:
- vsw-bpxxxx
status:
status: Ready
参数 | 说明 | |
---|---|---|
allocationType (描述Pod IP分配的策略) | type | 取值范围:
|
releaseStrategy | IP释放策略,只有将type 配置为Fixed 时,该参数才有效。参数取值范围如下。
| |
releaseAfter | 延迟回收时间。仅在releaseStrategy 为TTL 模式下生效,支持时间格式为Go time type,例如2h45m 、5m0s 。关于Go time type,请参见Go time type。 | |
selector (用于配置标签选择器,被选中的Pod将使用该网络配置) | podSelector |
|
namespaceSelector |
| |
vSwitchOptions | - |
|
securityGroupIDs | - | 可配置多个安全组ID,配置多个安全组时将同时生效,安全组数量小于等于5个。 |
创建PodNetworking资源后,Terway将同步网络配置信息,只有在status
成为Ready
后,该网络资源才能对Pod生效。
Elastic类型的网络配置示例
apiVersion: network.alibabacloud.com/v1beta1
kind: PodNetworking
metadata:
name: example
spec:
allocationType:
type: Elastic
selector:
podSelector:
matchLabels:
foo: bar
securityGroupIDs:
- sg-bpxxxx
vSwitchOptions:
- vsw-bpxxxx
status:
status: Ready
Fixed类型的网络配置示例
apiVersion: network.alibabacloud.com/v1beta1
kind: PodNetworking
metadata:
name: example
spec:
allocationType:
type: Fixed
releaseStrategy: TTL
releaseAfter: "1h"
selector:
podSelector:
matchLabels:
foo: bar
securityGroupIDs:
- sg-bpxxxx
vSwitchOptions:
- vsw-bpxxxx
status:
status: Ready
步骤三:创建Pod
创建Pod时,Pod将通过标签去匹配PodNetworking。如果Pod没有匹配到任何PodNetworking,则Pod将使用默认的共享ENI上的IP。如果Pod有匹配到PodNetworking,则将使用PodNetworking中定义的配置分配ENI。关于Pod标签的相关内容,请参见标签。
Terway会为这类Pod创建相应的名为PodENI的自定义资源,用于跟踪Pod所使用的资源,该资源由Terway管理,您不可修改该资源。
迁移集群时,停止terway-controlplane
ACK专有版集群在启用Pod自定义配置后,不能直接迁移到Pro版集群。您需要在迁移前停止terway-controlplane ,并在迁移后启用terway-controlplane。
- 迁移前准备。
- 迁移集群完成后,检查迁移结果。说明 关于迁移集群的具体操作,请参见热迁移ACK专有版集群至ACK Pro版集群。
- 如果迁移集群失败,执行以下命令,恢复webhook和terway-controlplane。
# 恢复webhook配置。 kubectl apply -f terway-controlplane.mutatingwebhookconfigurations.yaml kubectl apply -f terway-controlplane.validatingwebhookconfigurations.yaml # 恢复terway-controlplane。 kubectl scale deploy -nkube-system terway-controlplane --replicas 1
- 如果迁移集群成功,执行以下命令,清理资源。
kubectl delete deploy -nkube-system terway-controlplane
- 如果迁移集群失败,执行以下命令,恢复webhook和terway-controlplane。
- 在组件管理页面安装terway-controlplane。具体操作,请参见管理组件。
常见问题
如何判断Pod是否使用了PodNetworking的网络配置?
- Pod创建后,在
annotations
中将以k8s.aliyun.com/pod-networking
作为键值记录创建该Pod时是否使用了PodNetworking资源。apiVersion: v1 kind: Pod metadata: annotations: k8s.aliyun.com/pod-eni: "true" k8s.aliyun.com/pod-networking: podnetworking labels: app: example pod-ip: elastic
- Terway将创建Pod同名、同命名空间的PodENI资源,用于记录所使用的网络配置信息。您可以通过以下方式查询。
kubectl get podenis.network.alibabacloud.com your-pod-name -n default -oyaml apiVersion: network.alibabacloud.com/v1beta1 kind: PodENI metadata: finalizers: - pod-eni generation: 1 name: your-pod-name namespace: default spec: allocations: - allocationType: type: Elastic eni: id: eni-bp1xxxx mac: 00:16:xx:xx:xx:xx securityGroupIDs: - sg-bp1xxxx vSwitchID: vsw-bp1xxxx zone: cn-hangzhou-h ipv4: 192.168.x.x ipv4CIDR: 192.168.x.x/19 ipv6: 2408:x:x:x:x:x:x:x ipv6CIDR: 2408:x:x:x::/64 zone: cn-hangzhou-h status: eniInfos: eni-bp1xxxx: id: eni-bp1xxxx status: Bind vid: 1001 instanceID: i-bp1xxxx phase: Bind podLastSeen: "2021-xx-xxT00:00:00Z" trunkENIID: eni-bp1xxxx
Pod创建后为什么没有使用PodNetworking中的网络配置?
- 请确保PodNetworking资源状态为
Ready
。 - 请确保Pod标签和PodNetworking中的标签可以唯一匹配。
- 如果您使用固定IP策略,则非StatefulSet控制器创建的Pod将不能被匹配。