Harbor安装指南
Harbor官网配置CA认证
Kubernetes Harbor安装教程html
一、容器应用的开发和运行离不开可靠的镜像管理。从安全和效率等方面考虑,部署在私有环境内的 Registry 是很是必要的。前端
二、Harbor 是由 VMware 公司中国团队为企业用户设计的 Registry server 开源项目,包括了权限管理(RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特色,设计镜像复制和中文支持等功能,欢迎使用和反馈意见。node
三、做为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提高用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像所有保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。linux
用户与 Docker 镜像仓库经过“项目”进行组织管理,一个用户能够对多个镜像仓库在同一命名空间(project)里有不一样的权限。nginx
镜像能够在多个 Registry 实例中复制(同步)。尤为适合于负载均衡,高可用,混合云和多云的场景。git
Harbor 能够集成企业内部已有的 AD/LDAP,用于鉴权认证管理。github
全部针对镜像仓库的操做均可以被记录追溯,用于审计管理。web
已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。redis
RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。sql
提供在线和离线两种安装工具, 也能够安装到 vSphere 平台(OVA 方式)虚拟设备
Harbor的registry, UI, token等服务,经过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不一样的服务。
负责储存Docker镜像,并处理docker push/pull 命令。因为咱们要对用户进行访问控制,即不一样用户对Docker image有不一样的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token, Registry会经过公钥对token 进行解密验证。
这是Harbor的核心功能,主要提供如下服务:
1)UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行受权。
2)webhook:为了及时获取registry 上image状态变化的状况, 在Registry上配置webhook,把状态变化传递给UI模块。
3)token 服务:负责根据用户权限给每一个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,若是不包含token,会被重定向到这里,得到token后再从新向Registry进行请求。
为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。
为了帮助监控Harbor运行,负责收集其余组件的log,供往后进行分析。
各个组件之间的关系以下图所示:
系统版本:centos7x3.10.0-514.el7.x86_64
Docker版本:1.13.1(yum安装)
harbor版本:harbor-offline-installer-v1.5.3.tgz(离线版)
注:因为Harbor是基于Docker Registry V2版本,因此就要求Docker版本不小于1.10.0,Docker-compose版本不小于1.6.0。
关闭防火墙并禁止开机自启
systemctl stop firewalld.service systemctl disable firewalld
关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
修改主机名
vi /etc/hostname harbor.123.com
域名绑定IP
vi /etc/hosts 192.168.152.170 harbor.123.com
重启 reboot
【舒适提示:上面标红几个步骤必定要注意设置了,不然后面会访问不通】
插播一条排查问题的方法,若是访问不通,能够安装nmap,检查下服务器露出的都有哪些端口
#安装nmap yum -y install nmap
#该ip露出的端口 nmap 43.55.42.25
若是关了前面的防火墙,则会露出443
yum -y install docker
注:建议安装最新稳定版docker!
yum -y install docker-compose
注:若是安装不上就先安装epel-release源,而后安装docker-compose!
yum install -y yum-utils device-mapper-persistent-data lvm2
wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.3.tgz
注:由于我这里网络不太好因此使用aria2c下载的,以上截图表示下载成功!
tar zxf harbor-offline-installer-v1.5.3.tgz
//建立harbor数据存储目录
mkdir /data
注:可能有的童鞋不太理解这一步的意思,简单来讲就是harbor默认的数据存储目录就是/data目录,因此我先建立好,并将harbor解压目录移动到这里,固然若是不建立,后期启动harbor时也会自动建立的!
//移动harbor解压目录
mv harbor /data/
注:这一步操做是为了方便管理和防止误删除(可作可不作)!
【我本人不喜欢 /data 目录,很乱,对Harbor默认的数据存储路径从 /data 调整为 /data/harbor-data了,至关于全部后面执行官了./install.sh 生成的文件统一放在指定路径管理】
修改"secretkey"的路径
#The path of secretkey storage secretkey_path = /data/harbor-data # 默认是 /data
修改原先全部默认为"/data"的volume的挂载路径
version: '2' services: log: image: goharbor/harbor-log:v1.6.1 container_name: harbor-log restart: always volumes: - /var/log/harbor/:/var/log/docker/:z - ./common/config/log/:/etc/logrotate.d/:z ports: - 127.0.0.1:1514:10514 networks: - harbor registry: image: goharbor/registry-photon:v2.6.2-v1.6.1 container_name: registry restart: always volumes: - /data/harbor-data/registry:/storage:z - ./common/config/registry/:/etc/registry/:z networks: - harbor environment: - GODEBUG=netdns=cgo depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "registry" postgresql: image: goharbor/harbor-db:v1.6.1 container_name: harbor-db restart: always volumes: - /data/harbor-data//database:/var/lib/postgresql/data:z networks: - harbor env_file: - ./common/config/db/env depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "postgresql" adminserver: image: goharbor/harbor-adminserver:v1.6.1 container_name: harbor-adminserver env_file: - ./common/config/adminserver/env restart: always volumes: - /data/harbor-data/config/:/etc/adminserver/config/:z - /data/harbor-data/secretkey:/etc/adminserver/key:z - /data/harbor-data/:/data/:z networks: - harbor depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "adminserver" ui: image: goharbor/harbor-ui:v1.6.1 container_name: harbor-ui env_file: - ./common/config/ui/env restart: always volumes: - ./common/config/ui/app.conf:/etc/ui/app.conf:z - ./common/config/ui/private_key.pem:/etc/ui/private_key.pem:z - ./common/config/ui/certificates/:/etc/ui/certificates/:z - /data/harbor-data/secretkey:/etc/ui/key:z - /data/harbor-data/ca_download/:/etc/ui/ca/:z - /data/harbor-data/psc/:/etc/ui/token/:z networks: - harbor depends_on: - log - adminserver - registry logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "ui" jobservice: image: goharbor/harbor-jobservice:v1.6.1 container_name: harbor-jobservice env_file: - ./common/config/jobservice/env restart: always volumes: - /data/harbor-data/job_logs:/var/log/jobs:z - ./common/config/jobservice/config.yml:/etc/jobservice/config.yml:z networks: - harbor depends_on: - redis - ui - adminserver logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "jobservice" redis: image: goharbor/redis-photon:v1.6.1 container_name: redis restart: always volumes: - /data/harbor-data/redis:/var/lib/redis networks: - harbor depends_on: - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "redis" proxy: image: goharbor/nginx-photon:v1.6.1 container_name: nginx restart: always volumes: - ./common/config/nginx:/etc/nginx:z networks: - harbor ports: - 80:80 - 443:443 - 4443:4443 depends_on: - postgresql - registry - ui - log logging: driver: "syslog" options: syslog-address: "tcp://127.0.0.1:1514" tag: "proxy" networks: harbor: external: false
改完后可经过grep检查下是否都改全了
cat docker-compose.yml | grep harbor-data
完成上述修改后执行下述命令从新部署容器便可:
./prepare docker-compose up -d
//建立CA证书存放目录
mkdir /data/cert
注:能够在这个目录里建立证书!
//进入存放证书目录
cd /data/cert/
//建立本身的CA证书
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt
注:由于出于安全的考虑,因此强烈建议搭建基于https的harbor,那么就须要添加ca证书!
openssl req -newkey rsa:4096 -nodes -sha256 -keyout harbor.123.com.key -out harbor.123.com.csr
openssl x509 -req -days 365 -in harbor.123.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out harbor.123.com.crt
注:以上这步操做是和wangfeiyu.com.csr在同一目录操做的,若是不在同一目录,须要写绝对路径,不然可能会报错!
//echo subjectAltName = IP:192.168.152.170 > extfile.cnf //openssl x509 -req -days 365 -in wangfeiyu.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out harbor.123.com.crt
注:执行以上两条命令便可实现IP注册主机证书!
vi /data/harbor/harbor.cfg
#hostname设置访问地址。可使用ip、域名、主机名,不能够设置为127.0.0.1或localhost。(若是部署的是备份库,填写ip而不是域名,不然会致使仓库管理链接失败,host没法识别缘由不明) hostname = harbor.123.com #访问协议。默认是http,若是搭建https的仓库就改成https。 ui_url_protocol = https #可选的https证书配置地址 ssl_cert = /root/cert/bakreg.cn.crt ssl_cert_key = /root/cert/bakreg.cn.key #用于在复制策略中加密或解密远程注册表的密码的密钥路径。secretkey_path不须要修改。若是必须修改它,你须要在/root/harbor/docker-compose.yml中手动调整路径,由于它们是硬编码。 secretkey_path = /data #邮件设置,发送重置密码邮件时使用 #email_identity做为用户名 email_identity = email_server = 邮箱的smtp服务器域名 email_server_port = 25 email_username = email_password = email_from = email_ssl = false email_insecure = false #管理员admin的登陆密码。默认是Harbor12345 harbor_admin_password = Harbor12345 #认证方式。默认是db_auth,支持多种认证方式,如数据库认证(db_auth)、LADP(ldap_auth)。 auth_mode = db_auth #LDAP认证时配置项(这项能够登陆后配置也能够)。 ldap_url = # LDAP URL ldap_searchdn = # LDAP 搜索DN ldap_search_pwd = # LDAP 搜索DN的密码 ldap_basedn = # LDAP 基础DN ldap_filter = # LDAP 过滤器 ldap_uid = # LDAP 用户uid的属性 ldap_scope = 2 ldap_timeout = 5 #是否开启注册。on开启,off关闭。 self_registration = off #Token有效时间。默认30分钟。 token_expiration = 30 #标记用户建立项目权限控制。默认是everyone(容许全部人建立),也能够设置为adminonly(只能管理员才能建立) project_creation_restriction = everyone
注:暂时先更改这几行便可启动,其余功能按照需求更改!
systemctl start docker systemctl enable docker
cd /data/harbor/
./install.sh
注:以上截图说明harbor的https协议加密成功!
//关闭harbor服务(先进入harbor目录)
docker-compose stop
//开启harbor服务(先进入harbor目录)
docker-compose up -d
注:有童鞋可能不理解为啥不用IP地址访问,由于咱们是针对域名作的https证书,因此只能使用域名访问才能使用自签的证书!可是问题又来了,为啥浏览器会这样呢?缘由是windows没有针对这个域名作域名解析,怎么才能让他访问到呢?
设置方式:(windows系统)
//打开windows路径
C:\Windows\System32\drivers\etc
//点击这个特殊的hosts文件,并用记事本方式打开
注:将harbor服务器的域名和IP记录到windows系统中,便可实现域名访问网页!
注:以上截图访问方式使用的是https加密访问可是须要咱们将证书导入浏览器才行!
//点击高级
//点击添加列外
//点击确认安全列外
注:以上截图已经能够访问到网页,说明nginx加密成功或者证书导入成功!其余的浏览器导入证书方式不同,可是超级简单,自行百度便可!
//输入用户名密码
注:默认的用户名admin,密码Harbor12345。
//点击登录
注:建立用户时按照密码复杂要求设置密码!
docker login harbor.123.com
报错:Error response from daemon: Get https://harbor.123.com/v1/users/: x509: certificate signed by unknown authority
解决方式
一、centos7系统以上报错的缘由是由于自签的证书没有加入到系统级别信任,只须要将harbor.123.com.crt拷贝到/etc/pki/ca-trust/source/anchors/reg.你的域名.crt,而后须要执行命令update-ca-trust,最后重启harbor和docker便可!
cp harbor.123.com.crt /etc/pki/ca-trust/source/anchors/reg.harbor.123.com.crt
二、ubunt16.04系统以上报错的缘由是由于自签的证书没有加入到系统级别信任,只须要将harbor.123.com.crt拷贝到/usr/local/share/ca-certificates/reg.你的域名.crt,而后执行命令update-ca-certificates,最后重启harbor和docker便可!
docker tag 原镜像名 harbor.123.com /项目名/打标记的镜像名
注:若是是普通用户推送镜像,切记须要建立项目,否则上传给默认的library项目没有权限,只有admin用户有推送library项目的权利。
//先登陆镜像库
docker login harbor.123.com Username: admin Password:
//推送镜像到仓库
docker push harbor.123.com/library/tomcat:v1
注:若是是普通用户推送镜像,那么以上的library项目名换成本身的项目名便可!
假设建的用户为,helen,则须要在仓库新建一个名为 helen 的项目,不然会推送失败
//删除打标记的镜像
docker rmi -f harbor.123.com/library/tomcat:v1
//拉取仓库的tomcat镜像
docker pull 镜像的完整路径
注:可能有童鞋会说,若是不知道怎么填写完整路径怎么办,也不知道怎么下载镜像的,那么就登陆上网页harbor,而后点击你要下载的那个镜像后边pull命令提醒,例如:
docker logout harbor的域名
因为经过openssl建立的是不可信的,直接拉取或登陆时会报“x509: certificate signed by unknown authority”,故须要让客户机信任该证书。
scp /data/cert/harbor.123.com.crt root@192.168.152.91:/root/
cat harbor.123.com.crt >> /etc/pki/tls/certs/ca-bundle.crt
echo "192.168.152.170 harbor.123.com" >>/etc/hosts
//进入harbor目录
cd /data/harbor/
//关闭harbor服务
docker-compose stop
systemctl restart docker
//进入harbor目录
cd /data/harbor/
//启动harbor服务
docker-compose up –d
docker login harbor.123.com
注:废话就很少说了,其余的打标记、上传、下载,方式都同样!
Error: Status 404 trying to push repository test/app: "{\"timestamp\":1555033311968,\"status\":404,\"error\":\"Not Found\",\"message\":\"No message available\",\"path\":\"/v1/repositories/test/app/\"}"
这个问题,须要从新对前端页面和后台配置,作https证书
须要两步:
Error response from daemon: Get https://hub.**.cn/v1/users/: x509: certificate signed by unknown authority
处理方法:
[root@test cert]# cat hub.***.cn.crt >> /etc/pki/tls/certs/ca-bundle.crt [root@test cert]# systemctl restart docker [root@test cert]# docker login hub.***.cn Username: xxx Password: Login Succeeded
不管经过接口或者web界面删除镜像,都只是软删除,虽然查询不到,可是镜像文件仍是保存在磁盘上,所以须要经过如下方法进行垃圾回收,清理释放磁盘
#进入导harbor yaml文件所在目录 cd /usr/local/src/harbor #中止harbor docker-compose stop #使用清理镜像进行垃圾回收 #使用--dry-run 参数进行预览,不使用则进行清理 docker run -it --name gc --rm --volumes-from registry vmware/registry:1.5.3-photon garbage-collect /etc/registry/config.yml #从新启动harbor docker-compose start
建议的方法是,先在web界面所有删除,而后再执行上面gc的方法