ekwong.cn

尔康的博客

0%

使用harbor搭建image仓库

当前厂里需要搭建一个私有的 docker image registry 给内网使用,学习了一下之后,使用 harbor 来实现。

前置条件

硬件

CPU 至少 2 个,推荐 4 个;

内存至少 4G,推荐 8G ;

硬盘至少 40G,如果打算保存的 image ,建议加大硬盘空间;

软件

需要安装以下软件:

名称 版本 描述
docker engine 17.06.0-ce +
docker compose 1.18.0 +
openssl 最新版 用于生成证书和密钥

端口

Harbor 的运行需要占用以下端口:80、443 和 4443

安装

  1. 前往 harbor 的发布页面

  2. 下载最新的离线安装包;

  3. 解压安装包;

    1
    tar -xvf harbor-offline-installer-version.tgz
  4. 获取证书 ca.crtyourdomain.com.crtyourdomain.com.key。若需使用自签名证书,请参考下方证书相关

  5. 把证书复制到 harbor 程序读取到目录,并修改解压出来的文件

    1
    2
    3
    4
    # 复制一份出来修改
    cp harbor.yml.tmpl harbor.yml
    # 然后修改 harbor.yml
    vi harbor.yml

    把 https 部分的配置,指向证书存放目录

    1
    2
    3
    4
    5
    6
    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
  6. yourdomain.com.crt 转化为 yourdomain.com.cert。由于 Docker daemon 把 .crt 文件解析为证书颁发机构的证书,而把 .cert 文件解析为客户端证书,所以我们需要进行转化

    1
    openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert
  7. 把服务证书、服务私钥和证书颁发机构的证书复制到 Docker 的证书存放目录下(如果目录不存在,需自行创建,目录名称为你的域名 yourdomain.com)

    1
    2
    3
    4
    mkdir -p /etc/docker/certs.d/yourdomain.com/
    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/

    放置后,目录应该是这样的:

    1
    2
    3
    4
    5
    /etc/docker/certs.d/
    └── yourdomain.com
    ├── yourdomain.com.cert
    ├── yourdomain.com.key
    └── ca.crt
  8. 重启 Docker 服务

    1
    systemctl restart docker
  9. 更新机器信任证书,需要把服务证书复制到机器的信任区并更新CA信任

    1
    2
    3
    4
    5
    6
    # Ubuntu
    cp yourdomain.com.crt /usr/local/share/ca-certificates/yourdomain.com.crt
    update-ca-certificates
    # CentOS
    cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/yourdomain.com.crt
    update-ca-trust
  10. 回到 harbor 的安装程序,执行准备工作

    1
    ./prepare

    然后启动 安装

    1
    ./install.sh

证书相关

若需使用自签名证书,可执行以下步骤:

生成证书颁发机构的证书

在生产环境下,应使用受信任的证书颁发机构的证书( CA certificate ),在这里,可以创建自己的的证书颁发机构。要创建证书,可以执行以下步骤:

  1. 生成 CA certificate 的私钥

    1
    openssl genrsa -out ca.key 4096
  2. 生成 CA certificate ,这里会生成一个 ca.crt,即你的证书颁发机构的证书

    这里 -subj 选项是填写你的证书颁发机构的相关信息,如果你使用 FQDN 来连接你的 harbor 主机,请务必指定 common name (CN)。

    C 表示国家缩写码,ST 表示 state 省份或州,L 表示 Location ,O 表示 Organization;

    1
    2
    3
    4
    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

生成服务证书

服务证书通常包含一个 .crt 文件和一个 .key 文件,例如 yourdomain.com.crtyourdomain.com.key

  1. 生成一个服务私钥

    1
    openssl genrsa -out yourdomain.com.key 4096
  2. 生成一个证书签名请求(CSR)

    1
    2
    3
    4
    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
  3. 生成一个 x509 v3 拓展文件

    注意这里需要修改DNS成你的域名

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cat > v3.ext <<-EOF
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    extendedKeyUsage = serverAuth
    subjectAltName = @alt_names

    [alt_names]
    DNS.1=yourdomain.com
    DNS.2=yourdomain
    DNS.3=hostname
    EOF
  4. 使用 v3.ext 文件生成服务证书

    1
    2
    3
    4
    5
    openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in yourdomain.com.csr \
    -out yourdomain.com.crt