設定擴充套件 API 伺服器

設定擴充套件 API 伺服器與聚合層協同工作,可以擴充套件 Kubernetes API 伺服器,新增不屬於核心 Kubernetes API 的額外 API。

準備工作

你需要有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在至少有兩個不是控制平面主機的節點上執行此教程。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用以下 Kubernetes 演練場之一。

要檢查版本,請輸入 kubectl version

設定擴充套件 API 伺服器以與聚合層協同工作

以下步驟概述瞭如何**高層次**地設定擴充套件 API 伺服器。這些步驟適用於無論是使用 YAML 配置還是使用 API。我們嘗試明確識別兩者之間的任何差異。有關如何使用 YAML 配置實現它們的具體示例,你可以檢視 Kubernetes 倉庫中的 sample-apiserver

或者,你可以使用現有的第三方解決方案,例如 apiserver-builder,它應該會為你生成一個骨架並自動化以下所有步驟。

  1. 確保 APIService API 已啟用(檢查 --runtime-config)。預設情況下應該開啟,除非在你的叢集中已被有意關閉。
  2. 你可能需要建立一條 RBAC 規則以允許你新增 APIService 物件,或者讓你的叢集管理員來建立。 (由於 API 擴充套件會影響整個叢集,不建議在即時叢集中進行 API 擴充套件的測試/開發/除錯。)
  3. 建立你希望執行擴充套件 API 服務所用的 Kubernetes 名稱空間。
  4. 建立/獲取一個 CA 證書,用於簽署擴充套件 API 伺服器用於 HTTPS 的伺服器證書。
  5. 為 API 伺服器建立/獲取一個伺服器證書/金鑰以用於 HTTPS。此證書應由上述 CA 簽署。它還應具有 Kube DNS 名稱的 CN。這是從 Kubernetes 服務派生出來的,形式為 <服務名稱>.<服務名稱名稱空間>.svc
  6. 在你的名稱空間中建立一個包含伺服器證書/金鑰的 Kubernetes Secret。
  7. 為擴充套件 API 伺服器建立一個 Kubernetes Deployment,並確保將 Secret 作為卷載入。它應該包含對你的擴充套件 API 伺服器工作映象的引用。Deployment 也應該在你的名稱空間中。
  8. 確保你的擴充套件 API 伺服器從該卷載入這些證書,並在 HTTPS 握手中使用它們。
  9. 在你的名稱空間中建立一個 Kubernetes 服務賬號。
  10. 為你想在資源上允許的操作建立一個 Kubernetes ClusterRole。
  11. 從你的名稱空間中的服務賬號到你建立的 ClusterRole 建立一個 Kubernetes ClusterRoleBinding。
  12. 從你的名稱空間中的服務賬號到 system:auth-delegator ClusterRole 建立一個 Kubernetes ClusterRoleBinding,以將授權決策委託給 Kubernetes 核心 API 伺服器。
  13. 從你的名稱空間中的服務賬號到 extension-apiserver-authentication-reader Role 建立一個 Kubernetes RoleBinding。這允許你的擴充套件 API 伺服器訪問 extension-apiserver-authentication ConfigMap。
  14. 建立一個 Kubernetes APIService。上述 CA 證書應經過 Base64 編碼,去除換行符,並用作 APIService 的 spec.caBundle。它不應該有名稱空間。如果使用 kube-aggregator API,只需傳入 PEM 編碼的 CA 束,因為 Base64 編碼已為你完成。
  15. 使用 kubectl 獲取你的資源。執行時,kubectl 應該返回“No resources found.”。此訊息表示一切正常,但你目前沒有建立該資源型別的物件。

下一步

上次修改時間:2022 年 7 月 21 日下午 1:41 PST:根據需要將“setup”的名詞形式修正為動詞形式“set up”(d6a1ba2a6d)