前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker安装harborps

docker安装harborps

原创
作者头像
ruochen
发布2021-12-04 09:56:51
1.5K0
发布2021-12-04 09:56:51
举报
文章被收录于专栏:若尘的技术专栏

:安装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

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

4 安装Harbor

代码语言:txt
复制
mkdir -p /apps
代码语言:txt
复制
cd /apps
代码语言:txt
复制
# 上传包
代码语言:txt
复制
# 解压
代码语言:txt
复制
tar -zxvf harbor-offline-installer-v2.2.1.tgz
代码语言:txt
复制
# 复制一份配置文件
代码语言:txt
复制
cd harbor
代码语言:txt
复制
cp harbor.yml.tmpl harbor.yml
代码语言:txt
复制
# 编辑配置文件
代码语言:txt
复制
vim harbor.yml

主要编辑配置文件的以下内容

代码语言:txt
复制
# 修改成你的ip
代码语言:txt
复制
hostname: 192.168.211.99
代码语言:txt
复制
# 修改端口号
代码语言:txt
复制
http:
代码语言:txt
复制
  port: 880
代码语言:txt
复制
# 如果不需要https,请注释掉https相关
代码语言:txt
复制
#https:
代码语言:txt
复制
#  port: 443
代码语言:txt
复制
#  certificate: /your/certificate/path
代码语言:txt
复制
#  private_key: /your/private/key/path
代码语言:txt
复制
# 配置密码,将 Harbor12345换成你自己的密码
代码语言:txt
复制
harbor_admin_password: Harbor12345

启动harbor

代码语言:txt
复制
./install.sh

可以通过docker ps查看各个组件是否启动完成,启动完成后,就可以通过你配置的IP +

PORT访问Harbor了,这里有个小坑,因为harbor本身依赖redis和nginx,如果你本机已经跑着名称为nginx和redis的容器,启动会报错,需要先将自己的redis或者nginx容器重命名才能启动成功。如果不需要开启https的话,可以宣布游戏结束了。

5 Harbor常用命令

代码语言:txt
复制
# 启动harbor
代码语言:txt
复制
docker-compose up -d
代码语言:txt
复制
# 关闭harbor
代码语言:txt
复制
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

代码语言:txt
复制
vim /etc/pki/tls/openssl.cnf

[ v3_ca ]下添加以下内容,ip替换成harbor机器所在ip

代码语言:txt
复制
subjectAltName = IP:192.168.211.99

6.2 制作证书

生成CA证书私钥和CA证书

代码语言:txt
复制
# 切换到harbor证书所在的目录,可以自己创建目录,和后面配置对上就好
代码语言:txt
复制
mkdir -p /apps/harbor/cert
代码语言:txt
复制
cd /apps/harbor/cert
代码语言:txt
复制
# 执行证书命令
代码语言:txt
复制
openssl req \
代码语言:txt
复制
-newkey rsa:4096 -nodes -sha256 -keyout ca.key \
代码语言:txt
复制
-x509 -days 3650 -out ca.crt \
代码语言:txt
复制
-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

生成服务器证书

代码语言:txt
复制
# 私钥
代码语言:txt
复制
openssl genrsa -out 192.168.211.99.key 4096
代码语言:txt
复制
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扩展文件

代码语言:txt
复制
cat > v3.ext <<-EOF
代码语言:txt
复制
authorityKeyIdentifier=keyid,issuer
代码语言:txt
复制
basicConstraints=CA:FALSE
代码语言:txt
复制
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
代码语言:txt
复制
extendedKeyUsage = serverAuth
代码语言:txt
复制
subjectAltName = IP:192.168.211.99
代码语言:txt
复制
EOF

使用刚才生成的v3.ext生成Harbor主机证书

代码语言:txt
复制
openssl x509 -req -sha512 -days 3650 \
代码语言:txt
复制
    -extfile v3.ext \
代码语言:txt
复制
    -CA ca.crt -CAkey ca.key -CAcreateserial \
代码语言:txt
复制
    -in 192.168.211.99.csr \
代码语言:txt
复制
    -out 192.168.211.99.crt

转换192.168.211.99.crt192.168.211.99.cert,供Docker使用,Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书

代码语言:txt
复制
openssl x509 -inform PEM -in 192.168.211.99.crt -out 192.168.211.99.cert

到这里我们已经生成了一村证书了

代码语言:txt
复制
[root@localhost cert]# ls
代码语言:txt
复制
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 使用证书

代码语言:txt
复制
# 编辑配置文件
代码语言:txt
复制
cd /apps/harbor
代码语言:txt
复制
vim harbor.yml

主要修改以下内容,端口默认443,certificate和private_key替换成你自己的证书路径

代码语言:txt
复制
# 放开之前注释掉的https部分,并修改其内容
代码语言:txt
复制
https:
代码语言:txt
复制
  # https port for harbor, default is 443
代码语言:txt
复制
  port: 8443
代码语言:txt
复制
  # The path of cert and key files for nginx
代码语言:txt
复制
  certificate: /apps/harbor/cert/192.168.211.99.crt
代码语言:txt
复制
  private_key: /apps/harbor/cert/192.168.211.99.key

将服务器证书,密钥和CA文件复制到Harbor主机上的Docker证书文件夹中

代码语言:txt
复制
mkdir -p /etc/docker/certs.d/192.168.211.99:8843
代码语言:txt
复制
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

代码语言:txt
复制
# 关闭harbor
代码语言:txt
复制
docker-compose down -v
代码语言:txt
复制
# 重启docker
代码语言:txt
复制
service docker restart
代码语言:txt
复制
# 重新配置
代码语言:txt
复制
./prepare
代码语言:txt
复制
# 启动
代码语言:txt
复制
./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中

代码语言:txt
复制
# 随后输入密码
代码语言:txt
复制
docker login https://192.168.211.99:8443 -u admin
代码语言:txt
复制
# 拉一个镜像
代码语言:txt
复制
docker pull mongo
代码语言:txt
复制
# tag镜像
代码语言:txt
复制
docker tag mongo:latest 192.168.211.99:8443/library/mongo:latest
代码语言:txt
复制
# 推送镜像
代码语言:txt
复制
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机器上的操作

代码语言:txt
复制
cd /apps/harbor/cert
代码语言:txt
复制
# 发送
代码语言:txt
复制
scp ca.crt root@192.168.211.100:/home

192.168.211.100另外机器上的操作

代码语言:txt
复制
# 切换scp过来的目录
代码语言:txt
复制
cd /home
代码语言:txt
复制
# 创建证书文件夹,命名规则和上面介绍的一样
代码语言:txt
复制
mkdir -p /etc/docker/certs.d/192.168.211.99:8443/
代码语言:txt
复制
# 添加证书
代码语言:txt
复制
mv ca.crt /etc/docker/certs.d/192.168.211.99:8443/
代码语言:txt
复制
# 登录docker
代码语言:txt
复制
docker login https://192.168.211.99:8443 -u admin
代码语言:txt
复制
# pull我们刚才推送上去的镜像
代码语言:txt
复制
docker pull 192.168.211.99:8443/library/mongo:latest

如果登录的时候出现以下报错,则是时间不同步问题,导致证书失效

代码语言:txt
复制
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 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 获取Harbor离线安装包
  • 2 下载docker-compose
  • 3 安装docker-compose
  • 4 安装Harbor
  • 5 Harbor常用命令
  • 6 配置https
    • 6.1 修改openss的配置
      • 6.2 制作证书
        • 6.3 使用证书
          • 6.4 重启docker与harbor
            • 6.5 验证https
            • 7 本机docker推送镜像到harbor中
            • 8 其他机器推送镜像到harbor中
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档