- 1、架构
- 2、安装配置harbor(多态主机基本相同)
- 3、基本使用
- 4、高可用实现
- 5、配置HTTPS证书
- 1、配置证书
- 向 Harbor 和 Docker 提供证书">3、向 Harbor 和 Docker 提供证书
- 1、将服务器证书和密钥复制到 Harbor 主机上的 certficates 文件夹中。">1、将服务器证书和密钥复制到 Harbor 主机上的 certficates 文件夹中。
- 转换yourdomain.com.crt为yourdomain.com.cert,供 Docker 使用。">2、转换yourdomain.com.crt为yourdomain.com.cert,供 Docker 使用。
- 将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。您必须首先创建适当的文件夹。">3、将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。您必须首先创建适当的文件夹。
- 4、重启 Docker 引擎。">4、重启 Docker 引擎。
- 注意:3、4、5步骤不要做
- 证书的目录结构">5、证书的目录结构
- 部署或重新配置Harbor">4、部署或重新配置Harbor
https://www.yuque.com/geray-alxoc/lay37c/tagodt06voffv1me?singleDoc# 《13-openssl签发harbor多域名证书》
1、架构
IP | 角色 | |
---|---|---|
192.168.6.31 | harbor1 | |
192.168.6.32 | harbor2 |
2、安装配置harbor(多态主机基本相同)
https://github.com/goharbor/harbor/releases
1、解压
tar xf harbor-offline-installer-v2.4.1.tgz -C /opt
ll /opt/harbor
drwxr-xr-x 2 root root 4096 Dec 17 14:43 cert/
-rw-r--r-- 1 root root 3361 Dec 16 12:22 common.sh
-rw-r--r-- 1 root root 616006217 Dec 16 12:23 harbor.v2.4.1.tar.gz
-rw-r--r-- 1 root root 8999 Dec 16 12:22 harbor.yml.tmpl
-rwxr-xr-x 1 root root 2500 Dec 16 12:22 install.sh*
-rw-r--r-- 1 root root 11347 Dec 16 12:22 LICENSE
-rwxr-xr-x 1 root root 1881 Dec 16 12:22 prepare*
2、 安装docker-compose
https://github.com/docker/compose/releases
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
4、配置并安装启动检查
cp harbor.yml.tmpl harbor.yml
1、harbor.yml详解
https://goharbor.io/docs/2.0.0/install-config/configure-yml-file/#required-parameters
# hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost
hostname: 192.168.6.31
# HTTP相关配置(不要在生产环境中使用)
http:
port: 80 # HTTP 的端口号,用于 Harbor 门户和 Docker 命令。默认值为 80。
# HTTPS相关配置(需要证书可以先注释)
#https:
# port: 443
# certificate: /your/certificate/path # SSL 证书的路径。
# private_key: /your/private/key/path # SSL 密钥的路径。
# 取消一下注释,harbor组件之间将使用TLS通信
# internal_tls:
# # set enabled to true means internal tls is enabled
# enabled: true
# # put your cert and key files on dir
# dir: /etc/harbor/tls/internal
# 为 Harbor 系统管理员设置初始密码。该密码仅在Harbor 首次启动时使用。后续登录时,将忽略此设置,并在 Harbor Portal 中设置管理员密码。默认用户名和密码是admin和Harbor12345
harbor_admin_password: Harbor12345
# 使用本地 PostgreSQL 数据库。您可以选择配置外部数据库
database:
password: root123
max_idle_conns: 100 # 空闲连接池中的最大连接数。如果设置为 <=0,则不保留空闲连接。默认值为 50。如果未配置,则值为 2。
max_open_conns: 900 # 与数据库的最大打开连接数。如果 <= 0,则打开连接的数量没有限制。对于到 Harbor 数据库的最大连接数,默认值为 100。如果未配置,则值为 0。
# 目标主机上存储 Harbor 数据的位置。即使删除和/或重新创建 Harbor 的容器,该数据也保持不变。
data_volume: /opt/harbor/data
# 配置 Trivy 扫描仪
trivy:
ignore_unfixed: false # 将标志设置为true仅显示已修复的漏洞。默认值为false
skip_update: false
insecure: false
jobservice:
max_job_workers: 10
# 设置 web hook 作业的最大重试次数。默认值为 10。
notification:
webhook_job_max_retry: 10
chart:
absolute_url: disabled
# 配置日志记录。Harbor 使用 `rsyslog` 来收集每个容器的日志。
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
_version: 2.4.0
# 配置要由 Clair、复制作业服务和 Harbor 使用的代理。
proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- trivy
2、安装启动
mkdir /opt/harbor/data
./install.sh
3、检查并登陆控制台访问
docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------------------------
harbor-core /harbor/entrypoint.sh Up (health: starting)
harbor-db /docker-entrypoint.sh 96 13 Up (health: starting)
harbor-jobservice /harbor/entrypoint.sh Up (health: starting)
harbor-log /bin/sh -c /usr/local/bin/ ... Up (health: starting) 127.0.0.1:1514->10514/tcp
harbor-portal nginx -g daemon off; Up (health: starting)
nginx nginx -g daemon off; Up (health: starting) 0.0.0.0:80->8080/tcp,:::80->8080/tcp
redis redis-server /etc/redis.conf Up (health: starting)
registry /home/harbor/entrypoint.sh Up (health: starting)
registryctl /home/harbor/start.sh Up (health: starting)
5、设置开机自启动
vim harbor-enable.sh
#!/bin/bash
cd /opt/harbor
docker-compose start
# 赋权
chmod +x harbor-enable.sh
# 追加自启动脚本
echo "/bin/bash /opt/harbor/harbor-enable.sh" >> /etc/rc.local
3、基本使用
# 关闭harbor
docker-compose down -v
# 启动harbor
docker-compose up -d
1、登陆控制台并新建项目
- admin/Harbor12345
2、配置daemon.json并上传镜像
1、登陆仓库并上传镜像
docker login -u admin -p Harbor12345 http://127.0.0.1
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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
2、上传镜像
docker pull busybox
docker tag busybox:latest 127.0.0.1/test/busybox:latest
# 推送镜像
docker push 127.0.0.1/test/busybox:latest
4、高可用实现
Harbor支持基于策略的Docker镜像复制功能,这类似于MySQL的主从同步,其可以实现不同的数据中心、不同的运行环境之间同步镜像,并提供友好的管理界面,大大简化了实际运维中的镜像管理工作,
已经有用很多互联网公司使用harbor搭建内网docker仓库的案例,并且还有实现了双向复制功能
1、第二台主机上搭建Harbor
参照上述步骤,在第二台主机上搭建Harbor
scp -r /opt/harbor/ 192.168.6.32:/opt/
scp /usr/local/bin/docker-compose 192.168.6.32:/usr/local/bin/
- 修改harbor.yml中的IP
- 删除
/opt/harbor/data
中的内容:rm -rf /opt/harbor/data/*
2、第二台harbor上新建项目
参考第一台harbor服务器的项目名称,在第二台harbor服务器上新建与之同名的项目
- 输入第一台harbor服务器上的主机和用户信息
4、第二台harbor上新建复制规则实现到第一台harbor的单向复制
在第二台harbor上建立复制的目标主机,即第一台harbor主机,将第二台harbor上面的镜像复制到第一台harbor上1、复制
5、在第一台harbor主机上重复上面操作
以上操作,只是实现了从第二台harbor主机192.168.6.32到第一台harbor主机192.168.6.31的单向同步 在第一台harbor上再执行下面操作,才实现双向同步1、配置仓库管理(同上)
2、配置复制管理(同上)
5、配置HTTPS证书
1、配置证书
https://goharbor.io/docs/2.0.0/install-config/configure-https/
1、生成证书颁发机构证书
1、生成 CA 证书私钥。
mkdir /opt/harbor/cert
cd /opt/harbor/cert
openssl genrsa -out ca.key 4096
2、生成 CA 证书。
调整-subj选项中的值以反映您的组织。如果使用 FQDN 连接 Harbor 主机,则必须将其指定为公用名 ( CN) 属性。
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=GS/ST=LZ/L=LZ/O=geray/OU=geray/CN=harbor.geray.com" \
-key ca.key \
-out ca.crt
CN=commonName 通用名
OU=organizationUnit 组织部门名
O=organizationName 组织名
L=localityName 地址
S=stateName 州名
C=country 城市名
-validity 3650 3650为自己定义证书的有效期,单位为天
2、生成服务器证书
证书通常包含一个.crt文件和一个.key文件1、生成私钥。
openssl genrsa -out harbor.geray.com.key 4096
2、生成证书签名请求 (CSR)。
调整-subj选项中的值以反映您的组织。如果使用 FQDN 连接 Harbor 主机,则必须将其指定为公用名 ( CN) 属性并在密钥和 CSR 文件名中使用它。
openssl req -sha512 -new \
-subj "/C=GS/ST=LZ/L=LZ/O=geray/OU=geray/CN=harbor.geray.com" \
-key harbor.geray.com.key \
-out harbor.geray.com.csr
- 如果是ip访问, 将 harbor.geray.com 改成 ip地址
3、生成 x509 v3 扩展文件。
无论您是使用 FQDN 还是 IP 地址连接到您的 Harbor 主机,您都必须创建此文件,以便为您的 Harbor 主机生成符合主题备用名称 (SAN) 和 x509 v3 的证书扩展要求。替换DNS条目以反映您的域。
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=harbor.geray.com
DNS.2=harbor.geray
DNS.3=k8s-master-1
DNS.4=k8s-node-1
EOF
- 如果是ip访问
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:192.168.6.31
EOF
4、使用该v3.ext文件为您的 Harbor 主机生成证书。
将geray.comCRS 和 CRT 文件名中的 替换为 Harbor 主机名。
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor.geray.com.csr \
-out harbor.geray.com.crt
3、向 Harbor 和 Docker 提供证书
生成后ca.crt,yourdomain.com.crt和yourdomain.com.key文件,必须将它们提供给harbor和docker,和重新配置港使用它们。1、将服务器证书和密钥复制到 Harbor 主机上的 certficates 文件夹中。
mkdir /opt/harbor/tls/
cp harbor.geray.com.crt /opt/harbor/tls/
cp harbor.geray.com.key /opt/harbor/tls/
2、转换yourdomain.com.crt为yourdomain.com.cert,供 Docker 使用。
openssl x509 -inform PEM -in harbor.geray.com.crt -out harbor.geray.com.cert
3、将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。您必须首先创建适当的文件夹。
mkdir /etc/docker/certs.d/harbor.geray.com -p
cp harbor.geray.com.cert /etc/docker/certs.d/harbor.geray.com
cp harbor.geray.com.key /etc/docker/certs.d/harbor.geray.com
cp ca.crt /etc/docker/certs.d/harbor.geray.com
- 如果您将默认nginx端口 443映射到其他端口,请创建文件夹/etc/docker/certs.d/yourdomain.com:port或/etc/docker/certs.d/harbor_IP:port。
4、重启 Docker 引擎。
systemctl restart docker
注意:3、4、5步骤不要做
5、证书的目录结构
tree /etc/docker/certs.d/
/etc/docker/certs.d/
└── harbor.geray.com
├── ca.crt
├── harbor.geray.com.cert
└── harbor.geray.com.key
4、部署或重新配置Harbor
1、配置harbor.yml
https:
port: 443
certificate: /opt/harbor/tls/harbor.od.com.crt
private_key: /opt/harbor/tls/harbor.od.com.key
external_url: https://harbor.od.com # 启用代理后将不再使用主机名
# 取消一下注释,harbor组件之间将使用TLS通信
internal_tls:
# set enabled to true means internal tls is enabled
enabled: true
# put your cert and key files on dir
dir: /opt/harbor/tls
2、运行prepare脚本以启用HTTPS
./prepare
错误排查
3、如果Harbor正在运行,请停止并删除现有实例
- 您的图像数据保留在文件系统中,因此不会丢失任何数据
docker-compose down -v
4、重启
docker-compose up -d