Kubernetes从私有镜像仓库中拉取镜像
2021-05-03 14:29
标签:user 数据 过程 pre col 登录 类型 use Once 当我们尝试从私有仓库中拉取镜像时,可能会收到这样提示:requested access to the resource is denied 这是由于访问私有仓库时是需要凭证的。接下来,一起看下如何用Secret创建一个Pod来从一个私有的Docker Registry 或 Repository 中 Pull 镜像。 1. 登录Docker 为了拉取一个私有镜像,首先,需要进行身份认证 这个登录过程会创建或更新一个config.json文件来维护一个授权token 输出可能是这样的: 如果你使用的是Docker凭证(凭据)存储,那么将不会看到那个认证条目,而是看到一个以该存储的名称作为值的credsStore条目。 例如: 2. 基于已经存在的Docker凭据创建一个Secret Kubernetes集群使用docker-registry类型的Secret来进行一个容器registry的认证,以获取一个私有镜像。 如果你已经执行了docker login,那么你可以把这个凭证复制到Kubernetes 3. 通过在命令行中提供凭据来创建一个Secret 创建一个Secret,并将其命名为myregcred 在这里: 不出意外的话,你已经成功的再集群中设置了你的Docker凭据作为一个Secret,名字叫myregcred 4. 查看Secret .dockerconfigjson 字段的值是一个经过base64编码后的你的Docker凭据 为了更好地理解.dockerconfigjson 字段,我们将它格式化一下: 输出可能是这样的: 为了更好地理解上面输出的auth字段,我们可以这样: 输出的字符串格式为 username:password,例如: 不难看出,Secret数据中包含的授权token字符串与~/.docker/config.json文件中的相似 5. 用你的Secret创建一个Pod 下面是一个Pod的配置文件private-reg-pod.yaml ,这个Pod将要使用你的Docker凭据myregcred 将文件my-private-reg-pod.yaml中的 为了从registry中拉取镜像,Kubernetes需要凭证。配置文件中的imagePullSecrets字段指明Kubernetes应该从名为myregcred的Secret中获取凭证。 用你的Secret创建一个Pod,并验证它 6. 文档 https://kubernetes.io/docs/concepts/containers/images/#using-a-private-registry https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ Kubernetes从私有镜像仓库中拉取镜像 标签:user 数据 过程 pre col 登录 类型 use Once 原文地址:https://www.cnblogs.com/cjsblog/p/12115299.htmlError 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
docker login
cat ~/.docker/config.json
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "c3R...zE2"
}
}
}
kubectl create secret generic regcred \
--from-file=.dockerconfigjson=
kubectl create secret docker-registry myregcred \
--docker-server=
kubectl get secret myregcred --output=yaml
kubectl get secret myregcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
{"auths":{"your.private.registry.example.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"jdoe@example.com","auth":"Y2hlb...29tOmt"}}}
echo "Y2hlb...29tOmt" | base64 --decode
janedoe:1234
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image:
your.private.registry.example.com/janedoe/jdoe-private:v1
kubectl apply -f my-private-reg-pod.yaml
kubectl get pod private-reg