設定擴充套件 API 伺服器
設定擴充套件 API 伺服器與聚合層協同工作,可以擴充套件 Kubernetes API 伺服器,新增不屬於核心 Kubernetes API 的額外 API。
準備工作
你需要有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在至少有兩個不是控制平面主機的節點上執行此教程。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用以下 Kubernetes 演練場之一。
要檢查版本,請輸入 kubectl version
。
- 你必須配置聚合層並啟用 apiserver 標誌。
設定擴充套件 API 伺服器以與聚合層協同工作
以下步驟概述瞭如何**高層次**地設定擴充套件 API 伺服器。這些步驟適用於無論是使用 YAML 配置還是使用 API。我們嘗試明確識別兩者之間的任何差異。有關如何使用 YAML 配置實現它們的具體示例,你可以檢視 Kubernetes 倉庫中的 sample-apiserver。
或者,你可以使用現有的第三方解決方案,例如 apiserver-builder,它應該會為你生成一個骨架並自動化以下所有步驟。
- 確保 APIService API 已啟用(檢查
--runtime-config
)。預設情況下應該開啟,除非在你的叢集中已被有意關閉。 - 你可能需要建立一條 RBAC 規則以允許你新增 APIService 物件,或者讓你的叢集管理員來建立。 (由於 API 擴充套件會影響整個叢集,不建議在即時叢集中進行 API 擴充套件的測試/開發/除錯。)
- 建立你希望執行擴充套件 API 服務所用的 Kubernetes 名稱空間。
- 建立/獲取一個 CA 證書,用於簽署擴充套件 API 伺服器用於 HTTPS 的伺服器證書。
- 為 API 伺服器建立/獲取一個伺服器證書/金鑰以用於 HTTPS。此證書應由上述 CA 簽署。它還應具有 Kube DNS 名稱的 CN。這是從 Kubernetes 服務派生出來的,形式為
<服務名稱>.<服務名稱名稱空間>.svc
- 在你的名稱空間中建立一個包含伺服器證書/金鑰的 Kubernetes Secret。
- 為擴充套件 API 伺服器建立一個 Kubernetes Deployment,並確保將 Secret 作為卷載入。它應該包含對你的擴充套件 API 伺服器工作映象的引用。Deployment 也應該在你的名稱空間中。
- 確保你的擴充套件 API 伺服器從該卷載入這些證書,並在 HTTPS 握手中使用它們。
- 在你的名稱空間中建立一個 Kubernetes 服務賬號。
- 為你想在資源上允許的操作建立一個 Kubernetes ClusterRole。
- 從你的名稱空間中的服務賬號到你建立的 ClusterRole 建立一個 Kubernetes ClusterRoleBinding。
- 從你的名稱空間中的服務賬號到
system:auth-delegator
ClusterRole 建立一個 Kubernetes ClusterRoleBinding,以將授權決策委託給 Kubernetes 核心 API 伺服器。 - 從你的名稱空間中的服務賬號到
extension-apiserver-authentication-reader
Role 建立一個 Kubernetes RoleBinding。這允許你的擴充套件 API 伺服器訪問extension-apiserver-authentication
ConfigMap。 - 建立一個 Kubernetes APIService。上述 CA 證書應經過 Base64 編碼,去除換行符,並用作 APIService 的 spec.caBundle。它不應該有名稱空間。如果使用 kube-aggregator API,只需傳入 PEM 編碼的 CA 束,因為 Base64 編碼已為你完成。
- 使用 kubectl 獲取你的資源。執行時,kubectl 應該返回“No resources found.”。此訊息表示一切正常,但你目前沒有建立該資源型別的物件。
下一步
- 逐步完成配置 API 聚合層並啟用 apiserver 標誌的步驟。
- 有關高層次概述,請參見使用聚合層擴充套件 Kubernetes API。
- 瞭解如何使用 Custom Resource Definitions 擴充套件 Kubernetes API。
上次修改時間:2022 年 7 月 21 日下午 1:41 PST:根據需要將“setup”的名詞形式修正為動詞形式“set up”(d6a1ba2a6d)