本文介紹了Kubernates集成Harbor的主要思路及操作。
前置工作:
- 安裝Kubernates集羣
- 安裝Harbor
主要思路:
- 操作k8s node的docker,雖然可以從harbor倉庫pull鏡像。但是k8s創建pod時,仍然無法從harbor倉庫pull。這時需要根據harbor登錄用戶信息,在k8s中創建一個資源類型是
Secret
(私鑰)。 - 在yaml文件中添加
imagePullSecrets
參數,指定一個或多個Secret
,用於從遠程倉庫pull鏡像時提交用戶信息進行認證。 - Harbor項目與用戶:默認的項目是
library
,默認爲public
公開的,即harbor所有用戶都可以pull。當然你也可以根據需要創建自己的項目,並且強烈建議將項目設爲private
私有的,這樣只有該項目下的成員(默認包含admin用戶)才能訪問。
成員的角色可以有三種:
- Master
:項目管理員,對鏡像有上傳、下載、刪除和查看的權限。
- Developer
:開發人員,只能查看、上傳和下載鏡像權限。
- Guest
:訪客,只能查看和下載鏡像的權限。
- Limited Guest
受限的訪客
詳細步驟如下:
Step1、在node上執行 docker login 登錄Harbor:
# admin - harbor的用戶名
# Harbor12345 - harbor的密碼
# harbor.domain.com - harbor倉庫的域名/IP
docker login -uadmin -pHarbor12345 harbor.domain.com
執行命令查看登錄狀態:
[root@dev ~]# cat ~/.docker/config.json
{
"auths": {
"harbor.domain.com": {
"auth": "Y2N4...MjM="
}
}
}
Step2、生成祕鑰(secret),命名爲secret-harbor-dev
:
# 參數說明:
# secret-harbor - 這是密鑰的鍵名稱, 可自行定義
# --docker-server - 指定docker倉庫地址
# --docker-username - 指定docker倉庫賬號
# --docker-password - 指定docker倉庫密碼
# -n - 指定namespace,默認爲default
kubectl create secret docker-registry secret-harbor \
--docker-server=harbor.domain.com \
--docker-username=admin \
--docker-password=Harbor12345
Step3、查看祕鑰:
[root@dev244 ~]# kubectl get secret
NAME TYPE DATA AGE
secret-harbor kubernetes.io/dockerconfigjson 1 22s
Step4、yaml文件中通過imagePullSecrets
指定拉取鏡像操作使用的祕鑰:
# imagePullSecrets - 聲明拉取鏡像時需要指定密鑰,值爲密鑰的名稱
imagePullSecrets:
- name: secret-harbor
注意:
1)在定義Deployment
的yaml文件中,要注意參數層級,應設置在spec.template.spec.imagePullSecrets
。
2)當前資源的namespace
必須與密鑰的一致。
這樣,在執行yaml文件時,node節點上的docker就可以使用secret-harbor
通過Harbor認證,從Harbor拉取鏡像了。