目录
5.3.3:生成服务器证书,证书通常包含一个.crt文件和一个.key文件
5.3.4:生成服务器证书,证书通常包含一个.crt文件和一个.key文件
八:其他客户端使用harbor,需要配置harbor服务器crt证书
一:使用背景:
Docker Hub 这样的公共仓库可能不方便,Docker自带的registry又不能满足需要。
二:Harbor简介
Harbor以Docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role Based AccessControl),AD/LDAP集成、以及审计日志(Auditlogging) 等企业用户需求的功能,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。
Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。不仅解决了我们直接使用 Docker Registry 的功能缺失,更解决了我们在生产使用 Docker Registry 面临的高可用、镜像仓库直接复制、镜像仓库性能等运维痛点。
三:硬件要求
3.1)部署 Harbor 的最低和推荐硬件配置
Resource | Minimum | Recommended |
CPU | 2 CPU | 4 CPU |
Mem | 4 GB | 8 GB |
Disk | 40 GB | 160 GB |
3.2)目标主机上必须安装的软件版本
Software | Version | Description |
Docker engine | Version 17.06.0-ce+ or higher | For installation instructions, see Docker Engine documentation |
Docker Compose | Version 1.18.0 or higher | For installation instructions, see Docker Compose documentation |
Openssl | Latest is preferred | Used to generate certificate and keys for Harbor |
3.3)网络端口Harbor 要求在目标主机上打开以下端口
Port | Protocol | Description |
443 | HTTPS | Harbor 门户和核心 API 接受此端口上的 HTTPS 请求。您可以在配置文件中更改此端口。 |
4443 | HTTPS | 连接到 Harbor 的 Docker Content Trust 服务。仅在启用 Notary 时才需要。您可以在配置文件中更改此端口。 |
80 | HTTP | Harbor 门户和核心 API 接受此端口上的 HTTP 请求。您可以在配置文件中更改此端口。 |
四:安装准备
4.1)安装Docker
必须是Version 17.06.0-ce+或更高版本,小编使用的是Server Version: 20.10.7
4.2) 安装docker-compose
Version 1.18.0 or higher
Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:Releases · docker/compose · GitHub。
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
如果github太慢使用daocloud
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
注:要安装其他版本的 Compose,请替换 1.24.1。
将可执行权限应用于二进制文件:
$ sudo chmod +x /usr/local/bin/docker-compose
创建软链:
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
$ docker-compose --version
docker-compose version 1.24.1, build 4667896b
五:具体安装步骤
5.1)下载离线安装包
GIT仓库地址:https://github.com/goharbor/harbor/releases
或者使用小编已经准备好的下载包
harbor-offline-installer-v2.2.3.tgz
链接:https://pan.baidu.com/s/1qP2-YzBIeSs_j5JYJ9Z2JQ
提取码:wtv3
-- 上传到服务器
# 解压到/usr/local/目录
tar -zxvf harbor-offline-installer-v2.2.3.tgz -C /usr/local/
cd /usr/local/harbor
[root@vm202 harbor]# ll
总用量 502856
-rw-r--r--. 1 root root 3361 7月 5 13:39 common.sh
-rw-r--r--. 1 root root 514891405 7月 5 13:40 harbor.v2.2.3.tar.gz
-rw-r--r--. 1 root root 7840 7月 5 13:39 harbor.yml.tmpl
-rwxr-xr-x. 1 root root 2500 7月 5 13:39 install.sh
-rw-r--r--. 1 root root 11347 7月 5 13:39 LICENSE
-rwxr-xr-x. 1 root root 1881 7月 5 13:39 prepare
5.2)配置harbor
cd /usr/local/harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml -- 以下为常用项配置
# 1:指定要部署 Harbor 的目标主机的 IP 地址或完全限定域名
hostname: lo.harbor.com
hostname为必须修改参数
2:配置CA证书路径
https:
port: 443
certificate: /usr/local/harbor/cert/lo.harbor.com.crt
private_key: /usr/local/harbor/cert/lo.harbor.com.key
# 3:默认数据目录-harbor被删除仍然存在
data_volume: /usr/local/harbor/data_volume
#4: 日志配置
log:
local:
#location: /var/log/harbor # 日志存储路径
location: /usr/local/harbor/log
注意:如果使用 ip端口的方式,把https相关配置注释掉
5.3)生成自签TLS证书
官方英文文档:Harbor docs | Configure HTTPS Access to Harbor
5.3.1:生成 CA 证书私钥 ca.key
[root@vm03 tmp]# openssl genrsa -out ca.key 4096
Generating RSA private key, 4096 bit long modulus
...............................++
........................................................++
e is 65537 (0x10001)
查看刚刚生成的ca.key
[root@vm03 tmp]# ll
-rw-r--r-- 1 root root 3243 7月 22 13:38 ca.key
5.3.2:使用CA证书私钥,生成CA证书 ca.crt
[root@vm03 tmp]# openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=Harbor/OU=Harbor/CN=lo.harbor.com" \
-key ca.key \
-out ca.crt
参数说明:
yourdomain.com修改为自己的域名本例为lo.harbor.com
-new 指生成证书请求
-x509 表示直接输出证书
-key 指定私钥文件
-days 指定证书过期时间为3650天
-out 导出结束后证书文件
-subj 输入证书拥有者信息
查看ca.crt证书
[root@vm03 tmp]# ll
总用量 500924
-rw-r--r-- 1 root root 2025 7月 22 13:44 ca.crt
-rw-r--r-- 1 root root 3243 7月 22 13:38 ca.key
5.3.3:生成服务器证书,证书通常包含一个.crt文件和一个.key文件
例如,yourdomain.com.crt和yourdomain.com.key
1:生成私钥 lo.harbor.com.key
[root@vm03 tmp]# openssl genrsa -out lo.harbor.com.key 4096
Generating RSA private key, 4096 bit long modulus
..................++
....................................................++
e is 65537 (0x10001)
[root@vm03 tmp]# ll
-rw-r--r-- 1 root root 3243 7月 22 13:54 lo.harbor.com.key
2:生成证书签名请求 (lo.harbor.com.csr)
[root@vm03 tmp]# openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=Harbor/OU=Harbor/CN=lo.harbor.com" \
-key lo.harbor.com.key \
-out lo.harbor.com.csr
--其中lo.harbor.com换成自己的域名
[root@vm03 tmp]# ll
-rw-r--r-- 1 root root 1704 7月 22 13:57 lo.harbor.com.csr
3:生成 x509 v3 扩展文件
[root@vm03 tmp]# cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=lo.harbor.com
EOF
[root@vm03 tmp]# ll
-rw-r--r-- 1 root root 232 7月 22 14:01 v3.ext
4:使用该v3.ext文件为您的Harbor主机生成证书 lo.harbor.com.crt
[root@vm03 tmp]# openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in lo.harbor.com.csr \
-out lo.harbor.com.crt
---> 输出
Signature ok
subject=/C=CN/ST=Beijing/L=Beijing/O=Harbor/OU=Harbor/CN=lo.harbor.com
Getting CA Private Key
[root@vm03 tmp]# ll
-rw-r--r-- 1 root root 2057 7月 22 14:05 lo.harbor.com.crt
5.3.4:生成服务器证书,证书通常包含一个.crt文件和一个.key文件
向 Harbor 和 Docker 提供证书
1:将服务器证书和密钥复制到 Harbor 主机上的 certficates 文件夹中
mkdir -p /usr/local/harbor/cert
cp lo.harbor.com.crt /usr/local/harbor/cert/
cp lo.harbor.com.key /usr/local/harbor/cert/
2:转换yourdomain.com.crt为yourdomain.com.cert,供 Docker 使用。
Docker 守护进程将.crt文件解释为 CA 证书,将.cert文件解释为客户端证书。
[root@vm03 tmp]# openssl x509 -inform PEM -in lo.harbor.com.crt -out lo.harbor.com.cert
3:将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。
# 创建证书文件夹
mkdir -p /etc/docker/certs.d/lo.harbor.com/
# 拷贝服务器证书
cp lo.harbor.com.cert /etc/docker/certs.d/lo.harbor.com/
# 拷贝服务器私钥
cp lo.harbor.com.key /etc/docker/certs.d/lo.harbor.com/
# 拷贝自签的颁发证书机构ca证书
cp ca.crt /etc/docker/certs.d/lo.harbor.com/
----
注意:如果您将默认nginx端口 443映射到其他端口,
请创建文件夹/etc/docker/certs.d/yourdomain.com:port或
/etc/docker/certs.d/harbor_IP:port。
示例:
mkdir -p /etc/docker/certs.d/lo.harbor.com:8443
cp lo.harbor.com.cert /etc/docker/certs.d/lo.harbor.com:8443
cp lo.harbor.com.key /etc/docker/certs.d/lo.harbor.com:8443
cp ca.crt /etc/docker/certs.d/lo.harbor.com:8443
5.4)harbor配置确认与初始化启动
5.4.1:修改与确认harbor配置
vim harbor.yml 具体配置如下
hostname: lo.harbor.com
2:CA证书路径
https:
port: 443
certificate: /usr/local/harbor/cert/lo.harbor.com.crt
private_key: /usr/local/harbor/cert/lo.harbor.com.key
5.4.2:准备配置文件
cd /usr/local/harbor
[root@vm03 tmp]# ./prepare
5.4.3:开始安装harbor相关模块
cd /usr/local/harbor
[root@vm03 tmp]# ./install.sh
输出-----
[Step 0]: checking if docker is installed ...
Note: docker version: 20.10.7
[Step 1]: checking docker-compose is installed ...
Note: docker-compose version: 1.24.1
[Step 2]: loading Harbor images ...
[Step 3]: preparing environment ...
[Step 4]: preparing harbor configs ...
[Step 5]: starting Harbor ...
✔ ----Harbor has been installed and started successfully.----
重启 Docker 引擎
systemctl restart docker
六:harbor常用管理
cd /usr/local/harbor
# 停止Harbor
docker-compose stop
# 启动Harbor
docker-compose start
七:测试与使用
访问https://lo.harbor.com
访问https://lo.harbor.com:8443
用户名:admin
密码:Harbor12345
八:其他客户端使用harbor,需要配置harbor服务器crt证书
其他客户端连接harbor
[root@vm03 ~]# docker login lo.harbor.com:8443
[root@vm03 ~]# docker login lo.harbor.com
Username: remote
Password:
Error response from daemon: Get https://lo.harbor.com/v2/: x509: certificate signed by unknown authority
报错说明证书签名认证异常,
原因:因为域名我们配置的是自签证书,他不能通过证书做交互解密
登录:
docker login lo.harbor.com
或:docker login lo.harbor.com -u xx -p xx
客户端需要做以下配置
在docker客户端配置harbor证书
# 创建证书文件夹
mkdir -p /etc/docker/certs.d/lo.harbor.com/
# 从lo.harbor.com服务器拷贝证书到docker客户端
(204为harbor服务器,203为docker使用客户端,从204中把ca证书复制到203中)
在203服务器执行以下命令
scp root@192.168.8.204:/usr/local/harbor/cert/lo.harbor.com.crt /etc/docker/certs.d/lo.harbor.com
九:Docker推送镜像到harbor
1: 在项目中标记镜像
docker tag SOURCE_IMAGE[:TAG] lo.harbor.com/py_image/REPOSITORY[:TAG]
示例:
docker tag iwester/myip:1.2 lo.harbor.com/py_image/myip:v1
2:推送镜像到当前项目
docker push lo.harbor.com/py_image/REPOSITORY[:TAG]
示例:
docker push lo.harbor.com/py_image/myip:v1
3:拉取harbor项目
docker pull lo.harbor.com/py_image/myip:v1