harbor是vmwere公司开源的企业级Docker Registry项目
项目地址:https://github.com.vmwere/harbor
安装和配置指南
1、下载离线安装包
2、安装docker
3、安装docker-compose
4、harbor的安装与配置
5、自签TLS证书
6、访问验证
1、下载安装包
wget https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.1.tgz
2、安装docker(略)
3、安装docker-compose
运行以下命令以下载Docker Compose的当前稳定版本
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
将可执行权限应用于二进制文件
chmod +x /usr/local/bin/docker-compose
注意:如果命令docker-compose在安装后失败,请检查您的路径。您也可以创建指向/usr/bin或路径中任何其他目录的符号链接。
例如:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试安装
docker-compose --version
解除安装
如果使用curl以下命令进行安装,则要卸载Docker Compose
sudo rm /usr/local/bin/docker-compose
如果使用pip以下命令进行安装,则要卸载Docker Compose
pip uninstall docker-compose
可以参考官网:https://docs.docker.com/compose/install
4、harbor的安装与配置
目标主机的先决条件
Harbor被部署为多个Docker容器,因此可以部署在任何支持Docker的Linux发行版上。目标主机需要Docker和Docker Compose才能安装。、
网络端口
开始安装:
在线安装程序
tar xvf harbor-online-installer- <版本> .tgz
离线安装程序
tar xvf harbor-offline-installer- <版本> .tgz
配置港口
配置参数位于文件Harbor.yml中
有两类参数,必需参数和可选参数。
系统级参数:这些参数需要在配置文件中设置。如果用户对其进行更新harbor.yml并运行install.sh脚本以重新安装Harbor,它们将生效。
用户级别参数:这些参数可以在Web Portal首次启动端口之后更新。特别是,您必须在Harbor中注册或创建任何新用户之前设置所需的auth_mode。当系统中有用户时(默认管理员用户除外),无法更改auth_mode。
参数说明如下-请注意,至少您需要更改主机名属性
必要参数
hostname:目标主机的主机名,用于访问门户网站和注册表服务。它应该是目标计算机的IP地址或标准域名(FQDN),例如192.168.1.10或reg.yourdomain.com。请勿使用localhost或127.0.0.1或0.0.0.0作为主机名-注册表服务必须可由外部客户端访问!
data_volume:存储港口数据的位置。
harbor_admin_password:管理员的初始密码。此密码仅在Harbor启动时才生效。此后,将忽略此设置,并且应该在门户中设置管理员的密码。请注意,默认的用户名/密码为admin / Harbor12345。
database:与本地数据库相关的配置
password:PostgreSQL数据库的根密码。将该密码更改为任何生产用途。
max_idle_conns:空闲连接池中的最大连接数。如果<= 0,则不保留任何空闲连接。默认值为50,如果未配置,则默认值为2。
max_open_conns:与数据库的最大打开连接数。如果<= 0,则打开的连接数没有限制。到Harbor数据库的最大连接数的默认值为100。如果未配置,则值为0。
jobservice:与jobservice相关的服务
max_job_workers:作业服务中最大复制工作者数。对于每个图像复制作业,工作人员会将存储库的所有标签同步到远程目标。增加此数目将允许系统中进行更多并发复制作业。但是,由于每个工作人员都会消耗一定数量的网络/ CPU / IO资源,因此请根据主机的硬件资源仔细选择此属性的值。
log:日志相关的URL
级别:日志级别,选项为调试,信息,警告,错误,致命
local:默认是在本地保留日志。
rotation_count:在删除日志文件之前,将日志文件旋转rotate_count次。如果count为0,则将删除旧版本,而不是旋转旧版本。
rotation_size:仅当日志文件的大小大于rotate_size字节时,才对它们进行旋转。如果大小后跟k,则假定大小为千字节。如果使用M,则大小以兆字节为单位;如果使用G,则大小以千兆字节为单位。因此大小100,大小100k,大小100M和大小100G均有效。
location:存储日志的目录
external_endpoint:启用此选项可将日志转发到syslog服务器。
protocol:syslog服务器的传输协议。默认为TCP。
host:系统日志服务器的URL。
port:syslog服务器侦听的端口
可选参数
* **http**:
* **port**:您http的端口号
* **https**:用于访问门户网站和令牌/通知服务的协议。如果启用了Notary,则必须设置为*https*。请参阅**[使用HTTPS访问配置Harbor](https://github.com/goharbor/harbor/blob/master/docs/configure_https.md)**。
* **port**:https的端口号
* **certificate**:SSL证书的路径,仅当协议设置为https时才应用。
* **private_key**:SSL密钥的路径,仅当协议设置为https时才应用。
* **external_url**:如果使用外部代理,则启用它;启用后,主机名将不再使用
* **clair**:与Clair相关的配置
* **updaters_interval**:clair更新程序的间隔,单位为小时,设置为0以禁用更新程序
* **http_proxy**:为Clair配置http代理,例如`http://my.proxy.com:3128`。
* **https_proxy**:为Clair配置https代理,例如`http://my.proxy.com:3128`。
* **no_proxy**:不为Clair配置代理,例如`127.0.0.1,localhost,core,registry`。
* **chart**:图表相关的配置
* **absolute_url**:如果设置为启用图表将使用绝对URL,否则将其设置为禁用,图表将使用相对URL。
* **external_database**:外部数据库配置,当前仅支持POSTGRES。
* **港口**:港口的核心数据库配置
* **host**:港口核心数据库的**主机**名
* **port**:港口的核心数据库端口
* **db_name**:港口核心数据库的数据库名称
* **username**:连接港口核心数据库的用户名
* **password**:包含核心数据库的密码
* **ssl_mode**:启用ssl模式
* **max_idle_conns**:空闲连接池中的最大连接数。如果<= 0,则不保留任何空闲连接。预设值为2。
* **max_open_conns**:与数据库的最大打开连接数。如果<= 0,则打开的连接数没有限制。默认值为0。
* **clair**:clair的数据库配置
* **host**:clair数据库的**主机**名
* **port**:clair数据库的端口
* **db_name**:clair数据库的数据库名称
* **用户名**:连接clair数据库的用户名
* **password**:clair数据库的密码
* **ssl_mode**:启用ssl模式
* **notary_signer**:公证人的签署者数据库配置
* **host**:公证签名人数据库的**主机**名
* **port**:公证签名人数据库的端口
* **db_name**:公证签名人数据库的数据库名称
* **username**:连接公证签名人数据库的用户名
* **密码**:公证签名人数据库的密码
* **ssl_mode**:启用ssl模式
* **notary_server**:
* **host**:公证服务器数据库的**主机**名
* **port**:公证服务器数据库的端口
* **db_name**:公证服务器数据库的数据库名称
* **username**:连接公证服务器数据库的用户名
* **password**:公证服务器数据库的密码
* **ssl_mode**:启用ssl模式
* **external_redis**:使用外部Redis的配置
* **host**:外部redis的主机
* **port**:外部redis的端口
* **密码**:连接外部主机的密码
* **Registry_db_index**:注册表使用的数据库索引
* **jobservice_db_index**:**jobservice的**数据库索引
* **chartmuseum_db_index**:**图表博物馆的**数据库索引
配置存储后端(可选)
**storage_service**:默认情况下,Harbor将图像和图表存储在本地文件系统上。在生产环境中,您可以考虑使用其他存储后端而不是本地文件系统,例如S3,OpenStack Swift,Ceph等。这些参数是注册表的配置。
* **ca_bundle**:定制根ca证书的路径,该证书将注入到注册表和图表存储库的容器的信任存储中。当用户托管带有自签名证书的内部存储时,通常需要这样做。
* **provider_name**:注册表的存储配置,默认为文件系统。有关此配置的更多信息,请参阅[https://docs.docker.com/registry/configuration/](https://docs.docker.com/registry/configuration/)
重定向:
disable:要禁用注册表重定向时,将disable设置为true
默认安装
Harbor已与Notary和Clair集成(用于漏洞扫描)。但是,默认安装不包括Notary或Clair服务
./install.sh
如果需要自签证书 使用https 请完成第五步操作
可参照官网:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
5、自签TLS证书
使用HTTPS访问配置Harbor
由于Harbor不附带任何证书,因此默认情况下它使用HTTP来满足注册表请求。但是,强烈建议为任何生产环境启用安全性。Harbor有一个Nginx实例作为所有服务的反向代理,您可以使用prepare脚本将Nginx配置为启用https。
在测试或开发环境中,您可以选择使用自签名证书,而不是使用来自受信任的第三方CA的证书。以下内容将向您展示如何创建自己的CA,以及如何使用CA签署服务器证书和客户端证书。
获得证书颁发机构
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=yourdomain.com" \
-key ca.key \
-out ca.crt
获取服务器证书
假设注册表的主机名是yourdomain.com,并且其DNS记录指向您正在运行Harbor的主机。在生产环境中,首先应该从CA获得证书。在测试或开发环境中,您可以使用自己的CA。证书通常包含一个.crt文件和一个.key文件,例如yourdomain.com.crt和yourdomain.com.key
1)创建自己的私钥:
openssl genrsa -out yourdomain.com.key 4096
2)生成证书签名请求:
如果使用像yourdomain.com这样的FQDN 连接注册表主机,则必须将yourdomain.com用作CN(公用名)。
openssl req -sha512 -new \
-subj "/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=yourdomain.com" \
-key yourdomain.com.key \
-out yourdomain.com.csr
3)生成您的注册表主机的证书:
无论您使用的是诸如yourdomain.com之类的 FQDN 还是用于连接注册表主机的IP,请运行以下命令来生成符合主题备用名称(SAN)和x509 v3扩展要求的注册表主机证书:
v3.ext
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in yourdomain.com.csr \
-out yourdomain.com.crt
配置和安装
1)配置用于Harbour的服务器证书和密钥
获取yourdomain.com.crt和yourdomain.com.key文件后,您可以将它们放入目录,例如/root/cert/:
cp yourdomain.com.crt /data/cert/
cp yourdomain.com.key /data/cert/
2)为Docker配置服务器证书,密钥和CA
Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书。
将服务器转换yourdomain.com.crt为yourdomain.com.cert:
openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert
Delpoy yourdomain.com.cert,yourdomain.com.key以及ca.crt对码头工人:
cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
cp ca.crt /etc/docker/certs.d/yourdomain.com/
3)配置港口
编辑文件harbor.yml,更新主机名并取消对https块的注释,并更新属性certificate和private_key:
#设置主机
的主机名: yourdomain.com
HTTP:
端口: 80
HTTPS:
# HTTPS端口海港,默认为443
端口: 443
#证书和nginx的密钥文件的路径
证书: /data/cert/yourdomain.com.crt
PRIVATE_KEY: /data/cert/yourdomain.com.key
生成Harbor的配置文件
./prepare
如果Harbor已在运行,请停止并删除现有实例。您的图像数据保留在文件系统中
docker-compose down -v
最后,重新启动Harbor
docker-compose up -d
6、访问验证
docker login 域名
docker push image (首先要改镜像tag)上传镜像
docker pull image 下载镜像
登录web页面验证