全部產品
Search
文件中心

Container Service for Kubernetes:擷取叢集KubeConfig並通過kubectl工具串連叢集

更新時間:Jun 19, 2024

除了通過Container Service控制台來管理叢集之外,您還可以通過Kubernetes命令列工具kubectl來管理叢集以及應用。本文介紹如何擷取包含當前登入使用者身份資訊的叢集KubeConfig以及通過kubectl用戶端串連叢集。

索引

kubectl和KubeConfig介紹

kubectl是標準的Kubernetes命令列管理工具,通過kubectl您可以串連和管理阿里雲Container ServiceACK的所有叢集類型,包括ACK專有版、ACK託管版(包括ACK基礎版和ACK Pro版)以及ACK Serverless。

KubeConfig中包含了有關叢集、使用者、命名空間以及身份認證機制的資訊。kubectl使用KubeConfig來串連叢集。

串連方式介紹(公、私網串連)

您可以通過公網或私網兩種方式來串連叢集。

  • 公網串連

    當叢集開啟了API Server公網訪問能力(即叢集已通過阿里雲Elastic IP Address EIP暴露了API Server)時,您可以通過公網中的任意機器作為用戶端來串連叢集。關於如何開啟API Server的公網訪問能力,請參見控制叢集API Server的公網訪問能力

  • 私網串連

    當您只需要通過私網來串連叢集時,kubectl用戶端機器必須與叢集位於同一VPC。

步驟一:安裝kubectl工具

說明

如果您使用的是RAM使用者,在使用kubectl串連叢集之前,您需要授予RAM使用者叢集操作許可權。具體操作,請參見授權概述

  1. 根據需要,確定安裝kubectl的用戶端機器,並確定通過公網還是私網來串連叢集。

  2. 下載kubectl工具,並安裝至對應的用戶端機器。

    詳細資料,請參見下載和安裝kubectl。由於K8s基於Linux核心,因此需下載Linux版本的kubectl,使用Linux命令執行操作。

步驟二:選擇叢集憑證類型

ACK叢集提供了兩種叢集憑證(即KubeConfig),分別用於公網訪問和私網訪問。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

  3. 叢集資訊頁面,單擊串連資訊頁簽,根據需要選擇公網或私網訪問憑證。

    說明

    為了實現更靈活的叢集串連策略,您還可以產生臨時KubeConfig,以控制憑證的有效期間。詳情請參見產生臨時的KubeConfig

    叢集串連資訊

步驟三:配置叢集憑證

重要
  • KubeConfig簽發認證的預設有效期間為3年。在臨近到期180天內,您可以通過Container Service管理主控台擷取叢集KubeConfig介面擷取輪轉後重新整理的KubeConfig,新KubeConfig認證的有效期間仍為3年,老的KubeConfig憑據在認證到期前仍然有效,請您根據控制台顯示或介面返回的KubeConfig到期時間及時擷取輪轉憑據。

  • 對於無需長期串連叢集API Server的訪問情境,建議您優先使用臨時的KubeConfig,降低KubeConfig憑據泄露後的安全風險。

  • 根據安全責任共擔模型,Kubeconfig憑據需要由您負責和維護,請謹慎維護憑據的合理性和有效性,避免KubeConfig泄漏帶來的安全風險。

kubectl工具預設會從用戶端機器的$HOME/.kube目錄下尋找名為config的檔案。該檔案用於儲存所要管理叢集的訪問憑證,kubectl會根據該設定檔串連至叢集。

  1. 選擇公網訪問私網訪問頁簽,單擊複製

  2. 將複製的叢集憑證內容粘貼至$HOME/.kube目錄下的config檔案中,儲存並退出。

    說明

    如果$HOME/目錄下沒有.kube目錄和config檔案,請自行建立。

    如果您使用的是專有版叢集並且叢集開啟了公網SSH登入,串連資訊頁簽下會展示SSH頁簽。除了參照以上方式串連叢集外,您還可以通過SSH登入Master節點,配置叢集訪問憑證後,即可使用kubectl管理叢集。關於如何通過SSH方式串連專有版叢集,請參見通過SSH串連ACK專有版叢集的Master節點專有版叢集

步驟四:驗證叢集連通性

叢集憑證配置之後,您可以執行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),並設定憑證使用的有效期間。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱或者目的地組群右側操作列下的詳情

  3. 叢集資訊頁面,單擊串連資訊頁簽,然後單擊產生臨時KubeConfig

  4. 臨時KubeConfig對話方塊,按照頁面提示設定臨時憑證的有效期間及訪問叢集的方式(包括公網訪問和內網訪問)。

    • 如果您使用公網訪問,請選擇公網訪問,單擊產生臨時KubeConfig,然後單擊複製,將內容粘貼到本機電腦的$HOME/.kube/config檔案下。

    • 如果您使用內網訪問,請選擇內網訪問,單擊產生臨時KubeConfig,然後單擊複製,將內容粘貼到本機電腦的$HOME/.kube/config檔案下。

    配置完成後,您可通過臨時憑證串連至叢集。臨時憑證到期後,將無法串連叢集。

吊銷KubeConfig

當企業內部員工離職或是某簽發KubeConfig疑似泄露等情況發生時,吊銷該叢集的KubeConfig可有效保障叢集的安全。吊銷成功後,系統會產生新的KubeConfig和授權綁定,同時,之前已下發的針對該RAM使用者或角色的原KubeConfig會失效。具體操作,請參見吊銷叢集的KubeConfig憑證

清除與恢複KubeConfig

如果您需要批量清理管理範圍內指定叢集維度或RAM使用者或角色維度KubeConfig許可權,您可以使用清除KubeConfig功能。成功清除後,系統不會產生新的KubeConfig。同時,您還可以通過KubeConfig資源回收筒功能恢複已清除的指定KubeConfig許可權。具體操作,請參見清除KubeConfig通過ack-ram-tool清理叢集中指定使用者的許可權使用KubeConfig資源回收筒

常見問題

問題一:如何擷取KubeConfig中使用的認證所關聯的身份資訊?

執行如下命令,擷取名為kubeconfig的檔案使用的認證所關聯的身份資訊。

grep client-certificate-data kubeconfig |awk '{print $2}' |base64 -d | openssl x509 -noout -text |grep Subject:
說明

預設情況下,kubectl使用$HOME/.kube/config檔案來串連叢集,也可以通過設定KUBECONFIG環境變數或設定--kubeconfig參數來指定其他KubeConfig檔案。

預期輸出類似如下:

        Subject: O=system:users, OU=, CN=1***-1673419473

其中:

  • O:所屬的Kubernetes使用者組資訊,樣本中的組名為system:users

  • CN:關聯的使用者資訊。樣本中的使用者為1***-1673419473,其中1***關聯的是您帳號下的某個阿里雲使用者ID。

問題二:如何擷取KubeConfig所使用的認證的到期時間?

執行如下命令,擷取名為KubeConfig的檔案使用的認證所關聯的到期時間。

grep client-certificate-data  kubeconfig |awk '{print $2}' |base64 -d | openssl x509 -noout -enddate
說明

預設情況下,kubectl使用$HOME/.kube/config檔案來串連叢集,也可以通過設定KUBECONFIG環境變數或設定--kubeconfig參數來指定其他KubeConfig檔案。

預期輸出類似如下:

notAfter=Jan 10 06:44:34 2026 GMT

其中Jan 10 06:44:34 2026 GMT即為認證的到期時間。

您可以在認證到期前的180天內或認證到期後,通過控制台或者OpenAPI擷取使用新到期時間的認證的KubeConfig。

問題三:如何解決通過kubectl串連叢集時提示certificate is valid for錯誤的問題?

當您為叢集API Server的SLB綁定了新的IP,然後使用kubectl訪問這個新的IP時,執行kubectl命令失敗並提示Error while proxying request: x509: certificate is valid for xxxUnable to connect to the server: x509: certificate is valid for xxx錯誤。

  • 如果您使用的是託管版叢集,您可以將新的IP加入到API Server認證SAN中,解決此問題。詳細資料,請參見自訂叢集API Server認證SAN

  • 如果您使用的是專有版叢集,您可以配置kubectl忽略這個錯誤,解決此問題。

    重要

    使用insecure-skip-tls-verify配置忽略該錯誤將導致用戶端不再校正API Server的認證。建議您將專有版叢集遷移為ACK Pro叢集,然後再通過將新的IP加入到API Server認證SAN中的方法解決該問題。更多資訊,請參考熱遷移ACK專有版叢集至ACK叢集Pro版

    • 您可以在執行kubectl命令的時候指定--insecure-skip-tls-verify參數。

      kubectl -s https://<IP>:6443 --insecure-skip-tls-verify get ns
    • 或者修改KubeConfig檔案內容,新增insecure-skip-tls-verify: true配置,然後刪除certificate-authority-data配置。

      apiVersion: v1
      clusters:
      - cluster:
          server: https://<IP>:6443
          insecure-skip-tls-verify: true
        name: kubernetes
      contexts:

問題四:託管叢集能否提供叢集根憑證密鑰用於自助產生KubeConfig認證?

託管叢集不對外提供叢集根憑證密鑰,建議您通過控制台或OpenAPI擷取叢集KubeConfig。

相關文檔