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专有版需要额外申请Trunk实例使用权限,请向ECS提交工单申请。ACK托管版无需额外申请Trunk实例使用权限。
步骤一:创建ACK集群
创建ACK集群,网络插件选择Terway,在Terway模式中选中Trunk ENI支持。详细信息,请参见创建Kubernetes专有版集群和创建Kubernetes托管版集群。
步骤二:创建网络定义
Terway增加一种名为PodNetworking的自定义资源来描述网络配置。您可以创建多个PodNetworking,来规划不同网络平面。在使用前您需要创建至少一个PodNetworking来描述网络配置。创建PodNetworking的示例如下:
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释放策略,只有将
|
|
releaseAfter |
延迟回收时间。仅在 |
|
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管理,您不可修改该资源。
为已有集群Pod配置固定IP及独立虚拟交换机、安全组
前提条件
网络插件类型为terway-eniip。
使用限制
-
2020年06月之前创建的托管版集群不支持此功能。
-
固定IP及独立虚拟交换机、安全组开启后不可关闭。
开启terway-eniip
-
登录容器服务管理控制台,在左侧导航栏选择集群。
-
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理。
-
在组件管理页面,单击网络页签,找到terway-eniip组件。
-
在terway-eniip卡片,单击升级,升级terway-eniip组件到最新版本。
如果卡片上没有升级字样,说明当前组件已是最新版本,请跳过此步骤。
-
开启terway-enniip。
-
执行如下命令,编辑eni-config。
kubectl edit cm -nkube-system eni-config
-
编辑YMAL文件的eni-config参数,且eni-config必须为合法的JSON格式。
apiVersion: v1 data: 10-terway.conf: | { "cniVersion": "0.3.1", "name": "terway", "eniip_virtual_type": "IPVlan", "type": "terway" } disable_network_policy: "false" eni_conf: | { "min_pool_size": 0, "enable_eni_trunking": true, # 启用Trunk ... } kind: ConfigMap
-
执行如下命令,重启terway pods,使配置生效。
kubectl delete pod -n kube-system -l app=terway-eniip
-
-
请在terway-eniip参数配置完成后,在组件管理页面的网络页签,安装terway-controlplane组件。
安装结束后,在terway-controlplane卡片上可以看到已安装字样。
迁移集群时,停止terway-controlplane
ACK专有版集群在启用Pod自定义配置后,不能直接迁移到Pro版集群。您需要在迁移前停止terway-controlplane ,并在迁移后启用terway-controlplane。
-
迁移前准备。
-
执行以下命令,停止terway-controlplane。
kubectl scale deploy -nkube-system terway-controlplane --replicas 0
-
执行以下命令,完成webhook配置。
# 备份webhook配置。 kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io terway-controlplane -oyaml > terway-controlplane.mutatingwebhookconfigurations.yaml kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io terway-controlplane -oyaml > terway-controlplane.validatingwebhookconfigurations.yaml # 清理webhook配置。 kubectl delete -f terway-controlplane.mutatingwebhookconfigurations.yaml kubectl delete -f terway-controlplane.validatingwebhookconfigurations.yaml
-
-
迁移集群完成后,检查迁移结果。
说明
关于迁移集群的具体操作,请参见热迁移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
-
-
在组件管理页面安装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将不能被匹配。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/168559.html