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
可以是 restart
、start
和 stop
。
如果您再次运行剧本以确保用户列表,但您已经更改了默认管理员密码,您可以在某处设置 harbor_admin_password
变量,或简单地通过命令行传入 -e "harbor_admin_password=mypass"
。
作者信息
该角色于 2019 年由 Nicholas Amorim 创建。
Installs, Configures and Manages Harbor (docker)
ansible-galaxy install nicholasamorim.harbor