本文介紹如何在ACK Serverless集群或虛擬節點中給Pod掛載EIP。
前提條件
創建一個ACK Serverless集群或在Kubernetes集群創建一個部署虛擬節點Chart。
請確保該集群的安全組已開放相關端口(本示例中需要開放80端口)。
需要升級ack-virtual-node組件到v1.0.0.7-aliyun及之后版本。
掛載彈性公網IP僅支持創建容器組時設置,更新容器組時添加或修改相關設置無效。
背景信息
阿里云容器服務Serverless版、虛擬節點推出Pod掛載彈性公網IP功能,此功能使某些Serverless容器應用的部署和服務訪問變得更加簡單和便利。
無需創建VPC NAT網關即可讓單個Pod訪問公網。
無需創建Service也可讓單個Pod暴露公網服務。
可以更加靈活而且動態地綁定Pod和EIP。
為Pod掛載彈性公網IP
您可以通過以下兩種方法給Pod掛載彈性公網IP。
方法一:自動分配彈性公網EIP
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在無狀態頁面,單擊使用YAML創建資源,選擇示例模板或自定義。
您可以使用如下YAML示例模板創建Pod。本例中,通過指定k8s.aliyun.com/eci-with-eip為true,ACK Serverless和虛擬節點會自動為此Pod分配一個EIP,并且綁定到Pod上。
apiVersion: v1 kind: Pod metadata: name: nginx annotations: k8s.aliyun.com/eci-with-eip: "true" # k8s.aliyun.com/eip-bandwidth: '5' # 注意:指定帶寬不需要帶單位 spec: containers: - image: nginx:alpine imagePullPolicy: Always name: nginx ports: - containerPort: 80 name: http protocol: TCP restartPolicy: OnFailure
說明您可以通過Annotation k8s.aliyun.com/eip-bandwidth指定EIP的帶寬,默認值為5,單位為Mbps。
您也可以通過Annotation k8s.aliyun.com/eip-common-bandwidth-package-id讓EIP綁定共享帶寬。
如果您創建的是Deployment,那么Deployment中的每一個Pod都將會被掛載不同的EIP,請謹慎使用此操作。
單擊創建。
在集群管理頁左側導航欄中,選擇 ,查看容器組的狀態。
在目標容器組右側單擊編輯,彈出編輯YAML文件。
說明YAML文件中
k8s.aliyun.com/allocated-eipAddress: 47.110.XX.XX
的IP地址即為EIP的公網訪問地址。在瀏覽器中輸入http://ip地址,您可訪問nginx歡迎頁。
此處的http://ip地址為YAML文件中
k8s.aliyun.com/allocated-eipAddress: 47.110.XX.XX
的IP地址。說明此方式中EIP為動態分配,其生命周期與Pod相同,當刪除Pod時,動態分配的EIP也會一并刪除。
可選:如果需要為ECI指定線路,需設置
k8s.aliyun.com/eip-isp
。ISP字段表示線路類型,默認為
BGP
,更多信息,請參見AllocateEipAddressPro。YAML樣例模板如下:
apiVersion: v1 kind: Pod metadata: name: nginx annotations: k8s.aliyun.com/eci-with-eip: "true" k8s.aliyun.com/eip-isp: "BGP" spec: containers: - image: nginx:alpine name: nginx ports: - containerPort: 80 name: http protocol: TCP restartPolicy: OnFailure
方法二:指定彈性公網IP實例ID
- 說明
申請的EIP和集群必須在同一地域。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在無狀態頁面,然后單擊使用YAML創建資源,選擇示例模板或自定義。
您可以使用如下YAML示例模板創建Pod。本例中,通過指定Pod的Annotation k8s.aliyun.com/eci-eip-instanceid為EIP實例ID。
apiVersion: v1 kind: Pod metadata: name: nginx annotations: "k8s.aliyun.com/eci-eip-instanceid": "<youreipInstanceId>" spec: containers: - image: nginx:alpine imagePullPolicy: Always name: nginx ports: - containerPort: 80 name: http protocol: TCP restartPolicy: OnFailure
說明<youreipInstanceId>
需要替換成步驟1中獲取的EIP實例ID。如果同時設置了自動分配彈性公網EIP和指定彈性公網IP實例ID,則手動指定的EIP無效。
單擊創建。
在集群管理頁左側導航欄中,選擇
,查看容器組的狀態。在瀏覽器中輸入http://ip地址,您可以訪問nginx歡迎頁。
說明此處的http://ip地址為步驟1中申請的EIP的IP地址。