将EIP从Terway迁移至ack-extend-network-controller

Terway网络插件中的EIP(弹性公网IP)功能已被弃用并不再维护,请使用ack-extend-network-controller组件来实现EIP功能。本文介绍如何将EIP从Terway迁移至ack-extend-network-controller。

前提条件

影响范围

重要

迁移过程不会修改您的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场景

操作步骤

  1. 确保集群中未安装ack-extend-network-controller组件。如果已安装ack-extend-network-controller,请先卸载。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

    3. Helm页面,查看是否存在发布名称为ack-extend-network-controller的组件。如果存在,请单击ack-extend-network-controller操作列的删除,完成组件卸载。

  2. 将Terway网络插件版本升级至v1.6.0及以上。

    升级操作,请参见管理组件

  3. 修改Terway配置文件,以启用Terway中的EIP迁移功能。

    重要

    如果在Terway中启用EIP迁移功能,Terway会为集群中的每个Pod所关联的EIP创建一个PodEIP资源。启用EIP迁移功能后,Terway将不再管理EIP。

    1. 执行以下命令修改Terway的配置ConfigMap。

      kubectl edit cm eni-config -n kube-system
    2. 修改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"
          }
      # 以下内容省略。

    1. 配置文件修改完成后,执行以下命令重新创建Terway实例。

      kubectl delete pod -n kube-system -l app=terway-eniip

      Terway Pods重新启动后,Terway插件会自动将集群中的EIP迁移到ack-extend-network-controller。

  4. 在Terway日志中检查迁移状态,输出eip migrate finished表明EIP迁移完成。

    1. 执行以下命令,获取Terway Pod的名称.

      kubectl get pods -n kube-system | grep terway

      结果会返回一个或多个Terway的Pod名称。

    2. 执行以下命令,输出Terway Pod的日志。

      kubectl logs -n kube-system <pod_name> # 替换<pod_name>为您实际的Terway Pod名称。

      结果输出eip migrate finished表明EIP迁移完成。

      image.png

  5. 检查集群中的PodEIP CRD对象,以查看配置是否成功创建。

    执行以下命令,查询已经迁移的CR。该CR对象与Pod具有相同的名称和命名空间。

    kubectl get podeip -n {namespace} {name} # 将{namespace}和{name}替换为指定Pod(已关联EIP)的命名空间和名称。
  6. 应用市场安装ack-extend-network-controller,并启用EIP功能。具体操作,请参见在应用市场安装ack-extend-network-controller

  7. 执行以下命令检查PodEIP CRD资源状态是否更新。

    kubectl get podeip -n {namespace} {name} -o yaml # 将{namespace}和{name}替换为指定Pod(已关联EIP)的命名空间和名称。
    • 如果status字段不为空,表明EIP功能已经正确运行。

    • 如果status字段为空,请检查ack-extend-network-controller组件的配置以及日志。

    输出类似如下结果。

    展开查看PodEIP的输出结果

    apiVersion: alibabacloud.com/v1beta1
    kind: PodEIP
    metadata:
      creationTimestamp: "2023-10-24T08:24:37Z"
      finalizers:
      - podeip-controller.alibabacloud.com/finalizer
      generation: 1
      name: example-xxx-xx
      namespace: default
      resourceVersion: "44013"
      uid: 4744a7af-***-***-ad06-***17aecce
    spec:
      allocationID: eip-xxxxxx
      allocationType:
        releaseStrategy: Follow
        type: Auto
    status:
      eipAddress: 47.XX.XX.XX
      internetChargeType: PayByTraffic
      isp: BGP
      networkInterfaceID: eni-xxxxxxx
      podLastSeen: "2023-10-24T08:31:22Z"
      privateIPAddress: 192.XX.XX.XX
      resourceGroupID: rg-xxxxxx
      status: InUse

    参数说明如下:

    参数

    取值说明

    spec.allocationType.type

    • Static:表示使用静态分配方式,即Pod使用指定的EIP ID。

    • Auto:表示使用自动分配方式,即EIP由Terway自动创建。

    spec.allocationType.releaseStrategy

    • Follow:表示在Pod删除时释放EIP,即对于无状态的工作负载,无需保持EIP与Pod的关联关系。

    • TTL:表示在一定时间后释放EIP,即对于有状态的工作负载,需要保持EIP与Pod的关联关系。

  8. 关闭Terway的EIP功能。执行下面步骤。

    1. enable_eip_migrate参数的值设置为false或删除该参数。

    2. enable_eip_pool参数的值设置为"false"或删除该参数。

    3. 重新启动Terway Pods。