通常情况下,在私有云环境中使用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和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。

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

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

  1. 使用Harbor搭建Docker私有镜像仓库

    Harbor介绍:https://goharbor.io/ 前置条件 需要安装了docker和docker-compose 下载Harbor 在harbor下载页(https://github.com ...

  2. 基于 registry 搭建 Docker 私有镜像仓库

    今天主要介绍使用 registry 来搭建 Docker私有镜像仓库,方便在公司内部项目中使用,registry 也是 Docker 官方提供的一个镜像,操作也很简单. dockerhub: http ...

  3. 配置kuernetes集群pod拉取私有镜像仓库中的镜像

    目录 1 背景说明 2 实现方法 3 具体实现 配置镜像仓库项目为公开类型(任何人可以访问) 配置docker-registry类型的secret(pod使用secret获取镜像认证) 通过账户名密码 ...

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

    企业级私有镜像仓库Harbor 一:介绍 Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为dock ...

  5. Harbor私有镜像仓库(上)

    上图配置为工作环境 特别注意:win10现在不允许使用私有ca证书,到时登录浏览器会失败,可以选用火狐浏览器. 创建自己的CA证书 openssl req -newkey rsa:4096 -node ...

  6. harbor私有镜像仓库的搭建与使用与主从复制

    harbor私有镜像仓库,私有仓库有两种,一种是harbor,一种是小型的私有仓库,harbor有两种模式,一种是主 从,一种是高可用仓库,项目需求,需要两台服务器,都有docker.ldap权限统一 ...

  7. 搭建Harbor私有镜像仓库--v1.5.1

     搭建Harbor私有镜像仓库--v1.5.1 1.介绍 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境 ...

  8. k8s创建harbor私有镜像仓库

    1. 部署准备 准备harbor软件包 在部署节点上: mv harbor-offline-installer-v1.4.0.tgz /opt/ && cd /opt tar zxvf ...

  9. 部署Harbor私有镜像仓库

    Harbor私有镜像仓库无坑搭建 目录 1. harbor介绍 2. docker-ce的安装 3. docker-compose的安装 4. Harbor私有仓库的安装 5. 客户端连接镜像仓库配置 ...

随机推荐

  1. composer PHP Fatal error致命错误

    可以尝试临时禁用composer插件: composer global remove fxp/composer-asset-plugin --no-plugins

  2. Docker 导出&加载镜像

    文章首发自个人网站:https://www.exception.site/docker/docker-save-load-image 本文中,您将学习 Docker 如何导出&加载镜像.当我们 ...

  3. 【Android Studio安装部署系列】四、Android SDK目录和作用分析

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android SDk Tool软件开发工具包(software development kit).被软件开发工程师用于为特定的软件 ...

  4. Windows下SVN服务器搭建和基本操作(服务端、客户端)

    自己打算打一个SVN服务器了解一下,所以顺便记录一下整个的过程 下载 服务端 https://www.visualsvn.com/server/download/ 客户端 https://www.vi ...

  5. 开箱即用(out-of-box)的Redis序列号生成器,不用再写任何代码,你值得拥有

      先看整体效果 把简单的东西“傻瓜化”是软件开发追求的目标之一.请看下图: 左边是在 application.yml 里配置了3个生成器,右边可以直接注入到代码中使用,注意,不用写任何代码.这酸爽. ...

  6. java锁与监视器概念 为什么wait、notify、notifyAll定义在Object中 多线程中篇(九)

    在Java中,与线程通信相关的几个方法,是定义在Object中的,大家都知道Object是Java中所有类的超类 在Java中,所有的类都是Object,借助于一个统一的形式Object,显然在有些处 ...

  7. dotnet检测类型是否为泛型

    private static string GetTableName(Type type) { //检测类型是否为泛型 if (type.GetType().IsGenericType) {//取出泛 ...

  8. Python3 日期与时间戳相互转换

    开发中经常会对时间格式处理,对于时间数据,比如2019-02-28 10:23:29,有时需要日期与时间戳进行相互转换,在Python3中主要用到time模块,相关的函数如下: 其中unix_time ...

  9. Web 性能优化:Preload与Prefetch的使用及在 Chrome 中的优先级

    摘要: 理解Preload与Prefetch. 原文:Web 性能优化:Preload,Prefetch的使用及在 Chrome 中的优先级 作者:前端小智 Fundebug经授权转载,版权归原作者所 ...

  10. Android Studio Error:Execution failed for task ':app:preDebugAndroidTestBuild'.彻底解决的方法以及修改AScompileSDKVersion

    Error Error:Execution failed for task ':app:preDebugAndroidTestBuild'. > Conflict with dependency ...