本文介绍了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拉取镜像了。