Kubernetes 登錄檔與容器映像登錄檔
登錄檔是 Kubernetes secrets,包含用於對私有容器登錄檔進行身份驗證的憑證。
「登錄檔」一詞可能有兩種含義,取決於它是用於容器還是 Kubernetes 登錄檔:
- 容器映像登錄檔(以前稱為「Docker 登錄檔」)包含您可以拉取和部署的容器映像。登錄檔是一個無狀態、可擴展的伺服器端應用程式,用於儲存和分發容器映像。
- Kubernetes 登錄檔是您的部署用於對映像登錄檔進行身份驗證的映像拉取 secret。
部署使用 Kubernetes 登錄檔 secret 對私有映像登錄檔進行身份驗證,然後拉取託管在其上的容器映像。
目前,僅當工作負載在 Rancher UI 中建立時,部署才會自動拉取 私有登錄檔憑證,而不是透過 kubectl 建立時。
在命名空間中建立登錄檔
-
在左上角,點擊 ☰ > Cluster Management。
-
前往您想 要新增登錄檔的叢集,然後點擊 Explore。
-
在左側導航中,點擊 Storage > Secrets 或 More Resources > Core > Secrets。
-
點擊 Create。
-
點擊 Registry。
-
為登錄檔輸入 Name。
備註Kubernetes 將 secrets、憑證和登錄檔都歸類為 secrets,在專案或命名空間中不能有兩個同名的 secrets。因此,為了避免衝突,您的登錄檔在工作區內的所有 secrets 中必須具有唯一的名稱。
-
為登錄檔選擇命名空間。
-
選擇託管您私有登錄檔的網站。然後輸入對登錄檔進行身份驗證的憑證。例如,如果您使用 Docker Hub,請提供您的 Docker Hub 使用者名稱和密碼。
-
點擊 Save。
結果:
- 您的 secret 已新增到您選擇的命名 空間。
- 您可以在 Rancher UI 中透過點擊 Storage > Secrets 或 More Resources > Core > Secrets 來查看 secret。
- 如果工作負載在登錄檔的範圍內,您在 Rancher UI 中建立的任何工作負載都將有憑證存取登錄檔。
在專案中建立登錄檔
在 v2.6 之前,secrets 需要在專案範圍內。專案不再是必需的,您可以改用命名空間範圍。因此,Rancher UI 已更新以反映此新功能。但是,如果需要,您仍然可以建立專案範圍的登錄檔。使用以下步驟執行此操作:
-
在左上角,在下拉選單中點擊 ☰ > Global Settings。
-
點擊 Feature Flags。
-
前往
legacy功能標誌,然後點擊 Activate。 -
在左上角,點擊 ☰ > Cluster Management。
-
前往您想要新增登錄檔的叢集,然後點擊 Explore。
-
在左側導航中,點擊 Storage > Secrets 或 More Resources > Core > Secrets。
-
點擊 Create。
-
點擊 Registry。
-
在頂部導航列中,篩選以僅查看一個專案。
-
為登錄檔輸入 Name。
備註Kubernetes 將 secrets、憑證和登錄檔都歸類為 secrets,在專案或命名空間中不能有兩個同名的 secrets。因此,為了避免衝突,您的登錄檔在工作區內的所有 secrets 中必須具有唯一的名稱。
-
為登錄檔選擇命名空間。
-
選擇託管您私有登錄檔的網站。然後輸入對登錄檔進行身份驗證的憑證。例如,如果您使用 Docker Hub,請提供您的 Docker Hub 使用者名稱和密碼。
-
點擊 Save。
結果:
- 您的 secret 已新增到您選擇的個別專案。
- 您可以在 Rancher UI 中透過點擊 Storage > Secrets 或 More Resources > Core > Secrets 來查看 secret。
- 如果工作負載在登錄檔的範圍內,您在 Rancher UI 中建立的任何工作負載都將有憑證存取登錄檔。
只有在選擇單一專案時,本機叢集上的專案範圍登錄檔才可見。
使用私有登錄檔
您可以透過 Rancher UI 或使用 kubectl 部署來自私有登錄檔的映像的工作負載。
使用 Rancher UI 使用私有登錄檔
要部署來自私有登錄檔的映像的工作負載:
- 在左上角,點擊 ☰ > Cluster Management。
- 前往您想要部署工作負載的叢集,然後點擊 Explore。
- 點擊 Workload。
- 點擊 Create。
- 選擇您想要建立的工作負載類型。
- 為工作負載輸入唯一名稱並選擇命名空間。
- 在 Container Image 欄位中,輸入私有登錄檔中映像路徑的 URL。例如,如果您的私有登錄檔在 Quay.io 上,您可以使用
quay.io/<Quay profile name>/<Image name>。 - 點擊 Create。
結果: 您的部署應該啟動,使用您在 Rancher UI 中新增的私有登錄檔憑證進行身份驗證,並拉取您指定的容器映像。
使用 kubectl 使用私有登錄檔
使用 kubectl 建立工作負載時,您需要配置 pod,使其 YAML 具有私有登錄檔中映像的路徑。您還必須建立並引用登錄檔 secret,因為只有在 Rancher UI 中建立 pod 時,pod 才會自動取得私有登錄檔憑證的存取權。
secret 必須在部署工作負載的同一命名空間中建立。
以下是使用來自私有登錄檔的映像的工作負載的 pod.yml 範例。在此範例中,pod 使用來自 Quay.io 的映像,.yml 指定映像的路徑。pod 使用儲存在名為 testquay 的 Kubernetes secret 中的憑證對登錄檔進行身份驗證,該憑證在 spec.imagePullSecrets 的 name 欄位中指定:
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: quay.io/<Quay profile name>/<image name>
imagePullSecrets:
- name: testquay
在此範例中,名為 testquay 的 secret 位於 default 命名空間中。
您可以使用 kubectl 建立包含私有登錄檔憑證的 secret。此命令建立名為 testquay 的 secret:
kubectl create secret docker-registry testquay \
--docker-server=quay.io \
--docker-username=<Profile name> \
--docker-password=<password>
要查看 secret 在 Kubernetes 中的儲存方式,您可以使用此命令:
kubectl get secret testquay --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
結果如下所示:
{"auths":{"quay.io":{"username":"<Profile name>","password":"<password>","auth":"c291bXlhbGo6dGVzdGFiYzEyMw=="}}}
部署工作負載後,您可以檢查映像是否成功拉取:
kubectl get events
結果應該如下所示:
14s Normal Scheduled Pod Successfully assigned default/private-reg2 to minikube
11s Normal Pulling Pod pulling image "quay.io/<Profile name>/<image name>"
10s Normal Pulled Pod Successfully pulled image "quay.io/<Profile name>/<image name>"
有關更多資訊,請參閱 Kubernetes 文件中關於建立使用您的 secret 的 pod。