# 为Pod配置固定EIP
#### 使用场景
CCE Autopilot集群支持为StatefulSet工作负载或直接创建的Pod分配固定的公网IP（EIP）。
#### 约束限制
- 开启固定EIP功能需要和Pod自动创建EIP功能配合使用，详情请参见[为Pod配置EIP](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0734.html)。
- 目前只支持StatefulSet类型的Pod或直接创建的Pod固定EIP，暂不支持Deployment等其他类型的工作负载配置Pod固定EIP。
- 固定EIP创建后，生命周期内（如过期时间未到/Pod还在使用中）不支持通过Pod修改EIP属性。
- 对Pod的EIP地址无明确要求的业务不建议配置固定EIP，因为配置了固定EIP的Pod，Pod重建的耗时会略微变长。
 
#### 配置固定EIP
创建固定EIP的Pod时，填写EIP相关的annotation后，EIP会随Pod自动创建并绑定至该Pod。
以下示例创建一个名为nginx的有状态负载，EIP将随Pod自动创建并绑定至Pod。具体字段含义请参见[表1]。
- 创建有状态负载时固定**独占带宽** 类型的EIP，无需指定带宽ID，示例如下：
  ```
  apiVersion: apps/v1
  kind: StatefulSet
  metadata:
    name: nginx
  spec:
    serviceName: nginx
    replicas: 3
    selector:
      matchLabels:
        app: nginx
    template:
      metadata:
        labels:
          app: nginx
        annotations:
          yangtse.io/static-eip: 'true'   # Pod固定EIP
          yangtse.io/static-eip-expire-no-cascading: 'false'   # EIP级联删除
          yangtse.io/static-eip-expire-duration: 5m   # 固定EIP过期回收的时间间隔
          yangtse.io/pod-with-eip: 'true'    # EIP跟随Pod创建
          yangtse.io/eip-bandwidth-size: '5'    # EIP带宽
          yangtse.io/eip-network-type: 5_bgp    # EIP类型
          yangtse.io/eip-charge-mode: bandwidth    # EIP计费模式
      spec:
        containers:
          - name: container-0
            image: nginx:alpine
            resources:
              limits:
                cpu: 100m
                memory: 200Mi
              requests:
                cpu: 100m
                memory: 200Mi
        imagePullSecrets:
          - name: default-secret
  ```
  

- 创建有状态负载时固定**共享带宽** 类型的EIP，必须指定带宽ID，示例如下：
  ```
  apiVersion: apps/v1
  kind: StatefulSet
  metadata:
    name: nginx
  spec:
    serviceName: nginx
    replicas: 3
    selector:
      matchLabels:
        app: nginx
    template:
      metadata:
        labels:
          app: nginx
        annotations:
          yangtse.io/static-eip: 'true'   # Pod固定EIP
          yangtse.io/pod-with-eip: 'true'    # EIP跟随Pod创建
          yangtse.io/eip-network-type: 5_bgp    # EIP类型
          yangtse.io/eip-bandwidth-id: <eip_bandwidth_id>    # EIP共享带宽ID
      spec:
        containers:
          - name: container-0
            image: nginx:alpine
            resources:
              limits:
                cpu: 100m
                memory: 200Mi
              requests:
                cpu: 100m
                memory: 200Mi
        imagePullSecrets:
          - name: default-secret
  ```
  
 表1Pod固定EIP的annotation配置 
| annotation                               | 是否可选 | 默认值   | 参数说明                                                                                                                                                                                                                     | 取值范围                                                                                                         |
|:---|:---|:---|:---|:---|
| yangtse.io/static-eip                     | 必选  | false  | 是否开启Pod固定EIP，只有StatefulSet类型的Pod或无ownerReferences的Pod支持，默认不开启。                                                                                                                                                           | "false"或"true"                                                                                            |
| yangtse.io/static-eip-expire-duration     | 可选   | 5m   | 删除固定EIP的Pod后，对应的固定EIP过期回收的时间间隔。                                                                                                                                                                                           | 支持时间格式为Go time type，例如1h30m、5m。关于Go time type，请参见[Go time type](https://pkg.go.dev/time#ParseDuration)。 |
| yangtse.io/static-eip-expire-no-cascading | 可选  | false | 是否关闭StatefulSet工作负载的级联回收。 默认为false，表示StatefulSet删除后，会级联删除对应的固定EIP。如果您需要在删除StatefulSet对象后，在EIP过期回收时间内保留对应的固定EIP，用于下一次重建同名的StatefulSet再次使用对应的固定EIP，请将该参数设为true。 | "false"或"true"                                                                                           |
   
表2独占带宽EIP跟随Pod创建的annotation配置 
| annotation                         | 是否可选 | 默认值     | 参数说明                                                                                                                                                                                                   | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|:---|
| yangtse.io/pod-with-eip             | 必选   | false    | 是否需要跟随Pod创建EIP并绑定到该Pod。                                                                                                                                                                               | "false"或"true"                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| yangtse.io/eip-bandwidth-size     | 可选    | 5       | 带宽大小，单位为Mbit/s。                                                                                                                                                                                        | 具体范围以各区域配置为准，根据带宽的计费类型不同可能存在差异，详情请参见弹性公网IP控制台的购买页面。 例如，"华东-上海一"区域按带宽计费类型的带宽大小范围为1Mbit/s\~2000Mbit/s、按流量计费类型的带宽大小范围为1Mbit/s\~300Mbit/s。                                                                                                                                                                                                                                                                 |
| yangtse.io/eip-network-type         | 可选    | 5_bgp  | 公网IP类型。                                                                                                                                                                                               | 具体类型以各区域配置为准，详情请参见弹性公网IP控制台的购买页面。 例如，"华东-上海一"区域支持以下类型： - 5_bgp：全动态BGP  - 5_sbgp：静态BGP   |
| yangtse.io/eip-charge-mode         | 可选    | 空      | EIP计费模式。 **建议填写该参数。**若该参数为空，表示不指定计费模式，则以该区域下弹性公网IP接口的默认值为准。                                                                                | - bandwidth：按带宽计费  - traffic：按流量计费                                                                                                                                                                                |
| yangtse.io/eip-bandwidth-name         | 可选   | Pod名称 | 带宽名称。                                                                                                                                                                                                  | - 1-64个字符，支持数字、字母、中文、_(下划线)、-（中划线）、.（点）  - 最小长度：1  - 最大长度：64                            |
| yangtse.io/eip-enterprise-project-id | 可选  | '0'     | 创建EIP的企业项目ID。您可以在EPS服务控制台的"项目管理"页面查看企业项目ID。 v1.28.15-r80、v1.29.15-r40、v1.30.14-r40、v1.31.14-r0、v1.32.9-r0、v1.33.7-r0、v1.34.2-r0及以上版本的集群支持该功能。 | 不填写默认为'0'，代表使用default企业项目。 其它情况需要填写真实的企业项目ID。                                                                                                                                                                                                                                                                                                                                                       |
| yangtse.io/eip-user-tags            | 可选   | 空       | EIP上的资源标签属性。 v1.28.15-r80、v1.29.15-r40、v1.30.14-r40、v1.31.14-r0、v1.32.9-r0、v1.33.7-r0、v1.34.2-r0及以上版本的集群支持该功能。                              | 以JSON格式写入，示例如下： ``` '[{"key":"Project","value":"Migration-2024"},{"key":"Owner","value":"DevOps-Team"},{"key":"IsTemporary","value":"True"}]' ``` 支持最多17个自定义标签，key/value值输入范围请以EIP服务的限制为准。                                                                                                                                                                                                             |
   
表3共享带宽类型EIP跟随Pod创建的annotation配置 
| annotation                   | 是否可选       | 默认值   | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 取值范围                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|:---|
| yangtse.io/pod-with-eip    | 必选         | false | 是否需要跟随Pod创建EIP并绑定到该Pod。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | "false"或"true"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| yangtse.io/eip-network-type   | 可选        | 5_bgp  | 公网IP类型。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | - 5_bgp  - 5_union  - 5_sbgp 具体类型以各区域配置为准，详情请参见弹性公网IP控制台。    |
| yangtse.io/eip-bandwidth-id | 使用共享型带宽时必选 | 空    | 已有的带宽ID。 - 不填写该字段时，则默认使用独占带宽的EIP。独占带宽EIP的参数设置请参见[表1](https://support.huaweicloud.com/usermanual-cce-autopilot/cce_11_0734.html#cce_11_0734__zh-cn_topic_0000001645553609_table042411131132)。  - 填写该字段时，只允许同时指定yangtse.io/eip-network-type字段，且该字段为可选。   | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   
#### 删除固定EIP
删除Pod后，在配置的固定EIP过期时间内，如果有同名的Pod创建，EIP依旧可用。只有在EIP过期时间内没有同名Pod创建或者删除StatefulSet时开启级联删除EIP时，固定EIP才会删除。
