1、harbor 官网
https://goharbor.io/docs/2.12.0/install-config/
https://github.com/goharbor/harbor/tags
2、harbor 安装先决条件
1.硬件
CPU 4U
Mem 8G
Disk 160G
2.软件
- docker (20.10.10+)
- docker-compose (v1.18.0+)
cat << EOF > /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/rhel/gpg
EOFdnf clean all
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
docker version
systemctl status docker
systemctl start docker
systemctl enable docker
systemctl status docker
docker version
docker-compose --version
3、安装 harbor
cd /opt
wget https://github.com/goharbor/harbor/releases/download/v2.12.1/harbor-offline-installer-v2.12.1.tgz
tar xzvf harbor-offline-installer-v2.12.1.tgz
4、配置对 Harbor 的 HTTPS 访问
// 因为是公共证书,所以直接放在目录即可
mkdir -p /data/harbor/cert
mv /tmp/server.* /data/harbor/cert/
cd /opt/harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
hostname: regharbor.xx.comcertificate: /data/harbor/cert/server.crtprivate_key: /data/harbor/cert/server.key
4、开启监控指标 (非必须,根据个人需求开启)
vim harbor.yml
metric:enabled: trueport: 9090path: /metrics
5、运行 prepare 脚本以启用 HTTPS
./prepare --with-trivy
./install.sh --with-trivy
6、测试
https://regharbor.xx.com
docker login regharbor.xx.com
1. 首先在 harbor 新建一个项目 test
2. 从 docker hub 下载一个镜像
docker pull busybox
3. 为镜像打一个私有仓库的标签,格式为:仓库服务地址/项目名称/镜像名称: [TAG],TAG 可以不写默认就是 latest
docker tag busybox regharbor.xx.com/test/busybox
4. 推送镜像到 harbor 仓库
docker push regharbor.xx.com/test/busybox
5. 在其他机器 pull 此镜像
docker pull regharbor.xx.com/test/busybox
7、重新配置 harbor
1. 停止
docker compose down -v
2. 更新 harbor.yml
vim harbor.yml
3. 运行 prepare 脚本以填充配置
./prepare --with-trivy
4. 重新创建并启动 Harbor 实例
docker-compose up -d
8、升级 harbor 和 迁移数据
1.停止 harbor
// find / -name harbor
cd /opt/harbor
docker-compose down
2.备份 harbor
cd /opt/
tar zcf harbor-4.207-20250108.tar.gz harbor
sz harbor-4.207-20250108.tar.gz
3.备份数据库
默认情况下,该数据库位于目录 /data/database 中
cd /data
tar zcf harbor-database-4.207-20250118.tar.gz database
sz harbor-database-4.207-20250118.tar.gz
4.下载离线包
// https://github.com/goharbor/harbor/releases/tag
cd /root
wget https://github.com/goharbor/harbor/releases/download/v1.10.0/harbor-offline-installer-v1.10.0.tgz
5.下载迁移工具
// docker pull goharbor/harbor-migrator:[tag]
将 [tag] 替换为新港版本,例如 v1.10.0
docker pull goharbor/harbor-migrator:v1.10.0
6.下加载新版本镜像
tar zxf harbor-offline-installer-v1.10.0.tgz
docker image load -i harbor/harbor.v1.10.0.tar.gz
7.升级 harbor.yml 文件
// v1.10.0
docker run -it --rm -v /opt/harbor/harbor.cfg:/harbor-migration/harbor-cfg/harbor.yml goharbor/harbor-migrator:v1.10.0 --cfg up
// v2.4.0
cp /root/harbor/harbor.yml /opt/harbor/
docker run -it --rm -v /:/hostfs goharbor/prepare:v2.4.0 migrate -i /opt/harbor/harbor.yml
ps:
每个版本的升级命令都不一样,自行查阅官网 https://goharbor.io/docs/2.4.0/administration/upgrade/
8.运行 install.sh 脚本
cd /root/harbor
./install.sh
9、docker login
在命令行模式下,需要先执行 docker login,登陆成功后,才可以 docker pull
我们在命令行方式下,输入 docker login 登陆成功后,会在 /root/.docker/ 目前下生成一个 config.json 文件打开后可以看到如下的内容:
{
"auths": {
"regharbor.xxx.com": {
"auth": "YWRtaW46SGFyYm9yMTIzNDU="
}
}
}
– secret:是一个保存少量诸如密码,token 等敏感数据的对象,采用 secret 方式保存可以获取更好的控制力和减少敏感数据意外暴露的风险,一般作为文件挂载到容器中或者是在 kubelet 拉取镜像时使用
– serviceAccount:为运行在pod中的进程提供身份信息
使用 secret 和 serviceAccount 就可以实现 kubernetes 在创建 pod 的时候通过 docker registry server 的认证来拉取镜像,下面我们看下如何来使用这 2 个对象
- 创建secret:
有 2 种方式可以创建 secret:
- 使用命令行:
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的内容:
kubelet get secret firmament-secret --namespace=sky-firmament -o yaml
图中data部分,dockerconfigjson为data的类型,后面的一长串即为进过base64加密的内容,通过解密后,你就会发现,里面的内容基本上就是/root/.docker/config.json中的内容 - 定义yaml文件:
中的type必须是:kubernetes.io/dockerconfigjson
- 创建serviceAccount
- 让Harbor为kubernetes提供镜像服务
首先在Harbor中创建创建用户,项目,将项目设置为私有,将创建的用户加入到项目中,设置用户的角色为开发者或者为项目管理员确保该账户具有拉取该仓库镜像的权限
其次,按照上述的方式创建secret和serviceAccount,其中secret中的用户名、密码和邮箱地址信息为在Harbor中创建的用户的信息
这样配置后就可以让kubernetes从Harbor拉取镜像了
总结
Harbor 提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制
kubernetes 中通过 namespace 来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将 kubernetes 使用的镜像资源进行管理和访问控制,增强镜像使用的安全性
尤其是在多租户场景下,可以通过租户、namespace 和项目相结合的方式来实现对多租户镜像资源的管理和访问控制
------------------------------- THE END -------------------------------