K8S学习笔记(3)-从私有仓库拉取镜像
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://vearne.cc
1. 前言
警告:本文仅用于萌叔自己总结之用,对其它人而言可能毫无营养,没有阅读价值。
在k8s中要使用自己搭建的私有仓库,还需要一些额外的配置。
萌叔使用的harbor搭建的私有仓库 goharbor/harbor, 假定地址为
https://docker-harbor.vearne.cc
2. 配置过程
要能够成功拉去image,需要解决2个问题
2.1 TLS证书验证
由于我们的私有仓库,使用的自签名的证书,所以需要能够通过TLS的握手阶段对证书。
如果证书认证失败,你可能收到如下错误
[root@xx ~]# docker pull docker-harbor.vearne.cc/ut/helloworld:0.2.6
Error response from daemon: Get https://docker-harbor.vearne.cc/ut/helloworld:0.2.6: x509: certificate signed by unknown authority
一种做法是直接添加CA根证书到操作系统获得信任。但是萌叔尝试后,发现无效。
这里验证有效的做法是,使用dockerd的--insecure-registry
参数
2.1.1 修改dockerd的配置文件
默认路径为/etc/docker/daemon.json
{
"insecure-registries" : ["docker-harbor.vearne.cc"]
}
2.1.2 重启dockerd
systemctl restart docker
2.2 登录
要想在宿主机拉取镜像,可以用
docker login docker-harbor.vearne.cc
在k8s集群中拉取镜像可以使用
kubectl create secret docker-registry regcred \
--docker-server=<你的镜像仓库服务器> \
--docker-username=<你的用户名> \
--docker-password=<你的密码> \
--docker-email=<你的邮箱地址>
创建一个密钥,用于拉取镜像
检查 Secret regcred
kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
输出和下面类似:
{"auths":{"yourprivateregistry.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"jdoe@example.com","auth":"c3R...zE2"}}}
读者应该已经发现用户名和密码只是简单的用base64编码以后保存成字符串文本。实际上docker client和harbor的交互用的就是使用Basic Auth
进行鉴权。
2.3 创建使用你的 Secret 的 Pod
注意: Secret
regcred所在的Namespace
要和Pod
所在的Namespace
保持一致
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: docker-harbor.vearne.cc/ut/helloworld:0.2.6
imagePullPolicy: IfNotPresent
imagePullSecrets:
- name: regcred
3. 总结
经过上面的操作,就可以方便的从私有仓库拉取image了。