之前安装的harbor都是基于http,需要修改docker的/etc/docker/daemon.json文件,新增insecure-registries配置,这样又需要重启下docker服务了。为了减少对正在运行的容器服务影响,我们可以配置harbor支持https来解决。
以下内容大部分来自harbor的官方文档的参考。Harbor https证书可以使用由受信任的第三方CA签名的证书,也可以使用自签名证书。
https://goharbor.io/docs/2.0.0/install-config/configure-https/
本文我们参考官方文档,采用openssl生成自签名证书
准备工作
1.harbor离线包下载
wget https://github.com/goharbor/harbor/releases/download/v2.1.0/harbor-offline-installer-v2.1.0.tgz
2.安装docker和docker-compose
略。。。
3.检查下主机hosts添加下主机名的解析,harbor域名本机ip解析(或者你加入dns)
证书生成
1.生成CA证书私钥
openssl genrsa -out ca.key 4096
2.生成CA证书
openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" -key ca.key -out ca.crt
3.生成服务器证书私钥
openssl genrsa -out yourdomain.com.key 4096
4.生成服务器证书签名请求(CSR)
openssl req -sha512 -new -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" -key yourdomain.com.key -out yourdomain.com.csr
5.生成一个x509 v3扩展文件
cat > v3.ext <
6.使用该v3.ext文件为您的Harbor主机生成证书
openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in yourdomain.com.csr -out yourdomain.com.crt
7.分发证书给harbor使用
cp yourdomain.com.crt /data/cert/ cp yourdomain.com.key /data/cert/
8.转换yourdomain.com.crt为yourdomain.com.cert,供Docker使用
Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书。
openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert
9.将服务器证书,密钥和CA文件复制到Harbor主机上的Docker证书文件夹中
cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/cp ca.crt /etc/docker/certs.d/yourdomain.com/
10.需要在操作系统级别信任证书(重要)
红帽系列(centos)
cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/yourdomain.com.crtupdate-ca-trust
Ubuntu:
cp yourdomain.com.crt /usr/local/share/ca-certificates/yourdomain.com.crt update-ca-certificates
11.重启docker服务
systemctl restart docker.service
步骤比较繁多,写了一个简单的自签名证书生成脚本
以下脚本以reg.koudai.com为例生成证书,并分发到harbor和docker
#!/bin/bash# 直接在该目录下操作生成证书,正好供harbor.yml使用mkdir -p /data/certcd /data/certopenssl genrsa -out ca.key 4096openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=Shanghai/L=Shanghai/O=example/OU=Personal/CN=reg.koudai.com" -key ca.key -out ca.crtopenssl genrsa -out reg.koudai.com.key 4096openssl req -sha512 -new -subj "/C=CN/ST=Shanghai/L=Shanghai/O=example/OU=Personal/CN=reg.koudai.com" -key reg.koudai.com.key -out reg.koudai.com.csrcat > v3.ext <
配置harbor.yml
1.解压harbor离线安装包到/usr/local下
tar xvf harbor-offline-installer-v2.1.0.tgz -C /usr/local/
2.修改harbor.yml文件
[root@gfs harbor]# cat harbor.yml# Configuration file of Harbor# The IP address or hostname to access admin UI and registry service.# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.hostname: reg.koudai.com# http related confighttp: # port for http, default is 80. If https enabled, this port will redirect to https port port: 80# https related confighttps: # https port for harbor, default is 443 port: 443 # The path of cert and key files for nginx certificate: /data/cert/reg.koudai.com.crt private_key: /data/cert/reg.koudai.com.key
改这几行就行了。
然后执行docker-compose文件生成脚本,直接在当前目录下执行
./prepare # 生成docker-compose文件docker-compose up -d # 启动docker-compose
验证
自己电脑加下hosts解析,然后在浏览器打开https://reg.koudai.com,由于是自签名的忽略下告警,继续就可以打开harbor
服务器上docker login验证。直接在服务器执行docker login reg.koudai.com ,输入你配置的用户名和密码即可,或者直接使用harbor默认的用户名和密码(这里仅仅是测试,harbor默认的密码,配置文件里未修改)用户名:admin 密码:Harbor12345