kubernetes 拉取私有镜像 imagepullsecrets

docker 使用私有仓库

使用docker时,由于私有仓库很多时候没有搭建https的认证证书,访问时需要在本地docker的配置文件中加上允许对次镜像或者对所有镜像的http请求。

1
2
root@Core:~# cat /etc/docker/dameon.json 
{"insecure-registries": ["0.0.0.0/0"]}

DeepinScreenshot_select-area_20200523193555.png

然后使用docker login 登录的时候会发现,登录成功以后会在本地生~/.docker/config.json的配置文件。
DeepinScreenshot_select-area_20200523193918.png
该文件会存放登录过的用户的token以及登录仓库的地址

k8s使用私有仓库

虚假的使用方法

1
2
3
在k8s中,想要使用私有仓库而用以上方法是不现实的。如下
1.由于pod是漂移的,不知道下次pod会在哪个节点。
2.并且如果几个部门合作之类的,不止只有一个私有库,在k8s集群中将非常麻烦。

真实的使用方法

将刚刚生成的config.json变成configmap放置到k8s中

1
2
3
kubectl create secret generic harborsecret \
--from-file=.dockerconfigjson=/root/.docker/config.json \
--type=kubernetes.io/dockerconfigjson

查看一下
kubectl get secrets harborsecret
DeepinScreenshot_select-area_20200523222238.png

kubectl get secret harborsecret –output=yaml
DeepinScreenshot_select-area_20200523222224.png

在要部署的deployment中放入此镜像的configmap配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: istio-cosmo
name: cosmo-bff
spec:
selector:
matchLabels:
app: istio
template:
metadata:
labels:
app: nginx
spec:
imagePullSecrets:
- name: daocloud-registry
containers:
- name: nginx
image: registry.daocloud.cn/xxx/nginx:264
ports:
- containerPort: 8080
volumeMounts:
- name: cosmo-conf
mountPath: /work/config
volumes:
- name: cosmo-conf
configMap:
name: cosmo-conf

这样不管是哪台机器执行下载该镜像的任务都会调用这个config文件。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!