Kubernetes如何使用Harbor做爲私有鏡像倉庫

概述

  Harbor使用了基於角色的訪問控制策略,當從Harbor中拉去鏡像的時候,首先要進行身份認證,認證經過後才能夠拉取鏡像。在命令行模式下,須要先執行docker login,登錄成功後,才能夠docker pull。一般狀況下,在私有云環境中使用kubernetes時,咱們要從docker registry拉取鏡像的時候,都會給docker daemo配置--insecure-registry屬性來告訴docker daemo咱們所使用的docker registry是可信的,這樣才能從私有的docker registry中拉取鏡像,可是若是要使用Harbor做爲kubernetes的鏡像倉庫的話,這種方式就不適用了,下面讓咱們看看如何來使用Harbor做爲kubernetes的鏡像倉庫。
 php

實現探索

  咱們在命令行方式下,輸入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的內容: 
 html

01.png



   圖中data部分,dockerconfigjson爲data的類型,後面的一長串即爲進過base64加密的內容,經過解密後,你就會發現,裏面的內容基本上就是/root/.docker/config.json中的內容。

    b. 定義yaml文件: 
 docker

02.png



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

  2. 建立serviceAccount 
 json


  3.在pod中使用: 
 安全

04.png



  四、讓Harbor爲kubernetes提供鏡像服務

  首先在Harbor中建立建立用戶,項目,將項目設置爲私有,將建立的用戶加入到項目中,設置用戶的角色爲開發者或者爲項目管理員。確保該帳戶具備拉取該倉庫鏡像的權限。

  其次,按照上述的方式建立secret和serviceAccount,其中secret中的用戶名、密碼和郵箱地址信息爲在Harbor中建立的用戶的信息。

  這樣配置後就可讓kubernetes從Harbor拉取鏡像了。
 加密

總結

  Harbor提供了基於角色的訪問控制機制,並經過項目來對鏡像進行組織和訪問權限的控制。kubernetes中經過namespace來對資源進行隔離,在企業級應用場景中,經過將二者進行結合能夠有效將kubernetes使用的鏡像資源進行管理和訪問控制,加強鏡像使用的安全性。尤爲是在多租戶場景下,能夠經過租戶、namespace和項目相結合的方式來實現對多租戶鏡像資源的管理和訪問控制。url

03.png

相關文章
相關標籤/搜索