W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
本文介紹如何使用 Secret 從私有的鏡像倉庫或代碼倉庫拉取鏡像來創(chuàng)建 Pod。 有很多私有鏡像倉庫正在使用中。這個任務使用的鏡像倉庫是 Docker Hub
docker
?命令行工具和一個知道密碼的 Docker ID。在個人電腦上,要想拉取私有鏡像必須在鏡像倉庫上進行身份驗證。
docker login
當出現(xiàn)提示時,輸入你的 Docker ID 和登錄憑證(訪問令牌、 或 Docker ID 的密碼)。
登錄過程會創(chuàng)建或更新保存有授權令牌的 ?config.json
? 文件。
查看 ?config.json
? 文件:
cat ~/.docker/config.json
輸出結果包含類似于以下內(nèi)容的部分:
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "c3R...zE2"
}
}
}
Note: 如果使用 Docker 憑證倉庫,則不會看到 ?
auth
?條目,看到的將是以倉庫名稱作為值的 ?credsStore
?條目。
Kubernetes 集群使用 ?kubernetes.io/dockerconfigjson
? 類型的 Secret 來通過鏡像倉庫的身份驗證,進而提取私有鏡像。
如果你已經(jīng)運行了 ?docker login
? 命令,你可以復制該鏡像倉庫的憑證到 Kubernetes:
kubectl create secret generic regcred \
--from-file=.dockerconfigjson=<path/to/.docker/config.json> \
--type=kubernetes.io/dockerconfigjson
如果你需要更多的設置(例如,為新 Secret 設置名字空間或標簽), 則可以在存儲 Secret 之前對它進行自定義。 請務必:
.dockerconfigjson
?data[".dockerconfigjson"]
? 的值
type
?設置為 ?kubernetes.io/dockerconfigjson
?示例:
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
namespace: awesomeapps
data:
.dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson
如果你收到錯誤消息:?error: no objects passed to create
?, 這可能意味著 base64 編碼的字符串是無效的。 如果你收到類似 ?Secret "myregistrykey" is invalid: data[.dockerconfigjson]: invalid value ...
? 的錯誤消息,則表示數(shù)據(jù)中的 base64 編碼字符串已成功解碼,但無法解析為 ?.docker/config.json
? 文件。
創(chuàng)建 Secret,命名為 ?regcred
?:
kubectl create secret docker-registry regcred \
--docker-server=<你的鏡像倉庫服務器> \
--docker-username=<你的用戶名> \
--docker-password=<你的密碼> \
--docker-email=<你的郵箱地址>
在這里:
<your-registry-server>
? 是你的私有 Docker 倉庫全限定域名(FQDN)。 DockerHub 使用 ?https://index.docker.io/v1/
?。
<your-name>
?是你的 Docker 用戶名。
<your-pword>
?是你的 Docker 密碼。
<your-email>
? 是你的 Docker 郵箱。這樣你就成功地將集群中的 Docker 憑證設置為名為 ?regcred
?的 Secret。
Note: 在命令行上鍵入 Secret 可能會將它們存儲在你的 shell 歷史記錄中而不受保護, 并且這些 Secret 信息也可能在 ?
kubectl
?運行期間對你 PC 上的其他用戶可見。
要了解你創(chuàng)建的 ?regcred
?Secret 的內(nèi)容,可以用 YAML 格式進行查看:
kubectl get secret regcred --output=yaml
輸出和下面類似:
apiVersion: v1
data:
.dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
kind: Secret
metadata:
...
name: regcred
...
type: kubernetes.io/dockerconfigjson
?.dockerconfigjson
? 字段的值是 Docker 憑證的 base64 表示。
要了解 ?dockerconfigjson
?字段中的內(nèi)容,請將 Secret 數(shù)據(jù)轉(zhuǎn)換為可讀格式:
kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
輸出和下面類似:
{"auths":{"yourprivateregistry.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"jdoe@example.com","auth":"c3R...zE2"}}}
要了解 ?auth
?字段中的內(nèi)容,請將 base64 編碼過的數(shù)據(jù)轉(zhuǎn)換為可讀格式:
echo "c3R...zE2" | base64 --decode
輸出結果中,用戶名和密碼用 ?:
? 鏈接,類似下面這樣:
janedoe:xxxxxxxxxxx
注意,Secret 數(shù)據(jù)包含與本地 ?~/.docker/config.json
? 文件類似的授權令牌。
這樣你就已經(jīng)成功地將 Docker 憑證設置為集群中的名為 ?regcred
?的 Secret。
下面是一個 Pod 配置清單示例,該示例中 Pod 需要訪問你的 Docker 憑證 ?regcred
?:
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: <your-private-image>
imagePullSecrets:
- name: regcred
將上述文件下載到你的計算機中:
curl -L -O my-private-reg-pod.yaml https://k8s.io/examples/pods/private-reg-pod.yaml
在?my-private-reg-pod.yaml
? 文件中,使用私有倉庫的鏡像路徑替換 ?<your-private-image>
?,例如:
janedoe/jdoe-private:v1
要從私有倉庫拉取鏡像,Kubernetes 需要憑證。 配置文件中的 ?imagePullSecrets
?字段表明 Kubernetes 應該通過名為 ?regcred
?的 Secret 獲取憑證。
創(chuàng)建使用了你的 Secret 的 Pod,并檢查它是否正常運行:
kubectl apply -f my-private-reg-pod.yaml
kubectl get pod private-reg
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: