使用acme证书搭建harbor私有镜像仓库

[TOC]

使用acme证书搭建harbor私有镜像仓库

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书. https://github.com/Neilpang/acme.sh

环境准备

腾讯云服务器: OS: Centos7.4 172.21.32.8 62.234.69.63 域名:hub.mapollo.com 解析到以上IP地址

基础安装

安装docker-ce docker-compose python3 pip

安装acme.sh

yum -y install socat
curl https://get.acme.sh | sh
cd ~/.acme.sh
自动申请证书条件:域名正确指向服务器公网地址,确认此服务器80端口未被占用且可访问。
sh acme.sh --issue -d hub.mapollo.com --standalone 成功结果:

[Wed Jan 16 10:09:03 CST 2019] Your cert is in  /root/.acme.sh/hub.mapollo.com/hub.mapollo.com.cer 
[Wed Jan 16 10:09:03 CST 2019] Your cert key is in  /root/.acme.sh/hub.mapollo.com/hub.mapollo.com.key 
[Wed Jan 16 10:09:04 CST 2019] The intermediate CA cert is in  /root/.acme.sh/hub.mapollo.com/ca.cer 
[Wed Jan 16 10:09:04 CST 2019] And the full chain certs is there:  /root/.acme.sh/hub.mapollo.com/fullchain.cer 

安装harbor

下载: wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.0.tgz 解压:
tar -zxvf harbor-offline-installer-v1.7.0.tgz 先不使用证书,修改配置文件harbor.cfg中hostname项为正确的域名 安装: ./install.sh

验证

[root@VM_32_8_centos harbor]# docker-compose ps
       Name                     Command                  State                                    Ports                              
-------------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver   /harbor/start.sh                 Up (healthy)                                                                   
harbor-core          /harbor/start.sh                 Up (healthy)                                                                   
harbor-db            /entrypoint.sh postgres          Up (healthy)   5432/tcp                                                        
harbor-jobservice    /harbor/start.sh                 Up                                                                             
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)   80/tcp                                                          
nginx                nginx -g daemon off;             Up (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
redis                docker-entrypoint.sh redis ...   Up             6379/tcp                                                        
registry             /entrypoint.sh /etc/regist ...   Up (healthy)   5000/tcp                                                        
registryctl          /harbor/start.sh                 Up (healthy)                   

手动启动停止honbor

docker-compose up -d

docker-compose down

已经可以通过浏览器登录harbor user:admin pass: Harbor12345 创建测试项目,测试用户,分配用户权限
http://hub.mapollo.com

push 镜像
由于采用了默认的 http 方式连接,而 Docker 认为这是不安全的,所以在 push 之前需要调整一下 docker 配置,
修改/lib/systemd/system/docker.service文件,添加--insecure-registry hub.mapollo.com,重启docker daemon 和service
ExecStart=/usr/bin/docker --insecure-registry hub.mapollo.com
systemctl daemon-reload  && systemctl restart docker

从hub.docker.io上pull ubuntu
docker pull ubuntu:16.04 
打上我们的标签, 默认这个 library 项目是公开的,所有人都可以有读写的权限
docker tag ubuntu:16.04 hub.mapollo.com/library/myubuntu:v1
docker tag tomcat:latest hub.mapollo.com/library/myubuntu:v1

docker login hub.mapollo.com # 输入新建的用户名密码
docker push hub.mapollo.com/library/myubuntu:v1 

推送成功

http://hub.mapollo.com 上查看推送的项目

安装harnor nginx 证书

harbor默认配置证书放置在/data/cert/目录下,证书文件名也需要和harbor.cfg配置文件中的一一对应。在执行后续prepare的时候会被copy到nginx容器的配置文件目录harbor/common/config/nginx/cert/中。 在此发现一个问题:证书更新后再次执行prepare不会覆盖更新harbor/common/config/nginx/cert中的文件。会导致nginx证书无效。 mkdir -p /data/cert/ ./acme.sh --install-cert -d hub.mapollo.com --key-file /data/cert/hub.mapollo.com.key --fullchain-file /data/cert/hub.mapollo.com.crt

停止harbor
docker-compose down -v
#修改harbor配置文件 更改https,证书文件名
sed -i s/server.crt/hub.mapollo.com.cft/ harbor.cfg sed -i s/server.key/hub.mapollo.com.key/ harbor.cfg sed -i s/ui_url_protocol\ =\ http/ui_url_protocol\ =\ https/g harbor.cfg #重新生成harbor docker 配置
/opt/harbor/prepare

删除 docker.service 修改
ExecStart=/usr/bin/docker  systemctl daemon-reload && systemctl restart docker

重新启动harbor
docker-compose up -d 重新登录harbor
docker login hub.mapollo.com
登录成功
再次测试push image
docker pull tomcat

docker tag tomcat:latest hub.mapollo.com/library/mytomcat:v1

docker push hub.mapollo.com/library/mytomcat:v1

证书有效期

acme.sh申请的证书有效期90天,acme.sh安装的时候已经自动添加了一个计划任务每天自动更新证书,更新后重启使用证书的服务。 acme.sh自动添加的计划任务

[root@VM_32_8_centos .acme.sh]# crontab  -l | grep acme
11 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

该计划任务也会自动执行证书上一次的安装命令,为确保nginx使用最新的证书,重新执行一次安装证书命令让acme.ch将证书文件安装到正确的位置及重启nginx服务。

acme.sh --install-cert -d hub.mapollo.com \
               --key-file     /opt/harbor/common/config/nginx/cert/server.key \
               --fullchainpath /opt/harbor/common/config/nginx/cert/server.crt \
               --reloadcmd     "docker restart 8d3983815cec"

写在最后 验证 SSL

访问 ssllabs.com 输入你的域名,检查 SSL 的配置是否都正常:

https://ssllabs.com/ssltest/analyze.html?d=domainname.com

确保验证结果有 A 以上,否则根据提示调整问题

转载于:https://my.oschina.net/winniepoohmeng/blog/2992566

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值