nicholasamorim.harbor

Ansible 角色: Harbor

一个在 Linux 上安装 Harbor 的 Ansible 角色。

该角色处于 alpha 阶段,欢迎提交问题和 PR。

需求

无。

角色变量

完整列表请参见 defaults/main.yaml

默认情况下,角色使用当前主机的 IP 设置 harbor_hostname。你可以覆盖它。

要更改安装目录,请使用:

harbor_install_dir: /opt

要更改默认协议,请使用:

harbor_ui_url_protocol: "http"

如果你想更改 Harbor 的 NGINX 默认暴露端口(80 和 443),请使用:

harbor_exposed_http_port: 81
harbor_exposed_https_port: 444

如果你在代理后运行 Harbor,请设置 harbor_behind_proxy: yes。这将注释掉 Harbor 的 Nginx 中的必要行,以根据其 故障排除 章节进行配置。

要安装附加组件,请设置:

harbor_extras:
    - clair
    - notary

如果你已经设置了 Redis,可能需要更改 Harbor 的默认 Redis 主机名和端口:

# 如果你已经在运行自己的 Redis,请更改这些
harbor_redis_host: redis
harbor_redis_port: 6379

你还可以通过 harbor_installer_extra_args(字符串类型)传入额外参数给安装程序。

如果你希望在安装 Harbor 时自动创建项目,可以定义 harbor_projects

harbor_projects:
  - project_name: test
    is_public: "false"
    content_trust: "false"
    prevent_vul: "true"
    severity: "high"
    auto_scan: "true"

默认情况下,用户可以自我注册。如果你希望自动创建用户,必须禁用自我注册并设置用户列表。这些用户将被自动创建,默认密码为 "HarborUser12345"。

该操作是幂等的。

harbor_self_registration: "off"
harbor_users:
    - username: user1
      email: [email protected]
      realname: 用户编号 1
      role_name: 开发者
      role_id: 2
      has_admin_role: true

依赖

无。

示例剧本

---
- name: 安装和配置 Harbor
  hosts: registry
  vars:
    harbor_projects:
      - project_name: myproject
        is_public: "false"
        content_trust: "false"
        prevent_vul: "true"
        severity: "high"
        auto_scan: "true"
    harbor_users:
      - username: user1
        email: [email protected]
        realname: 用户编号 1
        role_name: 开发者
        role_id: 2
        has_admin_role: true
  roles:
    - nicholasamorim.harbor

剧本运行后,您应该能够访问主机的 80/443 端口看到 Harbor 的用户界面。您可以使用 admin/Harbor12345 登录。如果您更改了暴露的端口,请记得使用它们而不是 80/443。

在代理后运行 Harbor

一个常见的设置是将 Harbor 放在代理后,由代理负责 SSL 终止。使用这个设置时,Harbor 可能会比较复杂,因为它有自己的 Nginx,情况可能会变得混乱:

a) Harbor 有自己的 Nginx 代理,必须以 http 运行。 b) 然而,如果您使用代理,需要在 Harbor 的 Nginx 中注释掉某些行。 c) 领域 URL 也必须更改为外部可见的内容: https

以下是需要在这种情况下设置的变量示例:

harbor_hostname: "myharbor.company.com"
harbor_api_url: "https://myharbor.company.com/api"
harbor_behind_proxy: yes
# 内部,Harbor 仍然在 http 上运行
harbor_ui_url_protocol: "http"
harbor_customize_crt: "off"
harbor_registry_realm_protocol: "https"
# 在不同的端口运行 Harbor 的 nginx,以避免与 80/443 冲突
harbor_exposed_http_port: 8798
harbor_exposed_https_port: 8799
harbor_extras:
  - clair
harbor_self_registration: "off"
# 如果您已经有一个 Redis 容器在运行,这很有用
harbor_redis_host: redisharbor
harbor_ssl_cert: /etc/ssl/certs/cert.pem
harbor_ssl_cert_key: /etc/ssl/certs/cert.key

这将确保:

  • Harbor 的 nginx 被 注释掉
  • 注册域 URL 正确更新。

这有点复杂,但这是一个折衷,尽量不去更改 Harbor 的文件/模板,因为这会导致频繁失效。当然,我也欢迎关于如何改进的建议。

管理状态

为了方便,该角色包含使用 docker-compose 停止、启动和重启注册表的任务。

以下是专门为重启注册表创建的剧本:

---
- hosts: registry
  tasks:
    - name: 重启 Harbor
      include_role:
        name: harbor
        tasks_from: restart

运行上述剧本有效地重启 Harbor 的所有组件。这考虑了你是否正在使用 clair 和/或 notary,并且也使用了它们的 docker-compose 文件。

tasks_from 可以是 restartstartstop

如果您再次运行剧本以确保用户列表,但您已经更改了默认管理员密码,您可以在某处设置 harbor_admin_password 变量,或简单地通过命令行传入 -e "harbor_admin_password=mypass"

作者信息

该角色于 2019 年由 Nicholas Amorim 创建。

安装
ansible-galaxy install nicholasamorim.harbor
许可证
mit
下载
1.4k
拥有者