Harbor概述

Harbor是由VMware公司开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制,AD/LDAP集成以及审计日志等,足以满足基本企业需求。
官方:https://goharbor.io/
GitHub:https://github.com/goharbor/harbor

Harbor部署先决条件

服务器硬件配置:
最低要求:CPU2核/内存4G/硬盘40GB
推荐:CPU4核/内存8G/硬盘160GB

软件:
Docker CE 17.06版本+
Docker Compose 1.18版本+

Harbor安装有2种方式:
在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小
离线安装:安装包包含部署相关镜像,因此安装包较大

安装最新版的Harbor

  1. wget https://github.com/goharbor/harbor/releases/download/v1.10.1/harbor-offline-installer-v1.10.1.tgz
  2. tar -xf harbor-offline-installer-v1.10.1.tgz
  3. cd harbor
  4. #导入镜像
  5. docker load -i harbor.v1.10.1.tar.gz
  6. #修改配置文件并把https去掉
  7. vim harbor.yml
  8. hostname = 192.168.10.130
  9. #安装docker-compose
  10. curl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  11. chmod +x /usr/local/bin/docker-compose
  12. ./prepare
  13. ./install.sh
  14. docker-compose start
  15. docker-compose stop

Harbor部署HTTP

  1. 1、先安装DockerDocker Compose
  2. 安装依赖包
  3. yum install -y yum-utils
  4. 添加Docker软件包源
  5. yum-config-manager \
  6. --add-repo \
  7. https://download.docker.com/linux/centos/docker-ce.repo
  8. 安装Docker CE
  9. yum install -y docker-ce
  10. 启动Docker
  11. systemctl start docker
  12. systemctl enable docker
  13. 配置Docker加速器源
  14. cat /etc/docker/daemon.json
  15. {
  16. "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
  17. }
  18. 重启Docker
  19. systemctl restart docker
  20. 安装Docker Compose
  21. 下载好docker-compose-Linux-x86_64
  22. mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
  23. chmod +x /usr/bin/docker-compose
  24. 2、部署Harbor HTTP
  25. tar -zxvf harbor-offline-installer-v2.0.0.tgz
  26. cd harbor
  27. cp harbor.yml.tmpl harbor.yml
  28. vi harbor.yml
  29. 配置内容如下:
  30. hostname: reg.harbor.com
  31. # http related config
  32. http:
  33. # port for http, default is 80. If https enabled, this port will redirect to https port
  34. port: 80
  35. #先注释掉https相关配置
  36. # https related config
  37. #https:
  38. # https port for harbor, default is 443
  39. # port: 443
  40. harbor_admin_password: Harbor12345 #harbor密码
  41. ./prepare
  42. ./install.sh

Harbor部署HTTPS

  1. 1、生成SSL证书
  2. cat cfssl.sh
  3. wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
  4. wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
  5. wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
  6. chmod +x cfssl*
  7. mv cfssl_linux-amd64 /usr/bin/cfssl
  8. mv cfssljson_linux-amd64 /usr/bin/cfssljson
  9. mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo
  10. cat certs.sh
  11. cat > ca-config.json <<EOF
  12. {
  13. "signing": {
  14. "default": {
  15. "expiry": "87600h"
  16. },
  17. "profiles": {
  18. "kubernetes": {
  19. "expiry": "87600h",
  20. "usages": [
  21. "signing",
  22. "key encipherment",
  23. "server auth",
  24. "client auth"
  25. ]
  26. }
  27. }
  28. }
  29. }
  30. EOF
  31. cat > ca-csr.json <<EOF
  32. {
  33. "CN": "kubernetes",
  34. "key": {
  35. "algo": "rsa",
  36. "size": 2048
  37. },
  38. "names": [
  39. {
  40. "C": "CN",
  41. "L": "Beijing",
  42. "ST": "Beijing"
  43. }
  44. ]
  45. }
  46. EOF
  47. cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
  48. cat > reg.harbor.com-csr.json <<EOF
  49. {
  50. "CN": "reg.harbor.com",
  51. "hosts": [],
  52. "key": {
  53. "algo": "rsa",
  54. "size": 2048
  55. },
  56. "names": [
  57. {
  58. "C": "CN",
  59. "L": "BeiJing",
  60. "ST": "BeiJing"
  61. }
  62. ]
  63. }
  64. EOF
  65. cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes reg.harbor.com-csr.json | cfssljson -bare reg.harbor.com
  66. 2Harbor启动HTTPS
  67. vi harbor.yml
  68. 配置内容如下:
  69. #注释掉http
  70. # http related config
  71. #http:
  72. # port for http, default is 80. If https enabled, this port will redirect to https port
  73. # port: 80
  74. #启动https
  75. # https related config
  76. https:
  77. # https port for harbor, default is 443
  78. port: 443
  79. # The path of cert and key files for nginx
  80. certificate: /root/harbor/ssl/reg.harbor.com.pem
  81. private_key: /root/harbor/ssl/reg.harbor.com-key.pem
  82. 3、重新配置并部署Harbor
  83. ./prepare
  84. docker-compose down
  85. docker-compose up -d
  86. 4、将数字证书复制到Docker主机
  87. mkdir -p /etc/docker/certs.d/reg.harbor.com
  88. cp /root/ssl/reg.harbor.com.pem /etc/docker/certs.d/reg.harbor.com
  89. 5、验证
  90. 绑定本地hosts
  91. vi /etc/hosts
  92. 192.168.211.128 reg.harbor.com
  93. docker login reg.harbor.com
  94. username: admin
  95. password: Harbor12345
  96. 浏览器访问https://reg.harbor.com

image.png

Harbor镜像漏洞扫描

闲聊:我们知道 镜像安全也是容器化建设中一个很重要的环节,像一些商业软件如:Aqua就很专业但是收费也是很昂贵的,今天我们介绍下Harbor自带的镜像扫描器

添加扫描模块
./prepare --with-clair
prepare base dir is set to /root/harbor
Clearing the configuration file: /config/log/logrotate.conf
Clearing the configuration file: /config/log/rsyslog_docker.conf
Clearing the configuration file: /config/nginx/nginx.conf
Clearing the configuration file: /config/core/env
Clearing the configuration file: /config/core/app.conf
Clearing the configuration file: /config/registry/passwd
Clearing the configuration file: /config/registry/config.yml
Clearing the configuration file: /config/registry/root.crt
Clearing the configuration file: /config/registryctl/env
Clearing the configuration file: /config/registryctl/config.yml
Clearing the configuration file: /config/db/env
Clearing the configuration file: /config/jobservice/env
Clearing the configuration file: /config/jobservice/config.yml
Generated configuration file: /config/log/logrotate.conf
Generated configuration file: /config/log/rsyslog_docker.conf
Generated configuration file: /config/nginx/nginx.conf
Generated configuration file: /config/core/env
Generated configuration file: /config/core/app.conf
Generated configuration file: /config/registry/config.yml
Generated configuration file: /config/registryctl/env
Generated configuration file: /config/registryctl/config.yml
Generated configuration file: /config/db/env
Generated configuration file: /config/jobservice/env
Generated configuration file: /config/jobservice/config.yml
loaded secret from file: /data/secret/keys/secretkey
Generated configuration file: /config/clair/postgres_env
Generated configuration file: /config/clair/config.yaml
Generated configuration file: /config/clair/clair_env
Generated configuration file: /config/clair-adapter/env
Generated configuration file: /compose_location/docker-compose.yml
Clean up the input dir


重启启动harbor服务(注意这里要指定docker-compose.yaml文件)
docker-compose down
Stopping harbor-jobservice ... done
Stopping nginx             ... done
Stopping harbor-core       ... done
Stopping redis             ... done
Stopping registryctl       ... done
Stopping registry          ... done
Stopping harbor-db         ... done
Stopping harbor-portal     ... done
Stopping harbor-log        ... done
Removing harbor-jobservice ... done
Removing nginx             ... done
Removing harbor-core       ... done
Removing redis             ... done
Removing registryctl       ... done
Removing registry          ... done
Removing harbor-db         ... done
Removing harbor-portal     ... done
Removing harbor-log        ... done
Removing network harbor_harbor
Removing network harbor_harbor-clair
WARNING: Network harbor_harbor-clair not found.

docker-compose -f docker-compose.yml up -d
Creating network "harbor_harbor" with the default driver
Creating network "harbor_harbor-clair" with the default driver
Creating harbor-log ... done
Creating harbor-db     ... done
Creating redis         ... done
Creating registryctl   ... done
Creating harbor-portal ... done
Creating registry      ... done
Creating harbor-core   ... done
Creating clair         ... done
Creating clair-adapter     ... done
Creating nginx             ... done
Creating harbor-jobservice ... done

测试扫描
可以看到在项目里面已经显示安装好了扫描器插件,不安装这里是没有的
image.png
image.png
image.png

docker tag df_java reg.harbor.com/dev/df_java
docker push reg.harbor.com/dev/df_java
The push refers to repository [reg.harbor.com/dev/df_java]
ae8399399072: Pushed 
86840743f5c8: Pushed 
a1e7033f082e: Pushed 
78075328e0da: Pushed 
9f8566ee5135: Pushed 
latest: digest: sha256:0c5886ed44504f08900a7a10327491e14b2d4d908cc2378b0770abb98db2a8c7 size: 1365

image.png

Harbor基本使用

1、配置http镜像仓库可信任
vi /etc/docker/daemon.json 
{
    "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
    "insecure-registries": ["reg.harbor.com"]
}

systemctl restart docker


2、打标签
docker tag centos:7 reg.harbor.com/library/centos:7

3、上传
docker push reg.harbor.com/library/centos:7

4、下载
docker pull reg.harbor.com/library/centos:7

Harbor运维

image.png

容器数据持久化目录:/data
日志文件目录:/var/log/harbor