1. 程式人生 > >Kubernetes如何使用Harbor作為私有映象倉庫_Kubernetes中文社群

Kubernetes如何使用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個物件。

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的內容:

01.png

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

b. 定義yaml檔案:

02.png
其中的type必須是:kubernetes.io/dockerconfigjson 2. 建立serviceAccount 3.在pod中使用: 04.png

4、讓Harbor為kubernetes提供映象服務

首先在Harbor中建立建立使用者,專案,將專案設定為私有,將建立的使用者加入到專案中,設定使用者的角色為開發者或者為專案管理員。確保該賬戶具有拉取該倉庫映象的許可權。

其次,按照上述的方式建立secret和serviceAccount,其中secret中的使用者名稱、密碼和郵箱地址資訊為在Harbor中建立的使用者的資訊。

這樣配置後就可以讓kubernetes從Harbor拉取映象了。

總結

Harbor提供了基於角色的訪問控制機制,並通過專案來對映象進行組織和訪問許可權的控制。kubernetes中通過namespace來對資源進行隔離,在企業級應用場景中,通過將兩者進行結合可以有效將kubernetes使用的映象資源進行管理和訪問控制,增強映象使用的安全性。尤其是在多租戶場景下,可以通過租戶、namespace和專案相結合的方式來實現對多租戶映象資源的管理和訪問控制。

03.png