当我们尝试从私有仓库中拉取镜像时,可能会收到这样提示:requested access to the resource is denied
这是由于访问私有仓库时是需要凭证的。接下来,一起看下如何用Secret
创建一个Pod
来从一个私有的Docker Registry
或 Repository
中 Pull
镜像。
登录docker
我这边使用的是阿里云的镜像仓库服务。
sudo docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com
这时候会生成或者更新一个config.json
文件,一般是在用户目录下面。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $ cat ~/.docker/config.json
{ "auths": { "registry.cn-beijing.aliyuncs.com": { "auth": "xxxxxxxxxxx" }, "registry.cn-hangzhou.aliyuncs.com": { "auth": "xxxxxxxxxx" } }, "HttpHeaders": { "User-Agent": "Docker-Client/19.03.9 (linux)" } }
|
复制凭证
Kubernetes
集群使用docker-registry
类型的Secret
来进行一个容器registry
的认证,以获取一个私有镜像。
如果你已经执行了docker login
,那么你可以把这个凭证复制到Kubernetes
1 2 3 4
| kubectl create secret generic regcred \ --from-file=.dockerconfigjson=/root/.docker/config.json \ --type=kubernetes.io/dockerconfigjson
|
创建Secret
创建一个Secret
,并将其命名为dockerregcred
1 2 3 4 5 6
| kubectl create secret docker-registry dockerregcred \ --docker-server=<your-registry-server> \ --docker-username=<your-name> \ --docker-password=<your-password> \ --docker-email=<your-email>
|
查看Secret
1 2 3 4 5
| $ kubectl get secrets NAME TYPE DATA AGE default-token-rt8cd kubernetes.io/service-account-token 3 11d dockerregcred kubernetes.io/dockerconfigjson 1 21m regcred kubernetes.io/dockerconfigjson 1 25m
|
发现已经创建成功了。
使用Secret
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| apiVersion: v1 kind: Pod metadata: name: my-app namespace: default labels: app: myapp version: v1 spec: containers: - name: app image: registry.cn-hangzhou.aliyuncs.com/ezreal/nginx:v1 imagePullSecrets: - name: dockerregcred
|
上面的imagePullSecret
就是创建的Secret
然后kubectl apply -f pod.yaml
查看Pod
已经运行成功了。