全部產品
Search
文件中心

Elastic Container Instance:配置ECI Pod使用固定IP地址

更新時間:Jul 06, 2024

某些業務情境下,可能需要某一業務Pod使用固定的IP地址。本文介紹如何配置ECI Pod使用固定的IP地址。

功能說明

預設情況下,建立ECI Pod時,系統會從eci-profile中配置的交換器網段中,隨機為Pod分配一個IP地址。如果Pod因為故障釋放了,IP地址會隨之釋放,新建立的Pod會被分配新的IP地址。在某些業務情境下(例如一些IP地址直接暴露的服務),可能需要某一Pod使用固定的IP地址,否則會影響實際業務。

基於上述情境,ECI支援了固定IP地址的功能。在建立ECI Pod時,如果Pod啟用了固定IP地址,則系統會從配置的交換器網段中為其分配兩個IP地址,一個為動態IP地址(該地址在叢集內不可見),一個為固定IP地址。該Pod釋放後,系統會保留其固定的IP地址,在有效期間內(預設48小時),如果新建立的Pod與被釋放的Pod的Cluster ID、Namespace和Pod Name一致,且啟用了固定IP地址,則系統會將保留的IP地址分配給新建立的Pod,從而實現同一業務需求的Pod的IP地址保持不變。

說明

該功能情境下,您可以使用StatefulSet來部署業務,StatefulSet包含的Pod釋放後,系統會自動建立新的相同Namespace和Pod Name的Pod。

配置說明

您可以在Pod metadata中添加Annotation來配置ECI Pod啟用固定IP地址,以及固定IP地址空閑後的保留時間長度。相關Annotation說明如下:

Annotation

樣本值

說明

k8s.aliyun.com/eci-fixed-ip

"true"

配置為true表示Pod啟用固定IP地址。

k8s.aliyun.com/eci-fixed-ip-retain-hour

"24"

固定IP地址空閑後的保留時間長度,即啟用固定IP地址的Pod釋放後,其固定IP地址的保留時間長度,單位為小時。

如果沒有配置該Annotation,預設保留48小時。

配置樣本

  1. 建立Service和StatefulSet。

    kubectl apply -f fixedIp.yaml

    fixedIp.yaml的內容樣本如下,表示建立一個Service和一個StatefulSet,StatefulSet中包含一個ECI Pod,該Pod配置了啟用固定IP地址的Annotation。

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      ports:
      - port: 80
        name: web
      clusterIP: None
      selector:
        app: nginx
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      selector:
        matchLabels:
          app: nginx
      serviceName: "nginx"
      minReadySeconds: 10
      template:
        metadata:
          annotations:
            k8s.aliyun.com/eci-fixed-ip: "true"  #啟用固定IP地址
          labels:
            app: nginx
            alibabacloud.com/eci: "true"
        spec:
          containers:
          - name: nginx
            image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
            ports:
            - containerPort: 80
              name: web
  2. 執行以下命令監控Pod狀態變化。

    kubectl get pod -o wide -w

    返回樣本如下,可以看到StatefulSet對應一個名稱為web-0的Pod,Pod的IP地址為172.16.0.129。

    ECI固定IP1..png

  3. 重新開啟一個命令列終端來串連叢集,執行以下命令刪除StatefulSet包含的Pod。

    kubectl delete pod web-0
  4. 切換回前一個命令列終端,繼續觀察Pod狀態變化。

    新增的返回樣本如下,可以看到刪除Pod後,StatefulSet會自動建立一個新的Pod,新的Pod的IP地址保持不變。

    說明

    前一個Pod未完全刪除前會一直佔用IP地址,影響新Pod的建立速度。

    ECI固定IP2..png