某些業務情境下,可能需要某一業務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小時。 |
配置樣本
建立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
執行以下命令監控Pod狀態變化。
kubectl get pod -o wide -w
返回樣本如下,可以看到StatefulSet對應一個名稱為web-0的Pod,Pod的IP地址為172.16.0.129。
重新開啟一個命令列終端來串連叢集,執行以下命令刪除StatefulSet包含的Pod。
kubectl delete pod web-0
切換回前一個命令列終端,繼續觀察Pod狀態變化。
新增的返回樣本如下,可以看到刪除Pod後,StatefulSet會自動建立一個新的Pod,新的Pod的IP地址保持不變。
說明前一個Pod未完全刪除前會一直佔用IP地址,影響新Pod的建立速度。