本文介紹如何獲取包含當前登錄用戶身份信息的集群KubeConfig,并通過kubectl客戶端連接集群。
kubectl和KubeConfig介紹
kubectl是標準的Kubernetes命令行管理工具,通過kubectl您可以連接和管理阿里云容器計算服務ACS的集群。KubeConfig中包含了有關集群、用戶、命名空間以及身份認證機制的信息。kubectl使用KubeConfig來連接集群。
連接方式
您可以通過公網或內網兩種方式來連接集群。
公網連接
當集群開啟了API Server公網訪問能力(即集群已通過阿里云彈性公網IP EIP暴露了API Server)時,您可以通過公網中的任一機器作為客戶端來連接集群。關于如何開啟API Server的公網訪問能力,請參見控制集群API Server的公網訪問能力。
內網連接
當您只需要通過內網來連接集群時,kubectl客戶端機器必須與集群位于同一VPC。
步驟一:安裝kubectl工具
如果您使用的是RAM用戶,在使用kubectl連接集群之前,您需要授予RAM用戶集群操作權限。具體操作,請參見授權概述。
根據需要,確定安裝kubectl的客戶端機器,并確定通過公網或內網來連接集群。
下載kubectl工具,并安裝至對應的客戶端機器。
具體操作,請參見下載和安裝kubectl。由于K8s基于Linux內核,因此需要下載Linux版本的kubectl,使用Linux命令執行操作。
步驟二:配置集群憑證
ACS集群提供了兩種集群憑證(即KubeConfig),分別用于公網訪問和內網訪問。kubectl工具默認會從客戶端機器的$HOME/.kube目錄下查找名為config的文件。該文件用于存儲所要管理集群的訪問憑證,kubectl會根據該配置文件連接至集群。
登錄容器計算服務控制臺,在左側導航欄選擇集群。
在集群頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情。
在集群信息頁面,單擊連接信息頁簽,按需單擊公網訪問或內網訪問頁簽,然后單擊復制,獲取憑證。
說明為了實現更靈活的集群連接策略,您還可以生成臨時KubeConfig,以控制憑證的有效期。具體操作,請參見生成臨時的KubeConfig。
將復制的集群憑證內容粘貼至$HOME/.kube目錄下的config文件中,保存并退出。
如果$HOME/目錄下沒有.kube目錄和config文件,請自行創建。
步驟三:驗證集群連通性
集群憑證配置之后,您可以執行kubectl命令以驗證集群的連通性。本文以查詢命名空間為例,執行以下命令。
kubectl get namespace
預期輸出:
NAME STATUS AGE
default Active 4h39m
kube-node-lease Active 4h39m
kube-public Active 4h39m
kube-system Active 4h39m
生成臨時的KubeConfig
為了實現更靈活的集群連接策略,您可以生成臨時集群憑證(KubeConfig),并設置憑證使用的有效期。
登錄容器計算服務控制臺,在左側導航欄選擇集群。
在集群頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情。
在集群信息頁面,單擊連接信息頁簽,然后單擊生成臨時 KubeConfig。
在臨時 KubeConfig對話框中,選擇臨時憑證的有效期和訪問集群的方式(公網訪問或內網訪問),然后單擊生成臨時 KubeConfig,單擊復制,將內容粘貼到本地計算機的
$HOME/.kube/config
文件下。配置完成后,您可以通過臨時憑證連接至集群。當臨時憑證過期后,將無法連接集群。
常見問題
問題一:如何獲取KubeConfig中使用的證書所關聯的身份信息?
執行以下命令,獲取證書所關聯的身份信息。
執行此命令時,請將YOUR_KUBECONFIG_PATH
替換為實際要查詢配置文件的絕對路徑。默認情況下,kubectl使用$HOME/.kube/config
文件來連接集群,也可以通過設置KUBECONFIG環境變量或設置--kubeconfig
參數來指定其他KubeConfig文件。
grep client-certificate-data YOUR_KUBECONFIG_PATH |awk '{print $2}' |base64 -d | openssl x509 -noout -text |grep Subject:
預期輸出類似如下:
Subject: O=system:users, OU=, CN=1***-1673419473
參數說明如下:
O
表示所屬的Kubernetes用戶組信息。示例中的組名為system:users
。CN
表示關聯的用戶信息。示例中的用戶為1***-1673419473
,其中1***
關聯的是您賬號下的某個阿里云用戶ID。
問題二:如何獲取KubeConfig所使用的證書的過期時間?
執行以下命令,獲取證書的過期時間。
執行此命令時,請將YOUR_KUBECONFIG_PATH
替換為實際要查詢配置文件的絕對路徑。默認情況下,kubectl使用$HOME/.kube/config
文件來連接集群,也可以通過設置KUBECONFIG環境變量或設置--kubeconfig
參數來指定其他KubeConfig文件。
grep client-certificate-data YOUR_KUBECONFIG_PATH |awk '{print $2}' |base64 -d | openssl x509 -noout -enddate
預期輸出類似如下:
notAfter=Jan 10 06:44:34 2026 GMT
其中Jan 10 06:44:34 2026 GMT
即為證書的過期時間。
您可以在證書過期前的60天內或證書過期后,通過控制臺或者OpenAPI獲取使用新過期時間的證書的KubeConfig。
問題三:如何解決通過kubectl連接集群時提示certificate is valid for錯誤的問題?
當您為集群API Server的SLB綁定了新的IP,然后使用kubectl訪問這個新的IP時,執行kubectl命令失敗并提示Error while proxying request: x509: certificate is valid for xxx
或Unable to connect to the server: x509: certificate is valid for xxx
錯誤。