溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

k8s使用harbor私有倉庫

發(fā)布時(shí)間:2020-08-12 14:04:47 來源:網(wǎng)絡(luò) 閱讀:557 作者:羊皮裘老頭 欄目:云計(jì)算

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

k8s使用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 中。

向AI問一下細(xì)節(jié)

免責(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)容。

AI