zoukankan      html  css  js  c++  java
  • 使用Harbor配置Kubernetes私有镜像仓库

    通常情况下,在私有云环境中使用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的内容:

    使用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私有镜像仓库

    导读 Harbor使用了基于角色的访问控制策略,当从Harbor中拉去镜像的时候,首先要进行身份认证,认证通过后才可以拉取镜像。在命令行模式下,需要先执行docker login,登陆成功后,才可以docker pull。
  • 相关阅读:
    Android开发之Sqlite的使用
    ZOJ 3607 Lazier Salesgirl
    ZOJ 3769 Diablo III
    ZOJ 2856 Happy Life
    Ural 1119 Metro
    Ural 1146 Maximum Sum
    HDU 1003 Max Sum
    HDU 1160 FatMouse's Speed
    Ural 1073 Square Country
    Ural 1260 Nudnik Photographer
  • 原文地址:https://www.cnblogs.com/probemark/p/10708122.html
Copyright © 2011-2022 走看看