使用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的镜像仓库。

实现探索

我们在命令行方式下,输入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个对象。

创建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

创建serviceAccount

在pod中使用

让Harbor为kubernetes提供镜像服务

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

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

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

总结

Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。

原文地址:https://www.cnblogs.com/linuxprobe-sarah/p/10705280.html

时间: 2024-10-02 11:54:00

使用Harbor配置Kubernetes私有镜像仓库的相关文章

私有镜像仓库Harbor基础介绍与部署

企业级私有镜像仓库Harbor 一:介绍 Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为docker容器的技术正是借鉴了集装箱的原理.所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务. Registry是Docker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中.企业可以根据自己的需求,使用Dokcerf

Docker 构建私有镜像仓库(6)

title: Docker 构建私有镜像仓库(6) date: 2018-12-18 08:47:27 tags: Docker categories: Docker copyright: true --- Docker是基于Go语言实现的开源容器项目,Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口,Docker诞生于2013年年初,最初发起者是dotCloud公司.

使用Nexus3构建Docker私有镜像仓库

一.安装Nexus3 Nexus3是Sonatype提供的仓库管理平台,Nuexus Repository OSS3能够支持Maven.npm.Docker.YUM.Helm等格式数据的存储和发布:并且能够与Jekins.SonaQube和Eclipse等工具进行集成.Nexus3支持作为宿主和代理存储库的Docker存储库,可以直接将这些存储库暴露给客户端工具:也可以以存储库组的方式暴露给客户端工具,存储库组是合并了多个存储库的内容的存储库,能够通过一个URL将多个存储库暴露给客户端工具,从而

使用docker Registry快速搭建私有镜像仓库

当我们执行docker pull xxx的时候,docker默认是从registry.docker.com这个地址上去查找我们所需要的镜像文件,然后执行下载操作.这类的镜像仓库就是docker默认的公共仓库,所有人都可以直接查看或下载.使用,但是呢,基于网络原因,下载速度有限制比较慢.因此,我们在公司内部内网环境中使用dokcer,一般不会将镜像文件上传到公网公共库中.但内部共享使用就是个问题,所以,私有仓库就由此产生了. 什么是私有仓库? 私有仓库,就是本地(内网环境)组建的一个与公网公共库功

手动搭建Docker本地私有镜像仓库

实验环境:两个Centos7虚拟机,一个是Server,用作客户端,另一个是Registry,用作Docker私有镜像仓库. 基础配置 查看一下两台虚拟机的IP地址 Server的IP地址是192.168.134.151. Registry的IP地址是192.168.134.150. 使用setenforce 0临时关闭SElinux. 打开Server和Registry的内核转发功能 编辑配置文件/etc/sysctl.conf,添加下面的内容: net.ipv4.ip_forward = 1

k8s使用阿里云的私有镜像仓库

k8s使用阿里云的私有镜像仓库 如果从private register中拉取image:也可以参考这个地址:https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#registry-secret-existing-credentials 1.在阿里云的容器镜像服务安装使用文档见如下:镜像仓库的创建:参考下边的这些文档https://help.aliyun.com/document_

docker 创建私有镜像仓库

docker 创建私有镜像仓库1创建配置文件 {"insecure-registries":["192.168.1.10:5000"] //本地仓库地址}2.重启动docker服务systemctl restart docker3.启动私有仓库docker run -d -p 5000:5000 registry:latest4.上传镜像到私有仓库给镜像打标签后上传 docker tag nginx:latest 192.168.1.10:5000/nginx:la

【Docker】(4)搭建私有镜像仓库

[Docker](4)搭建私有镜像仓库 说明 1. 这里是通过阿里云,搭建Docker私有镜像仓库. 2. 这里打包的镜像是从官网拉下来的,并不是自己项目创建的新镜像,主要测试功能 一.搭建过程 首先进入阿里云创建镜像仓库: https://dev.aliyun.com/search.html-->点击管理中心(初次使用会提示开通,然后设置密码) 然后创建命名空间和镜像仓库: 有关docker拉取和推送指令,点击上图的中管理,就能看到. 1.登录阿里云 docker login [email p

用registry快速搭建私有镜像仓库

1.背景 在 Docker 中,当我们执行 docker pull xxx 的时候,可能会比较好奇,docker 会去哪儿查找并下载镜像呢? ?它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库,上面的镜像,大家都可以看到,也可以使用.所以,我们也可以带上仓库地址去拉取镜像,如:docker pull registry.hub.docker.com/library/alpine,不过要注意,这种方式下载的镜像的默认名称就会长一