您好,登錄后才能下訂單哦!
1、登錄Docker
通過注冊表進行身份驗證才能提取私有映像:
docker login? registry.hello.com
出現提示時,輸入您的Docker用戶名和密碼。登錄過程將創建或更新config.json包含授權令牌的文件。
查看config.json文件:
cat ~/.docker/config.json
{
?????? "auths": {
? ????????????? "registry.hello.com": {
???????????? ?????????? "auth": "YWRtaW46YWRtaW4xMjM="
??????????????? }
??????? },
??????? "HttpHeaders": {
??????????????? "User-Agent": "Docker-Client/18.09.0 (linux)"
??????? }
}
2、根據現有Docker憑證創建密鑰
Kubernetes集群使用Secret docker-registry類型的密鑰通過容器注冊表進行身份驗證以提取私有映像。如果您已經運行過docker login,則可以將該憑證復制到Kubernetes中:
kubectl create secret generic harbor \??? #命名為harbor
??? --from-file=.dockerconfigjson=/root/.docker/config.json \
?? --type=kubernetes.io/dockerconfigjson
如果您需要更多控制權(例如,在新密鑰上設置名稱空間或標簽),則可以在存儲密鑰之前自定義密鑰。
務必:
??? 將數據項的名稱設置為 .dockerconfigjson
??? base64對docker文件進行編碼并粘貼該字符串,將其作為字段的值不間斷 data[".dockerconfigjson"]
設置type為kubernetes.io/dockerconfigjson
apiVersion:?v1 data: ??.dockerconfigjson:?eyJhdXRocyI6eyJyZWdpc3RyeS5jbi1oYW5nemhvdS5hbGl5dW5jcy5jb20iOnsicGFzc3dvcmQiOiJFY29uYWdlQGs4cyIsInVzZXJuYW1lIjoiazhzQGVjb25hZ2UifX19 kind:?Secret metadata: ??name:?harbor ??namespace:?default type:?kubernetes.io/dockerconfigjson
如果收到錯誤消息 `error: no objects passed to create`,這可能意味著 base64 編碼的字符串無效。如果您收到的錯誤類似 `Secret "myregistrykey" is invalid: data[.dockerconfigjson]: invalid value ...`,這意
味著數據已成功地編碼為 un-base64,但無法解析為一個 `.docker/config.json` 文件。
3、在 pod 上引用 imagePullSecrets
imagePullSecrets:
name: harbor
4、使用 Docker 配置創建一個 Secret
kubectl?create?secret?docker-registry?myregistrykey?\ --docker-server=registry.hello.com?--docker-username=admin?\ --docker-password=admin123
Pod 只能引用它們自己命名空間中的鏡像拉取 secret,因此,每個命名空間都需要完成一次此過程
5、應用場景
有許多配置私有倉庫的解決方案。以下是一些常見的用例和建議的解決方案。
??? 1.集群只運行非專有(例如,開放源碼)鏡像。不需要隱藏鏡像。在 Docker hub 上使用公共鏡像
??? ??? ???? 不需要配置。
?? ??? ???? 在 GCE 或 GKE 上,自動使用本地鏡像來提高速度和可用性。
??? 2.集群運行一些私有鏡像,這些鏡像應該對公司以外用戶進行隱藏,但對所有集群用戶都是可見的。
??? ??? ???? 使用托管的 Docker 倉庫。它可能托管在 Docker Hub 上,或其它地方。像上面描述的那樣在每個節點上手動配置 .docker/config.json。
??? ??? ???? 或者,在防火墻后面運行內部私有倉庫,并打開讀取訪問權限。不需要 Kubernetes 配置。
??? ??? ???? 或者,在 GCE 或 GKE 上,使用項目的 Google 容器倉庫。與手動節點配置相比,集群自動伸縮會更好地工作。
??? ??? ???? 或者,在更改節點配置不方便的集群上,使用 imagePullSecrets。
??? 3.擁有專有鏡像的集群,其中一些需要更嚴格的訪問控制。
??? ??? ???? 確保 AlwaysPullImages 準入控制器 打開。否則,所有 pod 都可能訪問所有的鏡像。
??? ??? ???? 將敏感數據移動到 “Secret” 資源中,而不是將其打包到鏡像中。
??? 4.多租戶集群,每個租戶都需要自己的私有倉庫。
??? ??? ???? 確保 AlwaysPullImages 準入控制器 打開。否則,所有 pod 都可能訪問所有的鏡像。
??? ??? ???? 運行需要授權的私有倉庫。為每個租戶生成倉庫憑證,將其轉換為 secret,并將 secret 填充到每個租戶命名空間。
??? ??? ???? 租戶將該 secret 添加到每個命名空間的 imagePullSecrets 中。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。