kubernetes设置私有仓库

当我们尝试从私有仓库中拉取镜像时,可能会收到这样提示:requested access to the resource is denied

这是由于访问私有仓库时是需要凭证的。接下来,一起看下如何用Secret创建一个Pod来从一个私有的Docker RegistryRepository 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
# 将下面的dockerconfigjson的路径换成自己的
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已经运行成功了。


kubernetes设置私有仓库
https://randzz.cn/d494f5fa3527/kubernetes设置私有仓库/
作者
Ezreal Rao
发布于
2020年6月10日
许可协议