需要进行身份认证 docker login 这个登录过程会创建或更新一个config.json文件来维护一个授权toke
当我们测验考试从私有货仓中拉取镜像时,可能会收到这样提示: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/dockerconfigjson
3. 通过在命令行中供给根据来创建一个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.yaml kubectl get pod private-reg
6. 文档
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
Kubernetes从私有镜像货仓中拉取镜像
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32634.html