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