使用Harbor配置Kubernetes私有镜像仓库

Harbor使用了基于角色的访问控制策略,当从Harbor中拉去镜像的时候,首先要进行身份认证,认证经过后才能够拉取镜像。在命令行模式下,须要先执行docker login,登录成功后,才能够docker pull。

一般状况下,在私有云环境中使用kubernetes时,咱们要从docker registry拉取镜像的时候,都会给docker daemo配置–insecure-registry属性来告诉docker daemo咱们所使用的docker registry是可信的,这样才能从私有的docker registry中拉取镜像,可是若是要使用Harbor做为kubernetes的镜像仓库的话,这种方式就不适用了,下面让咱们看看如何来使用Harbor做为kubernetes的镜像仓库。linux

实现探索docker

咱们在命令行方式下,输入docker login登录成功后,会在/root/.docker/目前下生成一个config.json文件。打开后能够看到以下的内容: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中的进程提供身份信息。spa

看到了吗,kubernetes已经告诉了咱们问题的答案。没错,使用secret和serviceAccount就能够实现kubernetes在建立pod的时候经过docker registry server的认证来拉取镜像。下面咱们看下如何来使用这2个对象。命令行

建立secret3d

a. 使用命令行:server

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的内容:对象

使用Harbor配置Kubernetes私有镜像仓库使用Harbor配置Kubernetes私有镜像仓库

图中data部分,dockerconfigjson为data的类型,后面的一长串即为进过base64加密的内容,经过解密后,你就会发现,里面的内容基本上就是/root/.docker/config.json中的内容。

b. 定义yaml文件:

使用Harbor配置Kubernetes私有镜像仓库使用Harbor配置Kubernetes私有镜像仓库

其中的type必须是:kubernetes.io/dockerconfigjson

建立serviceAccount

使用Harbor配置Kubernetes私有镜像仓库使用Harbor配置Kubernetes私有镜像仓库

在pod中使用

使用Harbor配置Kubernetes私有镜像仓库使用Harbor配置Kubernetes私有镜像仓库

让Harbor为kubernetes提供镜像服务

首先在Harbor中建立建立用户,项目,将项目设置为私有,将建立的用户加入到项目中,设置用户的角色为开发者或者为项目管理员。确保该帐户具备拉取该仓库镜像的权限。

其次,按照上述的方式建立secret和serviceAccount,其中secret中的用户名、密码和邮箱地址信息为在Harbor中建立的用户的信息。

这样配置后就可让kubernetes从Harbor拉取镜像了。

总结

Harbor提供了基于角色的访问控制机制,并经过项目来对镜像进行组织和访问权限的控制。kubernetes中经过namespace来对资源进行隔离,在企业级应用场景中,经过将二者进行结合能够有效将kubernetes使用的镜像资源进行管理和访问控制,加强镜像使用的安全性。尤为是在多租户场景下,能够经过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。
使用Harbor配置Kubernetes私有镜像仓库使用Harbor配置Kubernetes私有镜像仓库

相关文章
相关标签/搜索