這篇文章為大家?guī)碛嘘PKubernetes Apiserver和Extension apiserver的介紹。大部分知識點都是大家經常用到的,為此分享給大家做個參考。一起跟隨小編過來看看吧。
旬陽網站建設公司成都創(chuàng)新互聯(lián),旬陽網站設計制作,有大型網站制作公司豐富經驗。已為旬陽上千家提供企業(yè)網站建設服務。企業(yè)網站搭建\成都外貿網站建設公司要多少錢,請找那個售后服務好的旬陽做網站的公司定做!
Aggregated(聚合的)API server
是為了將原來的 API server 這個巨石(monolithic)應用給拆分開,為了方便用戶開發(fā)自己的 API server 集成進來,而不用直接修改 Kubernetes 官方倉庫的代碼,這樣一來也能將 API server 解耦,方便用戶使用實驗特性。這些 API server 可以跟 core API server
無縫銜接,使用 kubectl 也可以管理它們。
在 1.7+
版本中,聚合層和 kube-apiserver 一起運行。在擴展資源被注冊前,聚合層不執(zhí)行任何操,要注冊其 API,用戶必需添加一個 APIService
對象,該對象需在 Kubernetes API 中聲明 URL 路徑,聚合層將發(fā)送到該 API 路徑(e.g. /apis/myextension.mycompany.io/v1/…)的所有對象代理到注冊的 APIService。
通常,通過在集群中的一個 Pod 中運行一個 extension-apiserver
來實現(xiàn) APIService。如果已添加的資源需要主動管理,這個 extension-apiserver 通常需要和一個或多個控制器配對。
Aggregator for Kubernetes-style API servers: dynamic registration, discovery summarization, secure proxy
與自定義資源定義(CRD)不同,除標準的 Kubernetes apiserver 外,Aggregation API 還涉及另一個服務器:Extension apiserver
。Kubernetes apiserver 將需要與您的 Extension apiserver 通信,并且您的 Extension apiserver 也需要與 Kubernetes apiserver 通信。為了確保此通信的安全,Kubernetes apiserver 使用 x509 證書向 Extension apiserver 認證。
假設我們已經在 Kubernetes apiserver 注冊了 Extension apiserver。
當用戶請求訪問 path ,Kubernetes apiserver 使用它的標準認證和授權配置來對用戶認證,以及對特定 path 的鑒權,到目前為止,所有內容都是標準的 Kubernetes API 請求,認證與鑒權,接下來 Kubernetes apiserver 現(xiàn)在準備將請求發(fā)送到 Extension apiserver。
Kubernetes apiserver 現(xiàn)在將請求發(fā)送或代理到注冊以處理該請求的 Extension apiserver。為此,它需要了解幾件事:
簡而言之,就是 Kubernetes apiserver 已經認證和鑒權用戶的請求,怎么這這些信息傳遞給 Extension apiserver,為提供這兩條信息,我們必須使用若干標志來配置 Kubernetes apiserver。
Kubernetes apiserver 通過 TLS 連接到 Extension apiserver,并使用客戶端證書認證,這里 Kubernetes apiserver (aggregator or proxy) 是 Extension apiserver 的客戶端。必須在啟動時使用提供的標志向 Kubernetes apiserver 提供以下內容:
--proxy-client-key-file
指定私鑰文件--proxy-client-cert-file
簽名的客戶端證書文件--requestheader-client-ca-file
簽署客戶端證書文件的 CA 證書--requestheader-allowed-names
在簽署的客戶證書中有效的公用名(CN)Kubernetes apiserver 將使用由 –proxy-client-*-file
指示的文件來通過 Extension apiserver 驗證。為了使合規(guī)的 Extension apiserver 能夠將該請求視為有效,必須滿足以下條件:
--requestheader-client-ca-file
中。--requestheader-allowed-names
中列出的證書之一。 注意:您可以將此選項設置為空白,即為--requestheader-allowed-names=""
。這將向擴展 apiserver 指示任何 CN 是可接受的。使用這些選項啟動時,Kubernetes apiserver 將:
kube-system
命名空間中創(chuàng)建一個 configmap extension-apiserver-authentication
,它將在其中放置 CA 證書和允許的 CN。反過來,Extension apiserver 可以檢索這些內容以驗證請求。當 Kubernetes apiserver 將請求代理到 Extension apiserver 時,它將向 Extension apiserver 通知原始請求已成功通過其驗證的用戶名和組。它在其代理請求的 http 標頭中提供這些。您必須將要使用的標頭名稱告知 Kubernetes apiserver。
--requestheader-username-headers
標明用來保存用戶名的頭部--requestheader-group-headers
標明用來保存 group 的頭部--requestheader-extra-headers-prefix
標明用來保存拓展信息前綴的頭部這些標頭名稱也放置在extension-apiserver-authentication
的 configmap 中,因此 Extension apiserver 可以檢索和使用它們。
Extension apiserver 在收到來自 Kubernetes apiserver 的代理請求后,必須驗證該請求確實確實來自有效的身份驗證代理,該認證代理由 Kubernetes apiserver 履行。Extension apiserver 通過以下方式對其認證:
kube-system
中的 configmap 中檢索以下內容:--requestheader-client-ca-file
。--requestheader-allowed-names
。如果以上均通過,則該請求是來自合法認證代理(在本例中為 Kubernetes apiserver)的有效代理請求。
為了具有檢索 configmap 的權限,Extension apiserver 需要適當的角色。在 kube-system
名字空間中有一個默認角色extension-apiserver-authentication-reader
可用于設置。
Extension apiserver 現(xiàn)在可以驗證從標頭檢索的user/group
是否有權執(zhí)行給定請求。通過向 Kubernetes apiserver 發(fā)送標準 SubjectAcce***eview 請求來實現(xiàn)。
SubjectAcce***eview
是 authorization.k8s.io
API 組的一部分資源,它將 API 服務器授權公開給外部服務。該 API 組中的其他資源可以通過如下命令查看:
kubectl get --raw /apis/authorization.k8s.io/v1/
為了使 Extension apiserver 本身被鑒權可以向 Kubernetes apiserver 提交 SubjectAcce***eview 請求,它需要正確的權限。Kubernetes 包含一個具有相應權限的名為system:auth-delegator
的默認 ClusterRole
,可以將其授予 Extension apiserver 的服務帳戶。
如果SubjectAcce***eview
通過,則擴展 apiserver 執(zhí)行請求。
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/local/bin/cfssl
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/local/bin/cfssljson
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/local/bin/cfssl-certinfo
cd /usr/local/bin/
chmod +x cfssl cfssljson cfssl-certinfo
$ cat > aggregator-ca-config.json <
profiles
: 可以定義多個 profiles,分別指定不同的過期時間、使用場景等參數;后續(xù)在簽名證書時使用某個 profile。signing
:表示該證書可用于簽名其它證書;生成的 aggregator-ca.pem 證書中 CA=TRUE
。server auth
:表示 Client 可以用該 CA 對 Server 提供的證書進行驗證。client auth
:表示 Server 可以用該 CA 對 Client 提供的證書進行驗證。$ cat > aggregator-ca-csr.json <
Common Name
,kube-apiserver 從證書中提取該字段作為請求的用戶名 (User Name);瀏覽器使用該字段驗證網站是否合法。Organization
,kube-apiserver 從證書中提取該字段作為請求用戶所屬的組 (Group);cfssl gencert -initca aggregator-ca-csr.json | cfssljson -bare aggregator-ca
$ cat > aggregator-csr.json <
如果 hosts 字段不為空則需要指定授權使用該證書的 IP 或域名列表,由于該證書后續(xù)kubernetes master 集群使用,所以上面指定kubernetes master
集群的主機 IP 和 kubernetes 服務的服務 IP(一般是 kube-apiserver 指定的 service-cluster-ip-range
網段的第一個 IP,如 10.96.0.1)。
cfssl gencert -ca=aggregator-ca.pem -ca-key=aggregator-ca-key.pem -config=aggregator-ca-config.json -profile=aggregator aggregator-csr.json | cfssljson -bare aggregator
將生成的證書和秘鑰文件(后綴名為.pem)拷貝到 Master 節(jié)點的 /etc/kubernetes/pki
目錄下備用。
kube-apiserver
增加以下配置:
--requestheader-client-ca-file=/etc/kubernetes/pki/aggregator-ca.pem
--requestheader-allowed-names=aggregator
--requestheader-extra-headers-prefix=X-Remote-Extra-
--requestheader-group-headers=X-Remote-Group
--requestheader-username-headers=X-Remote-User
--proxy-client-cert-file=/etc/kubernetes/pki/aggregator.pem
--proxy-client-key-file=/etc/kubernetes/pki/aggregator-key.pem
前面創(chuàng)建的證書的
CN
字段的值必須和參數–requestheader-allowed-names
指定的值aggregator
相同。
重啟 kube-apiserver:
$ systemctl daemon-reload
$ systemctl restart kube-apiserver
如果 kube-proxy
沒有在 Master 上面運行,kube-proxy
還需要添加配置:
--enable-aggregator-routing=true
以上就是Kubernetes Apiserver和Extension apiserver的知識匯總,內容較為全面,小編相信有部分知識點可能是我們日常工作可能會見到或用到的。希望你能通過這篇文章學到更多知識。