:安装Harbor需要docker环境,配置https需要openssl
通过github获取离线安装包,地址:https://github.com/goharbor/harbor/releases,可以根据自己的需要下载自己需要的release版本,这里使用的是v2.2.1,下载对应的离线安装包[harbor-
offline-
installer-v2.2.1.tgz](https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fgoharbor%2Fharbor%2Freleases%2Fdownload%2Fv2.2.1%2Fharbor-
offline-installer-v2.2.1.tgz)
image.png
前往github下载docker-
compose,地址:https://github.com/docker/compose/releases,根据自己的docker版本选择对应的release版本,这里安装的是1.29.1
image.png
mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
# 执行权限
chmod +x /usr/local/bin/docker-compose
# 检查是否安装成功,输出版本号表示安装成功
docker-compose - v
mkdir -p /apps
cd /apps
# 上传包
# 解压
tar -zxvf harbor-offline-installer-v2.2.1.tgz
# 复制一份配置文件
cd harbor
cp harbor.yml.tmpl harbor.yml
# 编辑配置文件
vim harbor.yml
主要编辑配置文件的以下内容
# 修改成你的ip
hostname: 192.168.211.99
# 修改端口号
http:
port: 880
# 如果不需要https,请注释掉https相关
#https:
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path
# 配置密码,将 Harbor12345换成你自己的密码
harbor_admin_password: Harbor12345
启动harbor
./install.sh
可以通过docker ps
查看各个组件是否启动完成,启动完成后,就可以通过你配置的IP +
PORT访问Harbor了,这里有个小坑,因为harbor本身依赖redis和nginx,如果你本机已经跑着名称为nginx和redis的容器,启动会报错,需要先将自己的redis或者nginx容器重命名才能启动成功。如果不需要开启https的话,可以宣布游戏结束了。
# 启动harbor
docker-compose up -d
# 关闭harbor
docker-compose down
因为Harbor要配合Rancher一起使用,rancher访问Harbor只支持https,所以要重新配置一下。
关键点:制作证书前需要设置openss的配置文件,在 v3_ca 下添加subjectAltName =
IP:192.168.211.99,否则做出来的证书使用docker登录会报:x509: cannot validate certificate for
192.168.211.99 because it doesn't contain any IP SANs
错误。这里192.168.211.99
需要替换成harbor所在机器的ip
vim /etc/pki/tls/openssl.cnf
在[ v3_ca ]
下添加以下内容,ip替换成harbor机器所在ip
subjectAltName = IP:192.168.211.99
生成CA证书私钥和CA证书
# 切换到harbor证书所在的目录,可以自己创建目录,和后面配置对上就好
mkdir -p /apps/harbor/cert
cd /apps/harbor/cert
# 执行证书命令
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout ca.key \
-x509 -days 3650 -out ca.crt \
-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=NETSION/OU=IT/CN=192.168.211.99/emailAddress=xxxx@xxx.com"
说明:C=CN(国家),ST=Guangdong(省份),L=Shenzhen(城市),O=NETSION(公司),OU=IT(部门),CN=192.168.211.99(IP,harbor的ip),emailAddress=XXX@XXX.com(换成你自己的邮箱,或者随便填)
执行完后,会得到两个文件ca.crt
和ca.key
生成服务器证书
# 私钥
openssl genrsa -out 192.168.211.99.key 4096
openssl req -sha512 -new -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=NETSION/OU=IT/CN=192.168.211.99/emailAddress=xxxx@xxxx.com" -key 192.168.211.99.key -out 192.168.211.99.csr
生成一个使用ip进行访问的x509 v3扩展文件
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:192.168.211.99
EOF
使用刚才生成的v3.ext
生成Harbor主机证书
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in 192.168.211.99.csr \
-out 192.168.211.99.crt
转换192.168.211.99.crt
为192.168.211.99.cert
,供Docker使用,Docker守护程序将.crt
文件解释为CA证书,并将.cert
文件解释为客户端证书
openssl x509 -inform PEM -in 192.168.211.99.crt -out 192.168.211.99.cert
到这里我们已经生成了一村证书了
[root@localhost cert]# ls
192.168.211.99.cert 192.168.211.99.crt 192.168.211.99.csr 192.168.211.99.key ca.crt ca.key ca.srl v3.ext
# 编辑配置文件
cd /apps/harbor
vim harbor.yml
主要修改以下内容,端口默认443,certificate和private_key替换成你自己的证书路径
# 放开之前注释掉的https部分,并修改其内容
https:
# https port for harbor, default is 443
port: 8443
# The path of cert and key files for nginx
certificate: /apps/harbor/cert/192.168.211.99.crt
private_key: /apps/harbor/cert/192.168.211.99.key
将服务器证书,密钥和CA文件复制到Harbor主机上的Docker证书文件夹中
mkdir -p /etc/docker/certs.d/192.168.211.99:8843
cp 192.168.211.99.cert 192.168.211.99.key ca.crt /etc/docker/certs.d/192.168.211.99:8843
这里文件夹的命名是有规则限定的,/etc/docker/certs.d/yourdomain.com:port
或/etc/docker/certs.d/harbor_IP:port
,yourdomain.com
,harbor_IP
根据自己的情况填写harbor域名或者ip,因为我这里使用的时ip访问,所以配置的是ip,port
为你配置的https端口,如果是默认的443可以不填写端口,如果你使用的是非默认值,文件夹名称请加上端口号且需要和harbor.yml
配置的https端口对应上
# 关闭harbor
docker-compose down -v
# 重启docker
service docker restart
# 重新配置
./prepare
# 启动
./install.sh
ps:我看到网上有些教程在执行./prepare
之后直接docker-compose -d
就可以了。但是我发现我执行的时候报错了,`docker
ps -a发现之前相关的容器全部没有了,所以就直接在
./install`了一次
页面访问我们的http端口880,发现已经可以自动跳转到https端口8443了
image.png
使用admin,密码使用之前在配置文件中配置的密码,默认Harbor12345
,登录成功后便看到了harbor清爽的界面
image.png
# 随后输入密码
docker login https://192.168.211.99:8443 -u admin
# 拉一个镜像
docker pull mongo
# tag镜像
docker tag mongo:latest 192.168.211.99:8443/library/mongo:latest
# 推送镜像
docker psuh 192.168.211.99:8443/library/mongo:latest
镜像已经推入harbor中
image.png
因为我们的证书是自己制作的,所以要将CA证书发送到其他机器上添加信任,我自己harbor所在的机器ip为192.168.211.99
,演示在192.168.211.100
机器上配置信任
在Harbor机器上的操作
cd /apps/harbor/cert
# 发送
scp ca.crt root@192.168.211.100:/home
在192.168.211.100
另外机器上的操作
# 切换scp过来的目录
cd /home
# 创建证书文件夹,命名规则和上面介绍的一样
mkdir -p /etc/docker/certs.d/192.168.211.99:8443/
# 添加证书
mv ca.crt /etc/docker/certs.d/192.168.211.99:8443/
# 登录docker
docker login https://192.168.211.99:8443 -u admin
# pull我们刚才推送上去的镜像
docker pull 192.168.211.99:8443/library/mongo:latest
如果登录的时候出现以下报错,则是时间不同步问题,导致证书失效
Error response from daemon: Get https://192.168.211.99/v2/: x509: certificate has expired or is not yet valid
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。