文章目录
- Harbor安装
- 下载安装包
- 编辑配置文件
- 启动harbor
- 测试
- 登录harbor的web界面
- 创建项目
- 修改docker配置(如果启用https可以不配置)
- 上传镜像测试
- 启用https
- 生成证书
- 修改harbor配置文件
- 重新运行harbor
- 配置Docker通过https连接harbor
- 测试
Harbor是一个由vameware开源的用于存储和分发Docker镜像的企业级Registry服务器。Harbor是基于Docker官方的registry二次开发的,但相对于Docker官方的Registry,Harbor的功能更加强大,提供了管理UI、RBAC、AD/LDAP集成、日志审计和镜像安全扫描等扩展功能。
Harbor官网:
Harbor安装
在此之前请确保你的服务器已经安装了docker和docker-compose,如果没有请先安装docker和docker-compose
下载安装包
从github下载对应的离线安装包:https://github.com/goharbor/harbor/releases
也可以直接使用wget下载:
wget https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgz
编辑配置文件
tar xvf harbor-offline-installer-v2.5.1.tgz
cp harbor/harbor.yml.tmpl harbor/harbor.yml
vim harbor/harbor.yml #harbor的配置文件,主要设置了以下几个配置
########harbor.yml#################
hostname: harbor-server1.linux.io #harbor服务器的域名,也可以直接使用本机IP地址
http: #http相关配置
port: 80 #监听端口
#https: #https相关配置,暂不启用
# https port for harbor, default is 443
# port: 443
# The path of cert and key files for nginx
# certificate: /your/certificate/path
# private_key: /your/private/key/path
harbor_admin_password: Passw0rd #harbor界面的密码
# Harbor DB configuration
database: #harbor后端数据库配置,可以保持默认
password: root123
max_idle_conns: 100
max_open_conns: 900
data_volume: /data #上传到harbor的镜像的保存目录
启动harbor
sudo hostnamectl set-hostname harbor-server1.linux.io #设置一下hostname,和harbor.yml中保持一致
cd harbor/
./install.sh --with-trivy --with-chartmuseum #--with-trivy表示启用镜像扫描功能,--with-chartmuseum表示启用chart仓库
测试
登录harbor的web界面
用户名为admin,密码为harbor.yml中配置的
创建项目
修改docker配置(如果启用https可以不配置)
修改/etc/docker/daemon.json文件,添加insecure-registries选项
$ cat /etc/docker/daemon.json
{
"insecure-registries": ["harbor-server1.linux.io"]
}
重启docker服务,验证配置是否生效
systemctl restart docker
docker info
上传镜像测试
#先添加一下hosts解析,如果有dns服务器添加一条解析就可以
echo "192.168.1.1 harbor-server1.linux.io" >>/etc/hosts
#任意选择一个镜像为其打上相应的tag
docker image tag nginx:latest harbor-server1.linux.io/base-images/nginx:latest
docker login harbor-server1.linux.io
docker pull habror-server1.linux.io/base-images/nginx:latest #上传成功就表示harbor可以正常使用
启用https
生成证书
mkdir -p /apps/harbor/cert && cd /apps/harbor/cert
#生成根证书
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=linux.io" \
-key ca.key \
-out ca.crt
#生成harbor使用的证书
openssl genrsa -out harbor-server1.key 4096
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=linux.io" \
-key harbor-server1.key \
-out harbor-server1.csr
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=linux.io
DNS.2=harbor-server1.linux.io
EOF
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor-server1.csr \
-out harbor-server1.crt
修改harbor配置文件
修改harbor.yml,启用https并设置证书路径
# https related config
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /apps/harbor/cert/harbor-server1.crt
private_key: /apps/harbor/cert/harbor-server1.key
重新运行harbor
先进入harbor安装包解压目录执行./prepare使https生效,然后重新运行harbor
cd /home/ubuntu/harbor
./prepare
docker-compose down
docker-compose up -d
配置Docker通过https连接harbor
需要将证书提供给所有需要连接此harbor服务器上传/下载镜像的docker服务器,确保可以正确上传/下载镜像。
/etc/docker/certs.d/harbor-server1.linux.io/ #创建一个和harbor服务器域名相同的目录
cp /apps/harbor/cert/ca.crt /etc/docker/certs.d/harbor-server1.linux.io/
cp /apps/harbor/cert/harbor-server1.key /etc/docker/certs.d/harbor-server1.linux.io/
cp /apps/harbor/cert/harbor-server1.crt /etc/docker/certs.d/harbor-server1.linux.io/harbor-server1.cert
将之前在/etc/docker/daemon.json中配置的insecure-registries选项删除掉,然后重启docker
测试
访问页面,已经变成https
上传下载镜像测试
docker login harbor-server1.linux.io
docker tag alpine:latest harbor-server1.linux.io/base-images/alpine:latest
docker push harbor-server1.linux.io/base-images/alpine:latest
docker pull harbor-server1.linux.io/base-images/alpine:latest
上传和下载成功就代表没问题