docker 镜像仓库 Harbor 升级到 https

docker 镜像仓库 Harbor 升级到 https

在已部署的 harbor 服务上对现有服务进行升级,访问协议由 http 升级至 https

前言

由于公司内网 Harbor 服务最开始部署的时候是 http 的服务,通过在客户机上配置 insecure-registries 参数实现的内网访问

/etc/docker/daemon.json
1
2
3
{
"insecure-registries": ["http://harbor.akiya.cc"
}

不过在公司部分 Windows 电脑上通过 WSL 进行开发时,配置好如上配置后有时会出现如下错误的情况(注:Linux 服务器上配置好后未遇到过)

1
2
# git pull harbor.akiya.cc/sample-images
Error response from daemon: Get https://harbor.akiya.cc/v2/: dial tcp: lookup akiya.cc on 192.168.1.1:53: no such host

所以决定升级内网 Harbor 服务器到 Https 协议,并在内网 DNS 服务器上做好相关解析。这样以后使用镜像仓库时不用配置参数直接访问即可。

申请证书

  • 如果域名是在云厂商购买的可以直接通过云厂商申请免费的 SSL 证书即可,阿里云、腾讯云等均有提供。也可以通过 freessl 申请免费证书。

  • 如果域名为内部自定义域名,且没有在云厂商注册购买。则只能通过 openssl 自签证书使用了,具体可参考 Golang 使用 Gitlab 作为私有库Gitlab 搭建创建自签证书中的脚本。

申请完成证书后,上传证书与秘钥文件到服务器上。

升级

  1. 停止已有 Harbor 服务,进入 Harbor 部署目录中使用命令 docker-compose down 停止

  2. 修改 harbor.yml 文件,在其中启用 Https。注意 yaml 文件缩进

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 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: harbor.akiya.cc # 访问域名

    # http related config
    http:
    # port for http, default is 80. If https enabled, this port will redirect to https port
    port: 80

    # https related config
    https:
    # # https port for harbor, default is 443
    port: 443
    # # The path of cert and key files for nginx
    certificate: /data/cert/harbor.akiya.cc.pem # ssl 证书
    private_key: /data/cert/harbor.akiya.cc.key # 证书秘钥
    ...
  3. 再次执行 ./prepare 通过脚本更新配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # ./prepare
    prepare base dir is set to /data/harbor
    Clearing the configuration file: /config/log/logrotate.conf
    Clearing the configuration file: /config/log/rsyslog_docker.conf
    Generated configuration file: /config/log/logrotate.conf
    Generated configuration file: /config/log/rsyslog_docker.conf
    Generated configuration file: /config/nginx/nginx.conf
    Generated configuration file: /config/core/env
    Generated configuration file: /config/core/app.conf
    Generated configuration file: /config/registry/config.yml
    Generated configuration file: /config/registryctl/env
    Generated configuration file: /config/db/env
    Generated configuration file: /config/jobservice/env
    Generated configuration file: /config/jobservice/config.yml
    loaded secret from file: /secret/keys/secretkey
    Generated configuration file: /compose_location/docker-compose.yml
    Clean up the input dir
  4. 重新启动 Harbor

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # docker-compose up -d
    Creating network "harbor_harbor" with the default driver
    Creating harbor-log ... done
    Creating harbor-db ... done
    Creating harbor-portal ... done
    Creating redis ... done
    Creating registryctl ... done
    Creating registry ... done
    Creating harbor-core ... done
    Creating nginx ... done
    Creating harbor-jobservice ... done

等待启动完成后,通过 web 访问可以看到已经自动通过 80 跳转到 443 端口,证书信息也可以看到。

在服务器上取消 docker 的 insecure-registries 配置,可以正常拉取镜像文件。

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...