企业级Registry服务器(harbor)部署
修订记录
修订日期 | 修订者 | 修订内容 | 备注 |
20180527 | brekalinux | Harbor部署 | 初稿 |
使用参考地址: https://vmware.github.io/harbor/cn/
部署参考地址: https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
Github地址: https://github.com/vmware/harbor.git
HTTPS配置:https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
1. 技术背景介绍;
Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目;
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器, 通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
2.功能介绍;
Ø 基于角色的访问控制 - 用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
Ø 镜像复制 - 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
Ø 图形化用户界面 - 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
Ø AD/LDAP 支持 - Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
Ø 审计管理 - 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
Ø 国际化 - 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
Ø RESTful API - RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
Ø 部署简单 - 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。
3.硬件支持要求;
资 源 |
最低配置 |
最佳配置
|
CPU |
2CPU |
4CPU 或更高 |
Mem |
4GB |
8GB 或更高 |
Disk
|
40GB |
160GB或更高 |
4.软件版本要求;
软件名
|
软件版本
|
相关描述 |
Python
|
2.7 版本或更高 |
默认cenots 系统自带,注意:2.7版本以上 |
Docker engine
|
1.10版本或更高 |
参考地址https://docs.docker.com/engine/installation/ |
Docker Compose |
1.6版本或更高
|
参考地址: https://docs.docker.com/compose/install/ |
Openssl |
最新优先
|
生成证书和密钥 |
5.网络和端口;
服务监听端口
|
协议 |
描述 |
443 |
HTTPS | Harbor UI和API将请求这个端口上的https协议请求。 |
4443 |
HTTS | 连接到Docker内部信任服务,只有在启认证时才需要。 |
80 |
HTTP | Harbor UI和API将请求这个端口上的http协议请求
|
6. harbor部署实战;
6.0 部署NGINX反向代理harbor;
yum -y install nginx
upstream reg {
server your ip:80 max_fails=3 fail_timeout=10s;
}
server{
listen 80;
server_name xxxx; 访问域名
client_max_body_size 5000000m; # 限制客户端最大的Body-Size
access_log /data/log/nginx/reg.log;
location / {
rewrite ^(.*)$ https://$host$1 permanent;
}
}
server{
listen 443 ssl http2;
server_name xxx; #访问域名
client_max_body_size 5000000m; # 限制客户端最大的Body-Size
access_log /data/log/nginx/reg.log;
ssl_certificate ###证书路径;
ssl_certificate_key ##证书私钥;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://reg;
proxy_store off;
proxy_buffering off;
proxy_cache_use_stale off;
proxy_connect_timeout 10s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS,HEAD;
}
}
6.1 部署流程;
(1).获取相关harbor软件; (需提前安装docker,Docker Compose,openssl)
(2).生成证书和密钥;
(3).配置harbor.cfg;
(4).运行install.sh 启动harbor;
6.2 获取软件;
软件获取地址: https://github.com/vmware/harbor/releases
https://github.com/vmware/harbor/archive/v1.5.0.zip
$ tar xvf harbor-online-installer-<version>.tgz (在线安装)
$ tar xvf harbor-offline-installer-<version>.tgz (离线安装)
6.3 配置https证书;
6.3.1 配置自签名证书;
(1).进入目录创建CA认证; cd /app/harbor/cert [root@docker-harbor]#localdomain=reg.ops.com
(2).根据自己需要进行修改: openssl req -nodes -subj "/C=CN/ST=GuangDong/L=DongGuan/CN=$localdomain" -newkey rsa:2048 -keyout $localdomain.key -out $localdomain.csr
openssl x509 -req -days 3650 -in $localdomain.csr -signkey $localdomain.key -out $localdomain.crt
openssl x509 -req -in $localdomain.csr -CA $localdomain.crt -CAkey $localdomain.key -CAcreateserial -out $localdomain.crt -days 10000 |
6.3.2 配置商业证书;
注意: https 商业证书需要提前在证书的提供商进行购买;
1.将商业的的证书和密钥放置到harbor.cfg 配置文件下: 例如: ssl_cert = /app/harbor/cert/ops.com.crt #证书 ssl_cert_key = //app/harbor/cert/ops.com.key.pem #密钥
|
6.3.3 docker 配置自签名客户端认证;
注意: 1.自签名docker 需要配置客户端认证 2.商业证书则不用配置,因客户端能识别; 3.否则docker login reg.chehejia.com 会出现如下错误 ping attempt failed with error: Get https://reg.chehejia/v2/: x509: certificate is valid for server, not reg.chehejia.com
[root@docker-harbor]# mkdir -p /etc/docker/certs.d/reg.chehejia.com/ [root@docker-harbor]# cp /app/harbor/cert/reg.ops.com.crt /etc/docker/certs.d/reg.ops.com//ca.crt
|
6.4 调整配置文件;
[root@k8s-cluster-master01 harbor]# grep -v "^#" harbor.cfg |grep -v "^$" _version = 1.5.0 hostname = reg.ops.com ###访问域名地址 ui_url_protocol = https #配置访问协议,默认为http;如果要启动SSl认证https max_job_workers = 50 customize_crt = on #######可选的https证书配置地址 ssl_cert = /app/harbor/cert/ops.com.crt #证书 ssl_cert_key = /chj/app/harbor/cert/ops.com.key.pem #密钥# secretkey_path = /data ###################### admiral_url = NA log_rotate_count = 50 log_rotate_size = 200M http_proxy = https_proxy = no_proxy = 127.0.0.1,localhost,ui email_identity = email_server = smtp.mydomain.com email_server_port = 25 email_username = sample_admin@mydomain.com email_password = abc email_from = admin <sample_admin@mydomain.com> email_ssl = false email_insecure = false harbor_admin_password = Harbor12345 ##web控制台登录密码 auth_mode = db_auth ldap_url = ldaps://ldap.mydomain.com配置####ldap### ldap_basedn = ou=people,dc=mydomain,dc=com ldap_uid = uid ldap_scope = 2 ldap_timeout = 5 ldap_verify_cert = true ldap_group_basedn = ou=group,dc=mydomain,dc=com ldap_group_filter = objectclass=group ldap_group_gid = cn ldap_group_scope = 2 ####配置ldap 完毕######## self_registration = on ##数据库密码### token_expiration = 30 # token过期时间,默认为30分钟 project_creation_restriction = everyone db_host = mysql db_password = root123 db_port = 3306 db_user = root redis_url = redis:6379 clair_db_host = postgres clair_db_password = password clair_db_port = 5432 clair_db_username = postgres clair_db = postgres uaa_endpoint = uaa.mydomain.org uaa_clientid = id uaa_clientsecret = secret uaa_verify_cert = true uaa_ca_cert = /path/to/ca.pem registry_storage_provider_name = filesystem registry_storage_provider_config = |
6.5 运行harbor 服务;
[root@docker-harbor]# ./install.sh
注意: 1.运行前必须安装docker 并启动docker 服务,和Docker Compose服务; 2.运行启动过程中会拉去对应的docker 镜像 比较慢,耐心等待完毕后自动启动; 3. 建议提前配置docker 加速器(可选择阿里云加速器);
[root@docker-harbor]# docker-compose stop ###关闭harbor
|
7.docker部署;
7.1 docker 部署;
|
7.2 部署Docker Compose
|
8.使用教程;
8.1 harbor 测试;
1.访问域名;
(2).默认管理员账号密码;
admin/Harbor12345
(3)新建项目;
(4).添加用户;
(5).添加项目成员; |
8.2 使用docker 上传镜像至harbor;
(1).官网拉取一个测试镜像(nginx)
(2)标记本地镜像,将其归入harbor仓库。
[root@docker-harbor ~]# docker tag docker.io/nginx:latest reg.chehejia.com/public/nginx:v1
(3).配置登录harbor;
(4).push 镜像到harbor;
(5). Harbor 控制台查看;
|
9.技术总结;
1. harbor 使用非常便捷,
2. 严格的权限划分,对应镜像使用权限严格控制;
3 . k8s 和docker 易用;
4. 部署技术成本较小(Compose 统一管理)
5. 方便支持ldap接入适用企业用户;
6. 审计查询方便;
转载于:https://blog.51cto.com/breaklinux/2386343