Kubernetes如何使用Harbor作为私有镜像仓库
2017-03-01 19:59
531 查看
文中创建serviceAccount的截图有错,阅读时注意
概述
Harbor使用了基于角色的访问控制策略,当从Harbor中拉去镜像的时候,首先要进行身份认证,认证通过后才可以拉取镜像。在命令行模式下,需要先执行docker login,登陆成功后,才可以dockerpull。通常情况下,在私有云环境中使用kubernetes时,我们要从docker registry拉取镜像的时候,都会给docker daemo配置
--insecure-registry属性来告诉docker
daemo我们所使用的docker registry是可信的,这样才能从私有的docker registry中拉取镜像,但是如果要使用Harbor作为kubernetes的镜像仓库的话,这种方式就不适用了,下面让我们看看如何来使用Harbor作为kubernetes的镜像仓库。
实现探索
我们在命令行方式下,输入docker login登陆成功后,会在/root/.docker/目前下生成一个config.json文件。打开后可以看到如下的内容:{
"auths": {
"reg.skycloud.com": {
"auth": "YWRtaW46cGFzc3dvcmQ="
}
}
}
这里的内容就是docker daemon用来与docker registry进行认证的,其中,
reg.skycloud.com是docker
registry server的地址,
auth部分是加密后的认证信息,格式为:
username:password,当输入命令docker
pull的时候,docker daemon会获取该文件中的信息,并将auth部分的信息携带在请求的头部向docker registry server发送请求,docker registry server对请求认证通过后,就可以开始拉取镜像了,这部分的交互细节请参阅《从源码看Docker
Registry v2中的Token认证实现机制》。那么如何使kubernetes通过docker registry的认证来获取镜像呢?通过翻阅kubernetes的相关文档,我们发现,kubernetes提供了2个对象:secret和serviceAccount,我们先来看下官方给出的定义:
- secret:是一个保存少量诸如密码,token等敏感数据的对象,采用secret方式保存可以获取更好的控制力和减少敏感数据意外暴露的风险。secret对象的用途有:作为文件挂载到容器中或者是在kubelet拉取镜像时使用。
- serviceAccount:为运行在pod中的进程提供身份信息。
看到了吗,kubernetes已经告诉了我们问题的答案。没错,使用secret和serviceAccount就可以实现kubernetes在创建pod的时候通过docker registry server的认证来拉取镜像。下面我们看下如何来使用这2个对象。
1. 创建secret:
有2种方式可以创建secret:
a. 使用命令行:
kubectl create secret docker-registry SECRET_NAME --namespace=NAME_SPACE \
--docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER \
--docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
其中,
docker-server为通过docker
login登陆时输入的地址
docker-username为登陆时的账号
docker-password为登陆时的密码
docker-email为注册的账号时的邮箱地址
创建成功后,我们看一下secret的内容:
图中data部分,dockerconfigjson为data的类型,后面的一长串即为进过base64加密的内容,通过解密后,你就会发现,里面的内容基本上就是/root/.docker/config.json中的内容。
b. 定义yaml文件:
其中的type必须是:kubernetes.io/dockerconfigjson
2. 创建serviceAccount
k8s-serviceaccount.png
3.在pod中使用:
4、让Harbor为kubernetes提供镜像服务
首先在Harbor中创建创建用户,项目,将项目设置为私有,将创建的用户加入到项目中,设置用户的角色为开发者或者为项目管理员。确保该账户具有拉取该仓库镜像的权限。
其次,按照上述的方式创建secret和serviceAccount,其中secret中的用户名、密码和邮箱地址信息为在Harbor中创建的用户的信息。
这样配置后就可以让kubernetes从Harbor拉取镜像了。
总结
Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。原文地址:http://dockone.io/article/1737?utm_source=tuicool&utm_medium=referral
相关文章推荐
- Kubernetes如何使用nexus作为私有镜像仓库
- 使用 harbor 搭建 docker 私有镜像仓库
- kubernetes如何要使用用户名和密码登陆harbor以拉取docker镜像,应该如何操作?
- 走心的狗 kubernetes通过私有仓库harbor拉取镜像(private不是publi)
- 使用Harbor搭建Docker私有镜像仓库服务
- Harbor私有仓库中如何彻底删除镜像释放存储空间?
- 使用Harbor搭建Docker私有镜像仓库服务
- 使用官方 docker registry 搭建私有镜像仓库及部署 web ui
- 安装harbor私有镜像仓库
- 基于 Harbor 搭建 Docker 私有镜像仓库
- 使用docker registry建立私有镜像仓库
- 使用Docker registry镜像创建私有仓库
- docker 系列 - 企业级私有镜像仓库Harbor部署(转载)
- 使用python脚本获取docker私有镜像仓库镜像信息
- 使用Docker registry镜像创建私有仓库
- 配置私有仓库(使用registry镜像搭建一个私有仓库)
- 基于 Harbor 搭建 Docker 私有镜像仓库
- 使用nexus3作为docker镜像仓库
- kuberntes 使用harbor最为镜像仓库配置