Harbor部署
一、 下载Harbor
harbor的官方地址:https://github.com/goharbor/harbor/releases
然后按照官方安装文档进行安装操作:https://github.com/goharbor/harbor/blob/master/docs/install-config/_index.md
这里的设置方法,我把自己的域名粘贴上来了,如果自己实际操作,需要将harbor.test.cn替换成你自己的域名
下载离线包
wget https://github.com/goharbor/harbor/releases/download/v1.10.4/harbor-offline-installer-v2.2.1.tgz
解压安装包
tar zxvf harbor-offline-installer-v2.2.1.tgz
二、 准备证书
设置 https
生成 CA 证书私钥
openssl genrsa -out ca.key 4096
生成 CA 证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.test.cn" \
-key ca.key \
-out ca.crt
生成服务器证书
证书通常包含文件和文件,例如 .crt``.key ``yourdomain.com.crt ``yourdomain.com.key
生成私钥
openssl genrsa -out harbor.test.cn.key 4096
生成证书签名请求 (CSR)
调整选项中的值以反映您的组织。如果使用 FQDN 连接港口主机,则必须将其指定为公共名称 () 属性,并在密钥和 CSR 文件名中使用它。-subj ``CN
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.test.cn" \
-key harbor.test.cn.key \
-out harbor.test.cn.csr
生成 x509 v3 扩展文件
无论您使用 FQDN 还是 IP 地址连接到港口主机,都必须创建此文件,以便可以为符合主题替代名称 (SAN) 和 x509 v3 扩展要求的港湾主机生成证书。替换条目以反映您的域。
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=test.cn
DNS.2=test
DNS.3=harbor.test.cn
EOF
为港口主机生成证书
将 CRS 和 CRT 文件名中的替换为harbor主机名
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor.test.cn.csr \
-out harbor.test.cn.crt
三、向harbor和docker提供证书
生成ca.crt 、yourdomain.com.crt和 yourdomain.com.key文件后,必须将它们提供给harbor和docker,并重新配置harbor 以使用它们
将服务器证书和密钥复制到港湾主机上的证书文件夹中
cp harbor.test.cn.crt /data/cert/
cp harbor.test.cn.key /data/cert/
转换harbor.test.cn.crt
为harbor.test.cn.cert ,供 Docker 使用
Docker 守护进程将crt文件解释为 CA 证书,cert文件解释为客户端证书
openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert
将服务器证书、密钥和 CA 文件复制到港湾主机上的 Docker 证书文件夹中。您必须先创建相应的文件夹
cp harbor.test.cn.cert /etc/docker/certs.d/harbor.test.cn/
cp harbor.test.cn.key /etc/docker/certs.d/harbor.test.cn/
cp harbor.test.cn.crt /etc/docker/certs.d/harbor.test.cn/
重启docker
systemctl restart docker
四、 部署harbor
修改配置文件harbor.yml
两处需要修改
-
修改hostname
-
修改certificate 和key的路径
运行脚本以启用 HTTPS
[root@soft ~]# cd harbor
[root@soft harbor]# ./prepare
结束后执行install.sh
[root@soft harbor]# ./install.sh
harbor相关命令
查看结果,可以看到已经都是up的状态,同时启动了80和443端口映射
[root@soft harbor]# docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------------------
harbor-core /harbor/harbor_core Up (healthy)
harbor-db /docker-entrypoint.sh Up (healthy) 5432/tcp
harbor-jobservice /harbor/harbor_jobservice ... Up (healthy)
harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp
harbor-portal nginx -g daemon off; Up (healthy) 8080/tcp
nginx nginx -g daemon off; Up (healthy) 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp
redis redis-server /etc/redis.conf Up (healthy) 6379/tcp
registry /home/harbor/entrypoint.sh Up (healthy) 5000/tcp
registryctl /home/harbor/start.sh Up (healthy)
停止harbor运行
[root@soft harbor]# docker-compose down -v
Stopping nginx ... done
Stopping harbor-jobservice ... done
Stopping harbor-core ... done
Stopping harbor-portal ... done
Stopping redis ... done
Stopping registryctl ... done
Stopping harbor-db ... done
Stopping registry ... done
Stopping harbor-log ... done
Removing nginx ... done
Removing harbor-jobservice ... done
Removing harbor-core ... done
Removing harbor-portal ... done
Removing redis ... done
Removing registryctl ... done
Removing harbor-db ... done
Removing registry ... done
Removing harbor-log ... done
Removing network harbor_harbor
启动harbor进程
[root@soft harbor]# docker-compose up -d
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating registry ... done
Creating harbor-db ... done
Creating redis ... done
Creating harbor-portal ... done
Creating registryctl ... done
Creating harbor-core ... done
Creating nginx ... done
Creating harbor-jobservice ... done
自定义 端口
在harbor目录内的docker-compose.yml文件最下面
proxy:
image: goharbor/nginx-photon:v2.2.1
container_name: nginx
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
- NET_BIND_SERVICE
volumes:
- ./common/config/nginx:/etc/nginx:z
- /data/secret/cert:/etc/cert:z
- type: bind
source: ./common/config/shared/trust-certificates
target: /harbor_cust_cert
networks:
- harbor
dns_search: .
ports:
- 9084:8080
- 9443:8443
depends_on:
- registry
- core
- portal
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "proxy"
五、 登录测试
浏览器登录https://harbor.test.cn 需要电脑配置hosts.账号admin 密码Harbor12345
在需要上传镜像的服务器上修改docker仓库连接方式为http,否则默认https无法连接。这里以harbor.test.cn上我修改的sonarqube镜像为例
vim /etc/docker/daemon.json加入
{
"insecure-registries" : ["harbor.test.cn"]
}
重启Docker生效
systemctl restart docker