一、准备工作
1、设置主机名并配置hosts解析
hostnamectl set-hostname harbor1.dev
hostnamectl set-hostname harbor2.dev
vi /etc/hosts
192.168.17.15 harbor1.dev
192.168.17.16 harbor2.dev
2、时间同步
# 启动chronyd服务
systemctl start chronyd
systemctl enable chronyd
date
二、生成证书
# 创建证书目录
mkdir -p /app/harbor/cert && cd /app/harbor/cert
# 生成ca证书私钥ca.key
openssl genrsa -out ca.key 4096
# 生成ca证书ca.crt
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=linux.io" \
-key ca.key \
-out ca.crt
# 生成服务器证书
## 生成服务器证书私钥
openssl genrsa -out harbor-server.key 4096
## 生成服务器证书
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=linux.io" \
-key harbor-server.key \
-out harbor-server.csr
## 生成 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=linux.io
DNS.2=harbor1.dev
DNS.3=harbor2.dev
EOF
## 使用v3.ext生成服务器证书
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor-server.csr \
-out harbor-server.crt
#删除证书请求文件
rm -f harbor-server.csr
然后将证书拷贝到每个harbor-server
cd /app/harbor/cert/
scp * root@192.168.17.15:/app/harbor/cert/
scp * root@192.168.17.16:/app/harbor/cert/
三、安装docker
https://download.docker.com/linux/static/stable/x86_64/
四、安装docker-compuse
https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64
注:网页下载不下来可以使用迅雷
五、harbor部署
1、下载安装包
wget https://github.com/goharbor/harbor/releases/download/v2.11.1/harbor-offline-installer-v2.11.1.tgz
tar -zxvf harbor-offline-installer-v2.11.1.tgz -C /app
cd /app
cp harbor.yml.tmpl harbor.yml
解压软件包之后有这些文件及目录:
修改这些地方:
vi /usr/local/harbor/harbor.yml
# 将hostname改成本机IP或域名,不要用localhost,127.0.0.1或0.0.0.0,冒号后面都有一个空格
hostname: harbor1.dev #多个harbor服务要区分
# 将http端口改成10080,因为默认用的80端口已经被占用,http可以指定任意端口
http:
port: 10080
# 配置https的端口,只能使用443端口,更改证书路径,证书路径为刚刚生成的https证书的实际路径
https:
port: 10443
certificate: /app/cert/harbor/harbor-server.crt
private_key: /app/cert/harbor/harbor-server.key
# 修改后台管理密码
harbor_admin_password: harbor12345
# harbor的内部数据库密码
database:
password: root123
# 修改harbor数据存储路径与日志存储路径,目录要先创建好并赋予777权限
data_volume: /data/harbor-data
# 修改日志存放路径,默认路径为/var/log/harbor
log:
local:
localtion: /data/harbor-log
安装harbor
./install.sh
修改harbor.yml之后需要执行
./prepare
docker-compose down
docker-compose up -d
在两个harbor创建相同的项目 test_item(项目名按实际情况创建即可)
在harbor1上配置指向harbor2的复制规则(两个harbor操作一致)
添加完以后要先进行测试,测试成功后点击确定
这里会出现连接其他仓库报错(测试一直失败)
原因:
禁止ping导致
也可能就是解析不到域名(但是我直接用了ip还是不行,也确实是修改了容器的hosts搞定的)
解决办法:
1、 查看barbor镜像中,/etc/hosts下的文件
docker ps |grep harbor-core
docker exec -it 98e654f768f3 /bin/bash
cat /etc/hosts #查看是否有hosts解析,连接其他仓库报错一般都是容器里面没有hosts解析
2 、将本地的/etc/hosts挂载到容器中(两台都要)
# 修改docker-compose.yml挂载hosts文件
第一处:jobservice
~] vi /usr/local/harbor/docker-compose.yml
jobservice:
image: goharbor/harbor-jobservice:v2.10.0
container_name: harbor-jobservice
env_file:
- ./common/config/jobservice/env
restart: always
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
volumes:
- /data/job_logs:/var/log/jobs:z
- /etc/hosts:/etc/hosts:z #添加这行
- type: bind
...........
第二处:core
core:
image: goharbor/harbor-core:v2.10.0
container_name: harbor-core
env_file:
- ./common/config/core/env
restart: always
cap_drop:
- ALL
cap_add:
- SETGID
- SETUID
volumes:
- /data/ca_download/:/etc/core/ca/:z
- /etc/hosts:/etc/hosts:z #添加这行
- /data/:/data/:z
- ./common/config/core/certificates/:/etc/core/certificates/:z
..........
3 、重新加载harbor(两台都要)
docker-compose down
docker-compose up -d
docker-compose ps
# 如果执行命令报错,加上-f参数 指定一下配置文件路径或者进入harbor目录 cd /usr/local/harbor 执行
# 通常是找不到docker-compose.yml文件在哪
docker-compose ps
no configuration file provided: not found
docker-compose -f /usr/local/harbor/docker-compose.yml up -d
4、再次在页面上进行测试,成功后点击确定
5、然后创建复制策略(两个harbor操作一致)
六、测试harbor
docker客户端登录harbor仓库配置docker使用https访问harbor,将harbor的证书分发至docker(如果配置了/etc/docker/daemon.json 这步就不用做了 )
可docker客户端创建
mkdir /etc/docker/certs.d/harbor1.dev/
#把ca.crt与harbor-server.crt放到客户端
scp ca.crt /etc/docker/certs.d/harbor1.dev/ca.crt
scp harbor-server.crt /etc/docker/certs.d/harbor1.dev/harbor-server.crt
配置docker客户端 /etc/docker/daemon.json 文件
vi /etc/docker/daemon.json
{
"insecure-registries": ["harbor1.dev:10443"]
}
如果两步都不做那么就会报错
报错详细:
Error response from daemon: Get "https://harbor1.dev/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority
登录验证
[root@localhost docker]# docker login harbor1.dev:10443
Username (admin): admin
Password:
Login Succeeded
[root@localhost docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
harbor1.dev:10443/test_item/nginx-lt 1.0 21bcbd28dffd 25 hours ago 108 MB
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx latest e4e6d42c70b3 7 years ago 108 MB
# 打标签,仓库名称要看好。
docker tag li/nginx-lt:1.0 harbor1.dev:10443/test_item/nginx-lt:1.0
# 推镜像到harbor仓库
docker push harbor1.dev:10443/test_item/nginx-lt:1.0
查看镜像是否同步到两个harbor