专注于Docker、Container等技术的交流和分享
挖掘最有价值的资讯动态、教程、国内外优秀资源

Harbor部署

Harbor部署

证书配置

生成根证书

证书放置位置/data/cert/如果不存在则创建。

$ mkdir -p /data/cert/ && cd /data/cert/
$ openssl genrsa -out ca.key 2048
$ openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt -subj "/CN=Harbor-ca"

生成服务证书

openssl.cnf内容如下:

[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
IP.1 = 172.20.201.101

172.20.201.101替换成Harbor服务所在服务器的IP地址。如有域名或更多的IP,请参考如下方式追加:

DNS.1 = [example1.com]
DNS.2 = [example2.com]
IP.2 = [IP2]
IP.3 = [IP3]

生成证书

$ openssl x509 -req -in apiserver.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server.crt -days 365 -extensions v3_req -extfile openssl.cnf
$ openssl x509 -req -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server.crt -days 365 -extensions v3_req -extfile openssl.cnf

设置docker证书

# 如果如下目录不存在,请创建,如果有域名请按此格式依次创建
mkdir -p /etc/docker/certs.d/172.20.201.101
# mkdir -p /etc/docker/certs.d/[IP2]
# mkdir -p /etc/docker/certs.d/[example1.com] 
# 如果端口为443,则不需要指定。如果为自定义端口,请指定端口
# /etc/docker/certs.d/yourdomain.com:port

# 将ca根证书依次复制到上述创建的目录中
cp ca.crt /etc/docker/certs.d/172.20.201.101/

安装Harbor

下载

$ wget https://github.com/vmware/harbor/releases/download/0.5.0-rc1/harbor-online-installer-0.5.0-rc1.tgz
$ tar xvf harbor-online-installer-0.5.0-rc1.tgz
$ cd harbor

配置

修改harbor.cnf内容如下:

## Harbor的配置文件

# 访问管理UI与注册服务的IP地址或主机名
# 别使用localhost或127.0.0.1,因为Harbor需要被外部的客户端访问。
hostname = 172.20.201.101

# 访问UI与token/notification服务的协议,默认为http。
# 如果在nginx中开启了ssl,可以设置为https
ui_url_protocol = https

# 发送重置密码的邮件账号。
email_identity = Mail Config
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

## Harbor初始化密码,仅当第一次启动Harbor时有效。在启动Harhor之后失效。
# 从UI上修改管理员密码。
harbor_admin_password = Harbor12345

## 默认情况下认证模式为db_auth,如:证书被存储在本地的数据库中。
# 如果想使用LDAP服务来做认证,则设置为ldap_auth。
auth_mode = db_auth

# ldap的接入点url。
ldap_url = ldaps://ldap.mydomain.com

# 有权限搜索LDAP/AD服务的用户的DN(如:uid=admin,ou=people,dc=mydomain,dc=com)。
# 如果LDAP/AD服务部支持匿名搜索,则需要配置这个DN与ldap_search_pwd。
#ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com

#the password of the ldap_searchdn
# 在ldap_searchdn配置的用户的密码。
#ldap_search_pwd = password

#The base DN from which to look up a user in LDAP/AD
# 查找用户的最基础的DN
ldap_basedn = ou=people,dc=mydomain,dc=com

# 查询过滤器,用于查找用户,确认过滤器语法是否正确。
#ldap_filter = (objectClass=person)

# 在LDAP搜索时用于匹配用户的属性,可能是uid, cn, email,sAMAccountName或其他属性取决于LDAP/AD。
ldap_uid = uid

# 搜索用户的范围, 1-LDAP_SCOPE_BASE, 2-LDAP_SCOPE_ONELEVEL, 3-LDAP_SCOPE_SUBTREE
ldap_scope = 3

# mysql中root用户的密码,在任何生产环境使用之前请修改。
db_password = root123

# 开启或关闭自签名特性
self_registration = on

# 确认UI中的js文件是否进行压缩。生产环境中,设置为on,开发环境中设置为off。
use_compressed_js = on

# job服务中最大job workers数。
max_job_workers = 3

# 通过令牌服务生成的令牌有效时间(单位:分钟),默认为30分钟。
token_expiration = 30

# 确认当链接远程仓库时,job服务是否验证ssl证书。
# 当远程仓库使用自签名证书或不可信证书时,设置标签为off。
verify_remote_cert = on

# 确认是否为注册令牌生成证书。
# 如果设置为on,prepare脚本将为正在生成的令牌生成新的根证书与私钥用于访问仓库。如果设置为off,则必须提供一个用于生成令牌的证书与私钥。
customize_crt = on


# 证书组织的信息。
crt_country = CN
crt_state = State
crt_location = CN
crt_organization = organization
crt_organizationalunit = organizational unit
crt_commonname = example.com
crt_email = example@example.com

# 此标签用于控制哪些用户具有创建项目的权限。
# 默认情况下为任何一个人,设置为"adminonly"后仅管理员可以创建项目。
project_creation_restriction = everyone

# nginx需要的cert与key文件路径,仅当协议设置为https时生效。
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
#############

启动

生成Harbor的配置文件:

./prepare
$ docker-compose up -d
Creating network "harbor_default" with the default driver
Creating harbor-log
Creating harbor-db
Creating registry
Creating harbor-ui
Creating harbor-jobservice
Creating nginx
$ docker ps
CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS                                      NAMES
3ac40ba2ca39        nginx:1.11.5                         "nginx -g 'daemon off"   5 minutes ago       Up 5 minutes        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx
0af0ffd056de        vmware/harbor-jobservice:0.5.0-rc1   "/harbor/harbor_jobse"   5 minutes ago       Up 5 minutes                                                   harbor-jobservice
c5c5b1f2c1f3        library/registry:2.5.0               "/entrypoint.sh serve"   5 minutes ago       Up 5 minutes        5000/tcp                                   registry
9839ab999dcf        vmware/harbor-db:0.5.0-rc1           "docker-entrypoint.sh"   5 minutes ago       Up 5 minutes        3306/tcp                                   harbor-db
b68d4e4e9a8b        vmware/harbor-ui:0.5.0-rc1           "/harbor/harbor_ui"      5 minutes ago       Up 5 minutes                                                   harbor-ui
7526a113e3e8        vmware/harbor-log:0.5.0-rc1          "/bin/sh -c 'crond &&"   5 minutes ago       Up 5 minutes        0.0.0.0:1514->514/tcp                      harbor-log

$ docker login 172.20.201.101
Username: admin
Password:
Login Succeeded

测试

浏览器打开https://172.20.201.101,界面如下图:
这里写图片描述

提交一个镜像至私有仓库:

# 如果本地不存在测试镜像请先拉取,如:docker pull nginx
$ docker tag nginx 172.20.201.101/library/nginx && docker push 172.20.201.101/library/nginx
The push refers to a repository [172.20.201.101/library/nginx]
3f117c44afbb: Pushed
c4a8b7411af4: Pushed
fe4c16cbf7a4: Pushed
latest: digest: sha256:9038d5645fa5fcca445d12e1b8979c87f46ca42cfb17beb1e5e093785991a639 size: 948

文章转自CSDN,点击查看原文

鲸鱼云公众号:dockercloud

鲸鱼云公众号

转载请加上原文链接和本文链接:鲸鱼云 » Harbor部署

分享到:更多 ()

评论 抢沙发

评论前必须登录!