Linux下私有仓库harbor的搭建部署之https的方式访问Web Ui(二)(docker版本:18.06.1-ce)

续我的上篇博文:https://mp.csdn.net/postedit/88723940

 

 

部署 SSL 认证(使用https的方式访问Web Ui)

 

配置服务端(server1):

 

1、概念理解

 

1、签名证书与自签名证书

  • 签名证书:由权威颁发机构颁发给服务器或者个人用于证明自己身份的东西
  • 自签名证书:由服务器自己颁发给自己,用于证明自己身份的东西,非权威颁发机构发布

2、openssl
openssl 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用

3、KEY与CSR的区别

  • Key通常用来存放一个公钥或者私钥,并非X.509证书,编码同样的,可能是PEM,也可能是DER。证书自身拥有一个密钥对(即一个公钥和一个私钥),由公钥(Public Key)与私钥(Private Key)是通过一种算法得到,公钥是密钥对中公开的部分,私钥则是非公开的部分。一般公钥和密钥的关系为:1,公钥和私钥成对出现、2,公开的密钥叫公钥,只有自己知道的叫私钥、3,用公钥加密的数据只有对应的私钥可以解密、4,用私钥加密的数据只有对应的公钥可以解密、5,如果可以用公钥解密,则必然是对应的私钥加的密、6,如果可以用私钥解密,则必然是对应的公钥加的密。
  • CSR文件必须在申请和购买SSL证书之前创建。也就是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书 申请 者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书

 

2 、下载并安装docker-compose (上篇博文已经做过)

 

3、下载并安装harbor(这里下载在线安装包)——上篇博文已经做过

 

4、修改 Harbor 的配置文件 hardor.cfg——>上篇博文已经修改过hostname。

 

[root@server1 harbor]# pwd
/root/harbor
[root@server1 harbor]# vim harbor.cfg
9 ui_url_protocol = https   #修改成https

#查看认证文件的路径
24 ssl_cert = /data/cert/server.crt
25 ssl_cert_key = /data/cert/server.key

 

5、创建根证书

 

<1> 创建证书存放目录

[root@server1 harbor]# mkdir /data/cert   #harbor.cfg文件中指定的目录
[root@server1 harbor]# cd /data/cert

 

<2>创建根证书私钥(不使用第三方权威机构的CA来认证,自己充当CA的角色)

[root@server1 cert]# openssl genrsa -out ca.key 2048   #生成根证书私钥(无加密),必须在cert目录中操作
Generating RSA private key, 2048 bit long modulus
.......................................+++
..............+++
e is 65537 (0x10001)
[root@server1 cert]# ls
ca.key

 

<3>生成自签名证书(使用已有私钥ca.key自行签发根证书)

[root@server1 cert]# openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt -subj "/CN=Harbor-ca"   #必须在cert目录中操作
[root@server1 cert]# ls
ca.crt  ca.key

 

6、创建服务器端证书并签发服务器证书

 

<1>创建服务器端证书

[root@server1 cert]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout server.key -out server.csr   #一路回车。必须在cert目录中操作

#注意如果是域名,比如chen.org,那么需要写入chen.org
Common Name (eg, your name or your server's hostname) []:chen.org

 

 

<2>签发服务器证书

[root@server1 cert]# echo subjectAltName = IP:172.25.83.1 > extfile.cnf  #必须在cert目录中操作。如果是域名,比如chen.org,那么这步是不需要的。
[root@server1 cert]# ls
ca.crt  ca.key  extfile.cnf  server.csr  server.key
[root@server1 cert]# openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 365 -extfile extfile.cnf -out server.crt   #必须在cert目录中操作。如果是域名,比如chen.org,那么这步中把参数-extfile extfile.cnf去掉即可
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd
Getting CA Private Key
[root@server1 cert]# ls
ca.crt  ca.key  ca.srl  extfile.cnf  server.crt  server.csr  server.key

#参数解释
x509:签发X.509格式证书命令。
-req:表示证书输入请求。
-in filename:表示输入文件,这里为server.csr
-out filename:表示输出文件,这里为server.crt
-days:表示有效天数
-extensions 表示按OpenSSL配置文件v3_req项添加扩展。
-CA certname:表示CA证书,这里为ca.crt
-CAkey keyname:表示CA证书密钥,这里为ca.key
-CAcreateserial:表示创建CA证书序列号
-extfile filename:指定文件

 

7、设置 docker 证书

 

<1>创建目录

# 如果如下目录不存在,请创建。

mkdir -p /etc/docker/certs.d/172.25.83.1

#如果是域名,比如chen.org,请创建下面的目录

# mkdir -p /etc/docker/certs.d/chen.org

# 如果端口为443,则不需要指定。如果为自定义端口,请指定端口

# /etc/docker/certs.d/yourdomain.com:port

 

[root@server1 cert]# mkdir -p /etc/docker/certs.d/172.25.83.1

 

<2>将 ca 根证书和服务器证书依次复制到上述创建的目录中

cp ca.crt /etc/docker/certs.d/172.25.83.1      #如果是域名,比如chen.org。cp ca.crt /etc/docker/certs.d/chen.org
cp server.crt /etc/docker/certs.d/172.25.83.1   #如果是域名,比如chen.org。cp server.crt /etc/docker/certs.d/chen.org

 

[root@server1 cert]# pwd
/data/cert
[root@server1 cert]# cp ca.crt /etc/docker/certs.d/172.25.83.1/
[root@server1 cert]# cp server.crt /etc/docker/certs.d/172.25.83.1/

 

8、确保80端口和443端口没有容器或服务在占用(因为启动harbor时所产生的服务要占用80端口和443端口)——上篇博文已经做过

 

 

9、重启 docker 和 启动 Harbor

 

[root@server1 cert]# systemctl restart docker
[root@server1 cert]# cd /root/harbor/
[root@server1 harbor]# ./install.sh 

 

10、web界面查看

启动完成后,我们访问刚设置的 hostname 即可 https://172.25.83.1/,默认是443端口,如果端口占用,我们可以去修改docker-compose.yml文件中,对应服务的端口映射

点击Advanced

点击Add Exception

点击Confirm Security Exception

我们可以点击,右上角的English,将字体调整为中文

默认用户名和密码是:admin/Harbor12345


其中my_harbor是上篇博文添加的私有项目


 

11、修改文件/usr/lib/systemd/system/docker.service,并重启docker服务(将之前增加的--insecure-registry=172.25.83.1删除)

 

[root@server1 harbor]# vim /usr/lib/systemd/system/docker.service
12 ExecStart=/usr/bin/dockerd 
[root@server1 harbor]# systemctl daemon-reload 
[root@server1 harbor]# systemctl restart docker

 

12、后台登录——>上篇博文登录过,所以/root/.docker/config.json文件中有记录,所以这里不用再次登录。

 

 

 

13、上传镜像172.25.83.1/my_harbor/rhel7:nginx3

 

[root@server1 ~]# docker tag rhel7:nginx3 172.25.83.1/my_harbor/rhel7:nginx3
[root@server1 .docker]# docker push 172.25.83.1/my_harbor/rhel7:nginx3
The push refers to repository [172.25.83.1/my_harbor/rhel7]
a58cd834c342: Pushed   #显示Pushed表示上传成功
18af9eb19b5f: Pushed 
nginx3: digest: sha256:cd2d6a5c6e56c4d021dc9343118ca8aa7f80c2bbfdc0bddc0cb414ef529e8918 size: 739

 

push镜像成功之后,然后在web界面上查看镜像是否存在

可以看到之前上传的镜像,表示配置成功。

 


web界面看到的内容,也就是之前上传的镜像(172.25.83.1/my_harbor/rhel7:nginx3)。该内容和/data/registry(/data目录在harbor.cfg文件中指定过)的内容是同步的。也就是说,如果将/data/registry目录下的内容删除,web界面也就看不到相应的内容了,同时pull会失败。


 


注:其他服务器如果需要访问 Harbor 仓库,把 /etc/docker/certs.d/192.168.80.42 文件夹复制到该主机的相同位置即可


 

客户端测试(物理机):

 

在下载之前,

我们需要先获取harbor仓库类的镜像:

以及获取某个镜像的标签列表:

 

 

<1>修改文件/usr/lib/systemd/system/docker.service,并重启docker服务(将之前增加的--insecure-registry=172.25.83.1删除)

[root@foundation83 ~]# vim /usr/lib/systemd/system/docker.service
12 ExecStart=/usr/bin/dockerd 
[root@foundation83 ~]# systemctl daemon-reload 
[root@foundation83 ~]# systemctl restart docker

 

<2>获取证书

 

[root@foundation83 ~]# mkdir /etc/docker/certs.d/172.25.83.1 -p   #目录的名字必须是这个
[root@server1 172.25.83.1]# scp ca.crt server.crt root@172.25.83.83:/etc/docker/certs.d/172.25.83.1/   #将server1上的ca.crt文件和server.crt文件复制到物理机的/etc/docker/certs.d/172.25.83.1目录下

 

<3>登录172.25.83.1——>上篇博文登录过,所以/root/.docker/config.json文件中有记录,所以这里不用再次登录。

 

 

<4>下载镜像172.25.83.1/my_harbor/rhel7:nginx3

[root@foundation83 ~]# docker pull 172.25.83.1/my_harbor/rhel7:nginx3
nginx3: Pulling from my_harbor/rhel7
48f5bbc9baf5: Already exists 
101320d6419d: Pull complete   #显示Pull complete表示pull成功
Digest: sha256:cd2d6a5c6e56c4d021dc9343118ca8aa7f80c2bbfdc0bddc0cb414ef529e8918
Status: Downloaded newer image for 172.25.83.1/my_harbor/rhel7:nginx3

 

##如果看不惯镜像172.25.83.1/my_harbor/rhel7:nginx3这个名字,可以改名字
[root@foundation83 ~]# docker tag 172.25.83.1/my_harbor/rhel7:nginx3 rhel7:nginx3
[root@foundation83 ~]# docker rmi 172.25.83.1/my_harbor/rhel7:nginx3 

 


服务端可以上传镜像,也可以下载镜像(这里不再演示,同客户端的pull);客户端如果登录了,当然可以上传镜像(这里不再演示,同服务端的push),也可以下载镜像。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值