Lain's Blog

基于KS3、Harbor搭建企业级的Docker

概述

Harbor 是 VMware 中国开发的一款 Docker Registry 工具,其主要致力于企业级的 Registry 管理,并提供了 LDAP 等高级权限认证功能。

KS3(Kingsoft Standard Storage Service)是金山云为企业用户提供的无限制、多备份、分布式的低成本存储空间服务,解决存储扩容、数据可靠安全以及分布式访问等相关复杂问题。

本文介绍了如何使用基于KS3存储搭建Harbor企业级的Registry镜像仓库管理。

准备

Docker Registry v2需要运行在有Docker环境的主机上,Harbor项目是以容器化的方式来启动的,各组件容器之间的依赖由docker-compose管理。

环境

  • Linux系统 (本文以ubuntu示例)
  • Docker运行环境
  • docker-compose编排工具

安装Docker

执行以下命令安装 Docker

1
$ curl -fsSL https://get.docker.io | bash

安装docker-compose

默认的官方文档 安装命令如下 :

1
curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

部署

安装部署步骤如下:

  1. 下载安装包
  2. 配置harbor
  3. 配置后端存储到KS3
  4. 配置HTTPS
  5. 执行安装脚本并启动Harbor
  6. 测试

下载安装包

Harbor发行版的安装包可以在GItHub下载,有在线(online)安装和离线(offline)安装两种安装方式选择。

以在线安装示例,通过wget命令下载,使用tar命令将其解压,目录结构如下:

1
2
wget https://github.com/vmware/harbor/releases/download/0.4.5/harbor-online-installer-0.4.5.tgz
tar -zxvf harbor-online-installer-0.4.5.tgz

Harbor在线安装包目录结构

其中:

install.sh 是用于安装Harbor安装脚本
config 目录存放了harbor的配置数据,如registry 和 ui目录中存放了相关证书用于组件间加密通讯
harbor.cfg 是全局配置文件,主要包含了一些常用设置,比如是否启用https等
prepare 是一个python写的预处理脚本,主要用于初始化一些harbor.cfg的相关设置
docker-compose.yml 描述了个组件之间依赖关系以及配置挂载,数据持久化等设置。

配置Harbor

Harbor的常用配置参数主要存放在harbor.cfg,直接编辑harbor.cfg即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
vim harbor.cfg
# 其配置信息如下
hostname = reg.yourdomain.com # Harbor 服务器域名
ui_url_protocol = https # UI 组件访问协议
email_server = smtp.mydomain.com # email 服务器地址
email_server_port = 25 # email 端口
email_username = sample_admin@mydomain.com # email 账号
email_password = abc # email 密码
email_from = admin <sample_admin@mydomain.com> # email 发件人
email_ssl = false # 是否启用 SSL
harbor_admin_password = Harbor12345 # Harbor 初始化管理员(admin)密码
auth_mode = db_auth # 权限管理模型(db_auth/ldap_auth)
ldap_url = ldaps://ldap.mydomain.com # ldap 地址
ldap_basedn = uid=%s,ou=people,dc=mydomain,dc=com # ldap 权限模型
db_password = root123 # 数据库 管理员密码
self_registration = on # 是否打开自动注册
use_compressed_js = on # 是否启用压缩js
max_job_workers = 3 # 最大任务数
token_expiration = 30 # token 超时
verify_remote_cert = on # 是否验证远程证书
customize_crt = on # 是否启用自定义证书
# 以下为自定义证书信息
crt_country = CN
crt_state = State
crt_location = CN
crt_organization = organization
crt_organizationalunit = organizational unit
crt_commonname = example.com
crt_email = example@example.com

配置后端存储到KS3

在默认情况下,Harbor的镜像存储在本地磁盘/data/registry目录下。但是在生产环境中,出于高可用、高吞吐、安全可靠等因素,我们可能需要将镜像数据存储在KS3、Ceph等。

金山云提供了基于Docker registry v2封装了KS3驱动的官方镜像ksyun/registry:2。该镜像提供了Docker registry v2和KS3的完美对接,通过该镜像,用户可以很方便将镜像仓库数据存储到KS3上。

使用KS3作为Harbor镜像仓库的后端存储,你需要两步配置:
首先,修改harbor/docker-compose文件,修改registry模块,以支持KS3驱动的官方镜像。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
regsitry:
image: ksyun/registry:latest # 修改为支持KS3驱动的镜像
container_name: registry
restart: always
volumes:
# 此处注释掉harbor默认挂在本地目录vlomues的存储方式
# - /data/registry:/storage
- ./common/config/registry/:/etc/registry/
environment:
- GODEBUG=netdns=cgo
command:
["serve", "/etc/registry/config.yml"]
depends_on:
- log
logging:
driver: "syslog"
options:
syslog-address: "tcp://127.0.0.1:1514"
tag: "registry"
...

其次,配置template/registry/config.yml文件,修改storage模块,为KS3的配置数据。

1
2
3
4
5
6
7
8
9
10
11
12
storage:
cache: inmemory
ks3:
accesskey: "your ks3 accesskey" # KS3的访问私钥
secretkey: "your ks3 secretkey" # KS3的访问秘钥
internal: false # 默认值false,是否使用内网加速,true代表使用内网加速,(高速,不计流量)
region: ks3-cn-beijing # 区域设置
bucket : "your bucket name" # KS3存储桶的名字
encrypt: false # 默认值false,是否对镜像数据加密
secure: false # 默认值false,是否使用https(ssl)
chunksize: 5242880 # 块大小
storage_page: / # 存储路径

更多KS3存储配置,参见Docker Registry KS3存储驱动配置

HTTPS配置

创建CA证书

1
2
3
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout ca.key \
-x509 -days 365 -out ca.crt

证书签名

1
2
3
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout yourdomain.com.key \
-out yourdomain.com.csr

初始化CA信息

1
2
3
4
5
mkdir demoCA
cd demoCA
touch index.txt
echo '01' > serial
cd ..

配置Nginx

  • 复制证书

    1
    2
    3
    4
    5
    6
    7
    # 复制证书
    cp registry.mritd.me.crt config/nginx/cert
    cp ca/registry.mritd.me.key config/nginx/cert
    # 备份配置
    mv config/nginx/nginx.conf config/nginx/nginx.conf.bak
    # 使用模板文件
    mv config/nginx/nginx.https.conf config/nginx/nginx.conf
  • 修改nginx.conf配置

    1
    2
    3
    4
    5
    6
    7
    8
    server {
    listen 443 ssl;
    server_name harbordomain.com;
    ...
    server {
    listen 80;
    server_name harbordomain.com;
    rewrite ^/(.*) https://$server_name:443/$1 permanent;

执行安装脚本并启动Harbor

配置完成后,执行Harbor提供的安装脚本(install.sh),来生成私有配置,在线安装版本会到Docker Hub拉取镜像,并启动Harbor服务。

1
$ sudo ./install.sh

测试

  • 访问Harbor UI

    在浏览器中打开http://reg.yourdomain.com/ ,以admin账号(初始账号/密码:admin/Harbor12345)登录,可以查看Harbor的控制面板。

  • 测试docker client 登录、推拉镜像

    在控制面板(Harbor UI)中创建一个项目myproject,docker client登录认证,并测试推送私有镜像:

1
2
$ docker login reg.yourdomain.com
$ docker push reg.yourdomain.com/myproject/myrepo:mytag

管理Harbor的生命周期

你可以通过docker-compose工具来管理Harbor的生命周期,常用命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 停止Harbor
$ sudo docker-compose stop
Stopping harbor_proxy_1 ... done
Stopping harbor_ui_1 ... done
Stopping harbor_registry_1 ... done
Stopping harbor_mysql_1 ... done
Stopping harbor_log_1 ... done
Stopping harbor_jobservice_1 ... done
# 启动harbor
$ sudo docker-compose start
Starting harbor_log_1
Starting harbor_mysql_1
Starting harbor_registry_1
Starting harbor_ui_1
Starting harbor_proxy_1
Starting harbor_jobservice_1
# 更新Harbor配置
$ sudo docker-compose down
$ vim harbor.cfg
$ sudo install.sh

关于docker-compose详见Docker Compose文档 。

More

KS3更多信息,参见 http://www.ksyun.com/proservice/storage_service
Harbor更多信息,参见 http://vmware.github.io/harbor/
Registry更多信息,参见 https://docker.github.io/registry/
Docker更多信息,参见 https://docs.docker.com

扫二维码
扫一扫,用手机访问本站

扫一扫,用手机访问本站