zl程序教程

您现在的位置是:首页 >  其他

当前栏目

docker安装harborps

2023-04-18 14:27:54 时间

:安装Harbor需要docker环境,配置https需要openssl

1 获取Harbor离线安装包

通过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

2 下载docker-compose

前往github下载docker-

compose,地址:https://github.com/docker/compose/releases,根据自己的docker版本选择对应的release版本,这里安装的是1.29.1

image.png

3 安装docker-compose

mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
# 执行权限
chmod +x /usr/local/bin/docker-compose
# 检查是否安装成功,输出版本号表示安装成功
docker-compose - v

4 安装Harbor

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的话,可以宣布游戏结束了。

5 Harbor常用命令

# 启动harbor
docker-compose up -d
# 关闭harbor
docker-compose down

6 配置https

因为Harbor要配合Rancher一起使用,rancher访问Harbor只支持https,所以要重新配置一下。

6.1 修改openss的配置

关键点:制作证书前需要设置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

6.2 制作证书

生成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.crtca.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.crt192.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

6.3 使用证书

# 编辑配置文件
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:portyourdomain.comharbor_IP根据自己的情况填写harbor域名或者ip,因为我这里使用的时ip访问,所以配置的是ip,port为你配置的https端口,如果是默认的443可以不填写端口,如果你使用的是非默认值,文件夹名称请加上端口号且需要和harbor.yml配置的https端口对应上

6.4 重启docker与harbor

# 关闭harbor
docker-compose down -v
# 重启docker
service docker restart
# 重新配置
./prepare
# 启动
./install.sh

ps:我看到网上有些教程在执行./prepare之后直接docker-compose -d就可以了。但是我发现我执行的时候报错了,`docker

ps -a发现之前相关的容器全部没有了,所以就直接在./install`了一次

6.5 验证https

页面访问我们的http端口880,发现已经可以自动跳转到https端口8443了

image.png

使用admin,密码使用之前在配置文件中配置的密码,默认Harbor12345,登录成功后便看到了harbor清爽的界面

image.png

7 本机docker推送镜像到harbor中

# 随后输入密码
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

8 其他机器推送镜像到harbor中

因为我们的证书是自己制作的,所以要将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