當我們嘗試從私有倉庫中拉取鏡像時,可能會收到這樣提示:requested access to the resource is denied
Error response from daemon: pull access denied for xxx repository does not exist or may require 'docker login': denied: requested access to the resource is denied 這是由于訪問私有倉庫時是需要憑證的,接下來,一起看下如何用Secret創建一個Pod來從一個私有的Docker Registry 或 Repository 中 Pull 鏡像,
1. 登錄Docker
為了拉取一個私有鏡像,首先,需要進行身份認證
docker login 這個登錄程序會創建或更新一個config.json檔案來維護一個授權token
cat ~/.docker/config.json 輸出可能是這樣的:
{ "auths": { "https://index.docker.io/v1/": { "auth": "c3R...zE2" } }}如果你使用的是Docker憑證(憑據)存盤,那么將不會看到那個認證條目,而是看到一個以該存盤的名稱作為值的credsStore條目,
例如:

2. 基于已經存在的Docker憑據創建一個Secret
Kubernetes集群使用docker-registry型別的Secret來進行一個容器registry的認證,以獲取一個私有鏡像,
如果你已經執行了docker login,那么你可以把這個憑證復制到Kubernetes
kubectl create secret generic regcred \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson3. 通過在命令列中提供憑據來創建一個Secret
創建一個Secret,并將其命名為myregcred
kubectl create secret docker-registry myregcred \ --docker-server=<your-registry-server> \ --docker-username=<your-name> \ --docker-password=<your-password> \ --docker-email=<your-email> 在這里:
- <your-registry-server> is your Private Docker Registry FQDN. (https://index.docker.io/v1/ for DockerHub)
- <your-name> is your Docker username.
- <your-pword> is your Docker password.
- <your-email> is your Docker email.
不出意外的話,你已經成功的再集群中設定了你的Docker憑據作為一個Secret,名字叫myregcred
4. 查看Secret
kubectl get secret myregcred --output=yaml
.dockerconfigjson 欄位的值是一個經過base64編碼后的你的Docker憑據
為了更好地理解.dockerconfigjson 欄位,我們將它格式化一下:
kubectl get secret myregcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode 輸出可能是這樣的:
{"auths":{"your.private.registry.example.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"[email protected]","auth":"Y2hlb...29tOmt"}}} 為了更好地理解上面輸出的auth欄位,我們可以這樣:
echo "Y2hlb...29tOmt" | base64 --decode 輸出的字串格式為 username:password,例如:
janedoe:1234不難看出,Secret資料中包含的授權token字串與~/.docker/config.json檔案中的相似
5. 用你的Secret創建一個Pod
下面是一個Pod的組態檔private-reg-pod.yaml ,這個Pod將要使用你的Docker憑據myregcred
apiVersion: v1 kind: Pod metadata: name: private-reg spec: containers: - name: private-reg-container image: <your-private-image> imagePullSecrets: - name: myregcred將檔案my-private-reg-pod.yaml中的<your-private-image>替換成你自己的私有registry,例如:
your.private.registry.example.com/janedoe/jdoe-private:v1為了從registry中拉取鏡像,Kubernetes需要憑證,組態檔中的imagePullSecrets欄位指明Kubernetes應該從名為myregcred的Secret中獲取憑證,
用你的Secret創建一個Pod,并驗證它
kubectl apply -f my-private-reg-pod.yamlkubectl get pod private-reg6. 檔案
https://kubernetes.io/docs/concepts/containers/images/#using-a-private-registry
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/5481.html
標籤:其他
下一篇:軟體研發流程
