Terway网络插件中的EIP(弹性公网IP)功能已被弃用并不再维护,请使用ack-extend-network-controller组件来实现EIP功能。本文介绍如何将EIP从Terway迁移至ack-extend-network-controller。
前提条件
已创建ACK托管集群或ACK专有集群,且集群的网络插件为Terway。具体操作,请参见创建Kubernetes托管版集群、创建Kubernetes专有版集群。
影响范围
迁移过程不会修改您的EIP实例信息,也不会对您的业务产生影响。
如果您的集群正在使用Terway中的EIP功能,可以先将已分配的资源迁移到ack-extend-network-controller中的EIP控制器中进行管理,然后再进行迁移。
如果您的集群未使用Terway中的EIP功能,则无需进行迁移操作。
迁移说明
如果在Terway中启用EIP迁移功能,Terway会为集群中的每个Pod所关联的EIP创建一个PodEIP资源。PodEIP是一个资源对象,用于管理与Pod相关的EIP信息。当启用EIP迁移功能后,Terway将不再管理EIP,而是由ack-extend-network-controller来管理。
关于如何在Terway中启用EIP功能,请参见自动分配EIP场景。
操作步骤
确保集群中未安装ack-extend-network-controller组件。如果已安装ack-extend-network-controller,请先卸载。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在Helm页面,查看是否存在发布名称为ack-extend-network-controller的组件。如果存在,请单击ack-extend-network-controller操作列的删除,完成组件卸载。
将Terway网络插件版本升级至v1.6.0及以上。
升级操作,请参见管理组件。
修改Terway配置文件,以启用Terway中的EIP迁移功能。
重要如果在Terway中启用EIP迁移功能,Terway会为集群中的每个Pod所关联的EIP创建一个PodEIP资源。启用EIP迁移功能后,Terway将不再管理EIP。
执行以下命令修改Terway的配置ConfigMap。
kubectl edit cm eni-config -n kube-system
修改eni_conf中配置。
参数
值
说明
enable_eip_pool
"true"
如果此参数未配置,或者配置为
"false"
,则表明未启用eip
功能,则无须迁移。enable_eip_migrate
true
设置为
true
则启用迁移功能。配置文件示例如下,请勿修改其他配置参数。
# 以上内容省略。 eni_conf: | { "version": "1", "enable_eip_pool": "true", "enable_eip_migrate": true, "vswitch_selection_policy": "ordered" } # 以下内容省略。
配置文件修改完成后,执行以下命令重新创建Terway实例。
kubectl delete pod -n kube-system -l app=terway-eniip
Terway Pods重新启动后,Terway插件会自动将集群中的EIP迁移到ack-extend-network-controller。
在Terway日志中检查迁移状态,输出
eip migrate finished
表明EIP迁移完成。执行以下命令,获取Terway Pod的名称.
kubectl get pods -n kube-system | grep terway
结果会返回一个或多个Terway的Pod名称。
执行以下命令,输出Terway Pod的日志。
kubectl logs -n kube-system <pod_name> # 替换<pod_name>为您实际的Terway Pod名称。
结果输出
eip migrate finished
表明EIP迁移完成。
检查集群中的PodEIP CRD对象,以查看配置是否成功创建。
执行以下命令,查询已经迁移的CR。该CR对象与Pod具有相同的名称和命名空间。
kubectl get podeip -n {namespace} {name} # 将{namespace}和{name}替换为指定Pod(已关联EIP)的命名空间和名称。
在应用市场安装ack-extend-network-controller,并启用EIP功能。具体操作,请参见在应用市场安装ack-extend-network-controller。
执行以下命令检查PodEIP CRD资源状态是否更新。
kubectl get podeip -n {namespace} {name} -o yaml # 将{namespace}和{name}替换为指定Pod(已关联EIP)的命名空间和名称。
如果
status
字段不为空,表明EIP功能已经正确运行。如果
status
字段为空,请检查ack-extend-network-controller组件的配置以及日志。
输出类似如下结果。
参数说明如下:
参数
取值说明
spec.allocationType.type
Static
:表示使用静态分配方式,即Pod使用指定的EIP ID。Auto
:表示使用自动分配方式,即EIP由Terway自动创建。
spec.allocationType.releaseStrategy
Follow
:表示在Pod删除时释放EIP,即对于无状态的工作负载,无需保持EIP与Pod的关联关系。TTL
:表示在一定时间后释放EIP,即对于有状态的工作负载,需要保持EIP与Pod的关联关系。
关闭Terway的EIP功能。执行下面步骤。
将
enable_eip_migrate
参数的值设置为false
或删除该参数。将
enable_eip_pool
参数的值设置为"false"
或删除该参数。重新启动Terway Pods。