16_6_Habor 镜像仓库搭建与使用
01 概述
Harbor是由VMWare公司开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应的企业级扩展, 从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及 审计日志等,足以满足基本企业需求。
Document:
https://goharbor.io/docs/2.0.0/
Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。
1)Proxy: Harbor 的 Registry、 UI、Token 服务等组件,都处在nginx反向代理后边。该代理将来自浏览器、docker clients
的请求转发到后端不同的服务上。
2)Registry:负责储存Docker 镜像,并处理Docker push/pull命令。由于要对用户进行访问控制,即不同用户对Docker 镜像
有不同的读写权限,Registry 会指向一个Token 服务,强制用户的每次Docker pull/push 请求都要携带一个合法的Token,
Registry会通过公钥对Token进行解密验证。
3)Core services:Harbor的核心功能,主要提供以下3个服务:
- UI (harbor-ui) :提供图形化界面,帮助用户管理Registry上的镜像 (image) ,并对用户进行授权。
- WebHook:为了及时获取Registry上image 状态变化的情况,在Registry上配置 Webhook, 把状态变化传递给 UI 模块。
- Token 服务:负责根据用户权限给每个Docker push/pull 命令签发Token。 Docker 客户端向Registry 服务发起的请求,如果不包含Token,会被重定向到 Token 服务,获得 Token 后再重新向Registry 进行请求。
4)Database (harbor -db) :为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。
5)Job services:主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。
6)Log collector (harbor-log) :负责收集其他组件的日志到一个地方。
02 安装配置-http
先安装Docker和Docker Compose
注:可以参考之前的文章安装
部署Harbor HTTP
tar zxvf harbor-offline-installer-v2.0.0.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml
vi harbor.yml
# hostname: reg.ctnrs.com
# https: # 先注释https相关配置
# harbor_admin_password: Harbor12345
./prepare
./install.sh
# 查看状态
docker-compose ps
# 1、配置http镜像仓库可信任
vi /etc/docker/daemon.json
# {"insecure-registries":["reg.ctnrs.com"]}
systemctl daemon-reload
systemctl restart docker.service
docker login 192.168.22.160
admin
Harbor12345
# 2、打标签
docker tag centos:7 reg.ctnrs.com/library/centos:7
# 3、上传
docker push reg.ctnrs.com/library/centos:7
# 4、下载
docker pull reg.ctnrs.com/library/centos:7
页面访问
02-安装配置-https
# 01 生成CA证书
# 创建私钥
root@eb7023:/data/certs>openssl genrsa -out ca.key 4096
# 生成证书签名请求
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.227.122" \
-key ca.key \
-out ca.crt
# req 产生证书签发申请命令
# -x509 签发X.509格式证书命令。X.509是最通用的一种签名证书格式。
# -new 生成证书请求
# -key 指定私钥文件
# -nodes 表示私钥不加密
# -out 输出
# -subj 指定用户信息
# -days 有效期
# 02 生成服务器证书
# 创建私钥
openssl genrsa -out server.key 4096
# 生成证书签名请求
openssl req -new -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.227.122" \
-key server.key \
-out server.csr
# 首先创建一个 v3.ext 文件
# 域名方式访问
# 需要替换下方IP地址
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=harbor23.com
EOF
# IP方式访问
# 需要替换下方IP地址
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:192.168.227.122
EOF
# 生成harbor仓库主机的证书
openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
# 03 将server.crt 和 server.key 复制到 docker 证书文件夹内
# Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书
openssl x509 -inform PEM -in server.crt -out server.cert
# docker 证书文件夹目录结构
/etc/docker/certs.d/192.168.227.122
└── 192.168.227.122
├── server.crt
├── server.cert
└── server.key
# 04 编辑harbor.yml配置文件
root@eb7023:/data/certs>vim ~/harbor/harbor.yml
---
hostname: 192.168.227.122
# http related config
http:
port: 80
# https related config
https:
port: 443
certificate: /data/certs/server.crt
private_key: /data/certs/server.key
external_url: https://192.168.227.122
harbor_admin_password: Harbor12345
# Harbor DB configuration
database:
password: root123
max_idle_conns: 50
max_open_conns: 100
data_volume: /data/harbor
clair:
updaters_interval: 12
# Trivy configuration
trivy:
ignore_unfixed: false
skip_update: false
insecure: false
jobservice:
max_job_workers: 10
notification:
webhook_job_max_retry: 10
chart:
absolute_url: disabled
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
_version: 2.0.0
proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- clair
- trivy
---
# 05 执行安装
./prepare
./install.sh
# 06 页面访问
https://192.168.227.122/
# 07 docker login 推送镜像
root@k8s-node1 192.168.227.122]# docker login 192.168.227.122
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
docker push 192.168.227.122/public/REPOSITORY[:TAG]
补充
CA根证书的生成步骤
# 生成CA私钥(.key)–>生成CA证书请求(.csr)–>自签名得到根证书(.crt)(CA给自已颁发的证书)
# Generate CA private key
openssl genrsa -out ca.key 2048
# Generate CSR
openssl req -new -key ca.key -out ca.csr
# Generate Self Signed certificate(CA 根证书)
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt
用户证书的生成步骤
# 生成私钥(.key)–>生成证书请求(.csr)–>用CA根证书签名得到证书(.crt)
服务器端用户证书:
# private key
$openssl genrsa -des3 -out server.key 1024
# generate csr
$openssl req -new -key server.key -out server.csr
# generate certificate
$openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
客户端用户证书:
$openssl genrsa -des3 -out client.key 1024
$openssl req -new -key client.key -out client.csr
$openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」