一,Harbor简介

  • VMware的开源项目https://github.com/vmware/harbor
  • Harbor可帮助用户迅速搭建企业级的注册服务。它提供了管理图形界面,基于角色的访问控制(Role Based Access Control),镜像远程复制(同步),AD/LDAP集成,以及审计日志等企业用户需求的功能,同时还原生支持中文,深受中国用户的喜爱。
  • 该项目自推出以来,在GitHub获得了超过3300多个star和900多个forks。
 

1.1 基于角色的访问控制

用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。

 

1.2 图形化用户界面

用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间

 

1.3 审计管理

所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。

 

1.4 国际化

基于英文与中文语言进行了本地化。可以增加更多的语言支持。

 

1.5 RESTful API:

提供给管理员对于Harbor更多的操控,使得与其他管理软件集成变得更容易。

 

1.6 LDAP认证

 

1.7 镜像复制

基于策略的Docker镜像复制功能,可在不同的数据中心,不同的运行环境之间同步镜像,并提供友好的管理界面,大大简化了实际运维中的镜像管理工作。

 

1.8 与Clair集成

与Clair集成,添加漏洞扫描功能。Clair是coreos开源的容器漏洞扫描工具,在容器逐渐普及的今天,容器镜像安全问题日益严重。Clair是目前少数的开源安全扫描工具。

 

1.9 Notary签名工具

Notary是Docker镜像的签名工具,用来保证镜像在pull,push和传输工程中的一致性和完整性,避免中间人攻击,避免非法的镜像更新和运行。

 

二,为Harbor签发域名证书

openssl是目前最流行的SSL密码库工具,提供了一个通用,功能完备的工具套件,用以支持SSL/TLS协议的实现。 
官网:https://www.openssl.org/source/

环境准备

主机名IP用途最小资源配比最佳资源配比
harbor 192.168.200.145 harbor私有镜像仓库 2CPU 4CPU
      4GBMEM 8GB
 
  1. [root@Harbor ~]# hostname -I
  2. 192.168.200.145
  3. [root@Harbor ~]# cat /etc/redhat-release
  4. CentOS Linux release 7.5.1804 (Core)
  5. [root@Harbor ~]# uname -r
  6. 3.10.0-862.3.3.el7.x86_64

官方文档:https://github.com/vmware/harbor/blob/master/docs/configure_https.md

 
  1. #创建自己的CA证书
  2. [[root@harbor ~]# mkdir -p /data/ssl
  3. [root@harbor ~]# cd /data/ssl
  4. [root@harbor ssl]# which openssl
  5. /usr/bin/openssl
  6. [root@harbor ssl]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt
  7. Generating a 4096 bit RSA private key
  8. ...............................................++
  9. ...........................................................................................................................................................................................................................................................................................................++
  10. writing new private key to 'ca.key'
  11. -----
  12. You are about to be asked to enter information that will be incorporated
  13. into your certificate request.
  14. What you are about to enter is what is called a Distinguished Name or a DN.
  15. There are quite a few fields but you can leave some blank
  16. For some fields there will be a default value,
  17. If you enter '.', the field will be left blank.
  18. -----
  19. Country Name (2 letter code) [XX]:CN
  20. State or Province Name (full name) []:Beijing
  21. Locality Name (eg, city) [Default City]:Beijing
  22. Organization Name (eg, company) [Default Company Ltd]:yunjisuan
  23. Organizational Unit Name (eg, section) []:yunjisuan
  24. Common Name (eg, your name or your server's hostname) []:www.yunjisuan.com
  25. Email Address []:
  26. #生成证书签名请求
  27. [root@harbor ssl]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout www.yunjisuan.com.key -out www.yunjisuan.com.csr
  28. Generating a 4096 bit RSA private key
  29. .........................................................................................................................................................................................++
  30. .................................................++
  31. writing new private key to 'www.yunjisuan.com.key'
  32. -----
  33. You are about to be asked to enter information that will be incorporated
  34. into your certificate request.
  35. What you are about to enter is what is called a Distinguished Name or a DN.
  36. There are quite a few fields but you can leave some blank
  37. For some fields there will be a default value,
  38. If you enter '.', the field will be left blank.
  39. -----
  40. Country Name (2 letter code) [XX]:CN
  41. State or Province Name (full name) []:Beijing
  42. Locality Name (eg, city) [Default City]:Beijing
  43. Organization Name (eg, company) [Default Company Ltd]:yunjisuan
  44. Organizational Unit Name (eg, section) []:yunjisuan
  45. Common Name (eg, your name or your server's hostname) []:www.yunjisuan.com
  46. Email Address []:
  47. Please enter the following 'extra' attributes
  48. to be sent with your certificate request
  49. A challenge password []:
  50. An optional company name []:
  51. #生成注册表主机的证书
  52. [root@harbor ssl]# openssl x509 -req -days 365 -in www.yunjisuan.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www.yunjisuan.com.crt
  53. Signature ok
  54. subject=/C=CN/ST=Beijing/L=Beijing/O=yunjisuan/OU=yunjisuan/CN=www.yunjisuan.com
  55. Getting CA Private Key
  56. #查看证书情况
  57. [root@harbor ssl]# ll
  58. 总用量 24
  59. -rw-r--r-- 1 root root 2049 7 18 01:16 ca.crt
  60. -rw-r--r-- 1 root root 3272 7 18 01:16 ca.key
  61. -rw-r--r-- 1 root root 17 7 18 01:19 ca.srl
  62. -rw-r--r-- 1 root root 1931 7 18 01:19 www.yunjisuan.com.crt
  63. -rw-r--r-- 1 root root 1716 7 18 01:17 www.yunjisuan.com.csr
  64. -rw-r--r-- 1 root root 3272 7 18 01:17 www.yunjisuan.com.key
 

三,信任自签发的域名证书

由于CA证书是我们自己签发的Linux操作系统是不信任的,因此我们需要把证书加入到系统的信任证书里

 
  1. #将自签ca证书添加到系统信任
  2. [root@harbor ssl]# pwd
  3. /data/ssl
  4. [root@harbor ssl]# cp www.yunjisuan.com.crt /etc/pki/ca-trust/source/anchors/
  5. #让系统ca信任设置立刻生效
  6. [root@harbor ssl]# update-ca-trust enable
  7. [root@harbor ssl]# update-ca-trust extract
 

四,Harbor 1.4 版本配置与安装

 

4.1 安装docker-ce社区版

 
  1. [root@docker ssl]# sestatus
  2. SELinux status: disabled
  3. [root@Harbor ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
  4. [root@Harbor yum.repos.d]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
  5. [root@Harbor ~]# yum -y install docker-ce
  6. [root@Harbor ~]# systemctl start docker
  7. [root@Harbor ~]# systemctl enable docker
  8. Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
  9. [root@Harbor ~]# docker version
  10. Client:
  11. Version: 18.03.1-ce
  12. API version: 1.37
  13. Go version: go1.9.5
  14. Git commit: 9ee9f40
  15. Built: Thu Apr 26 07:20:16 2018
  16. OS/Arch: linux/amd64
  17. Experimental: false
  18. Orchestrator: swarm
  19. Server:
  20. Engine:
  21. Version: 18.03.1-ce
  22. API version: 1.37 (minimum version 1.12)
  23. Go version: go1.9.5
  24. Git commit: 9ee9f40
  25. Built: Thu Apr 26 07:23:58 2018
  26. OS/Arch: linux/amd64
  27. Experimental: false
 

4.2 下载并安装harbor私有仓库

 
  1. #创建harbor的证书目录,并复制
  2. [root@harbor ssl]# mkdir -p /etc/ssl/harbor
  3. [root@harbor ssl]# cp /data/ssl/www.yunjisuan.com.key /etc/ssl/harbor/
  4. [root@harbor ssl]# cp /data/ssl/www.yunjisuan.com.crt /etc/ssl/harbor/
  5. [root@harbor ssl]# ll /etc/ssl/harbor/
  6. 总用量 8
  7. -rw-r--r-- 1 root root 1931 7 18 01:28 www.yunjisuan.com.crt
  8. -rw-r--r-- 1 root root 3272 7 18 01:28 www.yunjisuan.com.key
  9. #创建harbor下载目录并下载harbor-offline-installer-v1.5.0.tgz
  10. [root@harbor ssl]# mkdir -p /data/install
  11. [root@harbor ssl]# cd /data/install
  12. [root@harbor install]# pwd
  13. /data/install
  14. [root@Harbor install]# wget http://harbor.orientsoft.cn/harbor-v1.5.0/harbor-offline-installer-v1.5.0.tgz
  15. [root@Harbor install]# ls
  16. harbor-offline-installer-v1.5.0.tgz
  17. [root@Harbor install]# tar xf harbor-offline-installer-v1.5.0.tgz
  18. [root@Harbor install]# ls
  19. harbor harbor-offline-installer-v1.5.0.tgz
  20. [root@Harbor install]# cd harbor
  21. [root@Harbor harbor]# ll
  22. 总用量 854960
  23. drwxr-xr-x 3 root root 23 7 16 22:29 common #模板目录
  24. -rw-r--r-- 1 root root 1185 5 2 23:34 docker-compose.clair.yml
  25. -rw-r--r-- 1 root root 1725 5 2 23:34 docker-compose.notary.yml
  26. -rw-r--r-- 1 root root 3596 5 2 23:34 docker-compose.yml
  27. drwxr-xr-x 3 root root 156 5 2 23:34 ha #harbor高可用配置
  28. -rw-r--r-- 1 root root 6687 5 2 23:34 harbor.cfg #harbor配置文件
  29. -rw-r--r-- 1 root root 875401338 5 2 23:36 harbor.v1.5.0.tar.gz
  30. -rwxr-xr-x 1 root root 5773 5 2 23:34 install.sh
  31. -rw-r--r-- 1 root root 10771 5 2 23:34 LICENSE
  32. -rw-r--r-- 1 root root 482 5 2 23:34 NOTICE
  33. -rwxr-xr-x 1 root root 27379 5 2 23:34 prepare
  34. [root@Harbor harbor]# cp harbor.cfg{,.bak}
  35. #修改harbor.cfg配置文件
  36. [root@Harbor harbor]# cat -n harbor.cfg.bak | sed -n '7p;11p;23p;24p;68p'
  37. 7 hostname = reg.mydomain.com #要修改成我们证书的域名
  38. 11 ui_url_protocol = http #启用加密传输协议https
  39. 23 ssl_cert = /data/cert/server.crt #证书的位置
  40. 24 ssl_cert_key = /data/cert/server.key #证书密钥位置
  41. 68 harbor_admin_password = Harbor12345 #默认管理员及密码
  42. #修改成如下配置
  43. [root@Harbor harbor]# cat -n harbor.cfg | sed -n '7p;11p;23p;24p;68p'
  44. 7 hostname = www.yunjisuan.com
  45. 11 ui_url_protocol = https
  46. 23 ssl_cert = /etc/ssl/harbor/www.yunjisuan.com.crt
  47. 24 ssl_cert_key = /etc/ssl/harbor/www.yunjisuan.com.key
  48. 68 harbor_admin_password = Harbor12345
  49. #安装命令docker-compose(需要1.21版本)
  50. [root@Harbor ~]# curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
  51. % Total % Received % Xferd Average Speed Time Time Time Current
  52. Dload Upload Total Spent Left Speed
  53. 100 617 0 617 0 0 136 0 --:--:-- 0:00:04 --:--:-- 176
  54. 100 10.3M 100 10.3M 0 0 161k 0 0:01:05 0:01:05 --:--:-- 181k
  55. [root@Harbor ~]# ll /usr/local/bin/docker-compose
  56. -rw-r--r-- 1 root root 10858808 7 16 23:08 /usr/local/bin/docker-compose
  57. [root@Harbor ~]# chmod +x /usr/local/bin/docker-compose
  58. [root@Harbor ~]# which docker-compose
  59. /usr/local/bin/docker-compose
  60. [root@Harbor ~]# docker-compose --version
  61. docker-compose version 1.21.2, build a133471
  62. #安装harbor私有镜像仓库
  63. [root@Harbor harbor]# ./install.sh --with-notary --with-clair #--with-notary启用镜像签名;--with-clair启用漏洞扫描
  64. #查看harbor启动的镜像
  65. [root@Harbor harbor]# docker ps -a
  66. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  67. 5c6fa83f89d8 vmware/nginx-photon:v1.5.0 "nginx -g 'daemon of…" About a minute ago Up About a minute (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp nginx
  68. c6b5c26bbbb9 vmware/harbor-jobservice:v1.5.0 "/harbor/start.sh" About a minute ago Up About a minute harbor-jobservice
  69. bcfdd6c2ef34 vmware/notary-server-photon:v0.5.1-v1.5.0 "/bin/server-start.sh" About a minute ago Up About a minute notary-server
  70. 43c6ecfa7c89 vmware/harbor-ui:v1.5.0 "/harbor/start.sh" About a minute ago Up About a minute (healthy) harbor-ui
  71. b66330fdc3a3 vmware/clair-photon:v2.0.1-v1.5.0 "/docker-entrypoint.…" About a minute ago Up About a minute (healthy) 6060-6061/tcp clair
  72. 57ec2b07dc55 vmware/notary-signer-photon:v0.5.1-v1.5.0 "/bin/signer-start.sh" About a minute ago Up About a minute notary-signer
  73. 1ba4893733ef vmware/registry-photon:v2.6.2-v1.5.0 "/entrypoint.sh serv…" About a minute ago Up About a minute (healthy) 5000/tcp registry
  74. 4822f0ca1ea8 vmware/postgresql-photon:v1.5.0 "/entrypoint.sh post…" About a minute ago Up About a minute (healthy) 5432/tcp clair-db
  75. 36761f96e8fd vmware/harbor-adminserver:v1.5.0 "/harbor/start.sh" About a minute ago Up About a minute (healthy) harbor-adminserver
  76. eb250cb9b378 vmware/mariadb-photon:v1.5.0 "/usr/local/bin/dock…" About a minute ago Up About a minute 3306/tcp notary-db
  77. 122a2e8b7296 vmware/redis-photon:v1.5.0 "docker-entrypoint.s…" About a minute ago Up About a minute 6379/tcp redis
  78. 7a0df0e8bb35 vmware/harbor-db:v1.5.0 "/usr/local/bin/dock…" About a minute ago Up About a minute (healthy) 3306/tcp harbor-db
  79. 4e4734f8acfa vmware/harbor-log:v1.5.0 "/bin/sh -c /usr/loc…" About a minute ago Up About a minute (healthy) 127.0.0.1:1514->10514/tcp harbor-log

通过浏览器进行访问测试

https://192.168.200.145

QQ截图20180716233831.png-25.4kB

最后我还需要修改一下安全模式

QQ截图20180717000528.png-23.2kB

项目创建:设定为仅管理 
不允许自动注册

 

五,镜像管理与安全:漏洞扫描和镜像签名

 

5.1 添加docker国内公有镜像源

 
  1. [root@harbor harbor]# cat /etc/docker/daemon.json
  2. {
  3. "registry-mirrors":[ "https://registry.docker-cn.com" ]
  4. }
  5. [root@harbor harbor]# systemctl daemon-reload
  6. [root@harbor harbor]# systemctl restart docker
 

5.2 重新启动Harbor私有镜像仓库

 
  1. #让harbor修改过的配置立刻生效
  2. [root@harbor harbor]# ./prepare
  3. Clearing the configuration file: ./common/config/adminserver/env
  4. Clearing the configuration file: ./common/config/ui/env
  5. Clearing the configuration file: ./common/config/ui/app.conf
  6. Clearing the configuration file: ./common/config/ui/private_key.pem
  7. Clearing the configuration file: ./common/config/db/env
  8. Clearing the configuration file: ./common/config/jobservice/env
  9. Clearing the configuration file: ./common/config/jobservice/config.yml
  10. Clearing the configuration file: ./common/config/registry/config.yml
  11. Clearing the configuration file: ./common/config/registry/root.crt
  12. Clearing the configuration file: ./common/config/nginx/conf.d/notary.upstream.conf
  13. Clearing the configuration file: ./common/config/nginx/conf.d/notary.server.conf
  14. Clearing the configuration file: ./common/config/nginx/cert/www.yunjisuan.com.crt
  15. Clearing the configuration file: ./common/config/nginx/cert/www.yunjisuan.com.key
  16. Clearing the configuration file: ./common/config/nginx/nginx.conf
  17. Clearing the configuration file: ./common/config/log/logrotate.conf
  18. Clearing the configuration file:
  19. #清理所有harbor容器进程
  20. [root@harbor harbor]# docker-compose down
  21. Stopping harbor-jobservice ... done
  22. Stopping nginx ... done
  23. Stopping harbor-ui ... done
  24. Stopping harbor-adminserver ... done
  25. Stopping redis ... done
  26. Stopping registry ... done
  27. Stopping harbor-log ... done
  28. WARNING: Found orphan containers (notary-server, notary-signer, clair-db) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
  29. Removing harbor-jobservice ... done
  30. Removing nginx ... done
  31. Removing harbor-ui ... done
  32. Removing harbor-db ... done
  33. Removing harbor-adminserver ... done
  34. Removing redis ... done
  35. Removing registry ... done
  36. Removing harbor-log ... done
  37. Removing network harbor_harbor
  38. #后台启动所有harbor容器进程
  39. [root@harbor harbor]# docker-compose up -d
  40. Creating network "harbor_harbor" with the default driver
  41. WARNING: Found orphan containers (notary-server, notary-signer, clair-db) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
  42. Creating harbor-log ... done
  43. Creating harbor-adminserver ... done
  44. Creating registry ... done
  45. Creating harbor-db ... done
  46. Creating redis ... done
  47. Creating harbor-ui ... done
  48. Creating harbor-jobservice ... done
  49. Creating nginx ... done
 

5.3 下载一个公有镜像并上传到harbor

 
  1. #harbor本地下载一个公有仓库镜像centos:7
  2. [root@harbor harbor]# docker pull centos:7
  3. 7: Pulling from library/centos
  4. 7dc0dca2b151: Pull complete
  5. Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322
  6. Status: Downloaded newer image for centos:7
  7. #本地映射私有仓库域名
  8. [root@harbor harbor]# tail -1 /etc/hosts
  9. 192.168.200.145 www.yunjisuan.com
  10. #将centos:7镜像改名并上传私有镜像仓库
  11. [root@harbor harbor]# docker tag centos:7 www.yunjisuan.com/library/centos:7
  12. [root@harbor harbor]# docker images | grep centos
  13. centos 7 49f7960eb7e4 6 weeks ago 200MB
  14. www.yunjisuan.com/library/centos 7 49f7960eb7e4 6 weeks ago 200MB
  15. [root@harbor harbor]# docker push www.yunjisuan.com/library/centos:7
  16. The push refers to repository [www.yunjisuan.com/library/centos]
  17. bcc97fbfc9e1: Preparing
  18. denied: requested access to the resource is denied #我们发现与私有仓库的连接被拒绝,这是因为我们还没有登陆验证
  19. #登陆验证harbor私有仓库,并上传镜像
  20. [root@harbor harbor]# docker login www.yunjisuan.com
  21. Username: admin
  22. Password:
  23. Login Succeeded
  24. [root@harbor harbor]# docker push www.yunjisuan.com/library/centos:7
  25. The push refers to repository [www.yunjisuan.com/library/centos]
  26. bcc97fbfc9e1: Pushed
  27. 7: digest: sha256:eed5b251b615d1e70b10bcec578d64e8aa839d2785c2ffd5424e472818c42755 size: 529
 

5.4 登陆浏览器查看镜像上传结果,并扫描漏洞

1.png-16.4kB

2.png-19.8kB

4.png-25.7kB

 

5.5 设置镜像仓库安全等级

5.png-20.1kB

6.png-30kB

 

5.6 为docker客户端下发域名证书

主机名IP用途最小资源配比最佳资源配比
docker-client 192.168.200.142 docker客户端    
harbor 192.168.200.145 harbor私有镜像仓库 2CPU 4CPU
      4GBMEM 8GB
      40GBDISK 160GB
 
  1. #映射harbor私有仓库域名
  2. [root@docker-client ~]# cat /etc/redhat-release
  3. CentOS Linux release 7.5.1804 (Core)
  4. [root@docker-client ~]# uname -r
  5. 3.10.0-862.3.3.el7.x86_64
  6. [root@docker-client ~]# hostname -I
  7. 192.168.200.142 172.17.0.1
  8. [root@docker-client ~]# tail -1 /etc/hosts
  9. 192.168.200.145 www.yunjisuan.com
  10. #安装docker-ce社区版
  11. [root@docker-client ~]# sestatus
  12. SELinux status: disabled
  13. [root@docker-client ~]# systemctl stop firewalld
  14. [root@docker-client ~]# systemctl disable firewalld
  15. [root@docker-client ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
  16. [root@docker-client ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
  17. % Total % Received % Xferd Average Speed Time Time Time Current
  18. Dload Upload Total Spent Left Speed
  19. 100 2424 100 2424 0 0 437 0 0:00:05 0:00:05 --:--:-- 601
  20. [root@docker-client ~]# yum -y install docker-ce
  21. [root@docker-client ~]# systemctl start docker
  22. [root@docker-client ~]# systemctl enable docker
  23. Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
  24. [root@docker-client ~]# docker version
  25. #配置国内公有镜像源
  26. [root@docker-client ~]# cat /etc/docker/daemon.json
  27. {
  28. "registry-mirrors":[ "https://registry.docker-cn.com" ]
  29. }
  30. [root@docker-client ~]# systemctl daemon-reload
  31. [root@docker-client ~]# systemctl restart docker
  32. #下载mongo公有镜像
  33. [root@docker-client ~]# docker pull mongo
  34. Using default tag: latest
  35. latest: Pulling from library/mongo
  36. 3620e2d282dc: Pull complete
  37. ef22f5e4b3b2: Pull complete
  38. 99f229f854da: Pull complete
  39. 4fe433abe16a: Pull complete
  40. c9b72a16d85e: Pull complete
  41. f1757e0920c9: Pull complete
  42. 6ad61d16333c: Pull complete
  43. 1b55b55716bc: Pull complete
  44. b9e1a31a5de8: Pull complete
  45. a871e8da652e: Pull complete
  46. 0015ffced2ab: Pull complete
  47. ee8e51b51b8e: Pull complete
  48. 210e26b24d82: Pull complete
  49. a2f5ff21092f: Pull complete
  50. Digest: sha256:2e5e54f94429839d4904c9962b6933ef631b1938b6223c1cf84a0442421f111d
  51. Status: Downloaded newer image for mongo:latest
  52. [root@docker-client ~]# docker images
  53. REPOSITORY TAG IMAGE ID CREATED SIZE
  54. mongo latest af93d1bb9e2a 23 hours ago 379MB
  55. #为docker客户端下发域名(在harbor本地执行操作)
  56. #将harbor上自签发的域名证书www.yunjisuan.com.crt复制到docker客户端对应目录下
  57. [root@harbor ssl]# scp www.yunjisuan.com.crt 192.168.200.142:/etc/pki/ca-trust/source/anchors/
  58. root@192.168.200.142 s password:
  59. www.yunjisuan.com.crt 100% 1931
  60. #在docker客户端上执行操作,让证书立刻生效
  61. [root@docker-client ~]# update-ca-trust enable
  62. [root@docker-client ~]# update-ca-trust extract
  63. #下发证书后必须重启动docker-client的docker服务
  64. [root@docker-client anchors]# systemctl restart docker
  65. #docker-client登陆harbor仓库进行登陆验证
  66. [root@docker-client anchors]# docker login www.yunjisuan.com
  67. Username: admin
  68. Password:
  69. Login Succeeded
  70. #修改镜像的名字并上传harbor私有仓库
  71. [root@docker-client ~]# docker tag mongo:latest www.yunjisuan.com/library/mongo
  72. [root@docker-client ~]# docker images
  73. REPOSITORY TAG IMAGE ID CREATED SIZE
  74. www.yunjisuan.com/library/mongo latest af93d1bb9e2a 23 hours ago 379MB
  75. mongo latest af93d1bb9e2a 23 hours ago 379MB
  76. [root@docker-client anchors]# docker push www.yunjisuan.com/library/mongo #上传镜像仓库
  77. The push refers to repository [www.yunjisuan.com/library/mongo]
  78. 286bc1096109: Pushed
  79. 4a7d1d8fcfa6: Pushed
  80. 1dcddd0f87ed: Pushed
  81. ca717ad13c2c: Pushed
  82. 5a025566f67e: Pushed
  83. 2cfea46080b7: Pushed
  84. 892f0d18231e: Pushed
  85. 1bf645743d38: Pushed
  86. defd6b59a2f3: Pushed
  87. 709bdd00b1a4: Pushed
  88. 07b9c3c04cbd: Pushed
  89. 6eaddaf493f1: Pushed
  90. a0e188d0e278: Pushed
  91. 711e4cb62f50: Pushed
  92. latest: digest: sha256:810e499962b39a05131c5d25230fc92ba385f9353fc44ee8ed27a14ce49c8bac size: 3235

浏览器登陆harbor进行查看:

QQ截图20180718112425.png-21.6kB

出现漏洞的镜像截图:

QQ截图20180718113238.png-40.2kB

 

六,harbor镜像的复制与同步

harbor私有仓库的主从复制,类似于MySQL,属于1对多的复制

主机名IP用途最小资源配比最佳资源配比
docker-client 192.168.200.142 docker客户端    
harbor 192.168.200.145 harbor私有镜像仓库 2CPU 4CPU
      4GBMEM 8GB
harbor-slave 192.168.200.146 harbor从库 2CPU 4CPU
      4GBMEM 8GB
 

6.1 部署Habor-Slave

再安装一个harbor私有仓库作为harbor的从库,域名为www2.yunjisuan.com

请参考Harbor-Master搭建过程

QQ截图20180718175223.png-81.1kB

在Harbor-Master和Harbor-Slave上做域名映射

 
  1. #主Harbor
  2. [root@harbor ~]# tail -2 /etc/hosts
  3. 192.168.200.145 www.yunjisuan.com
  4. 192.168.200.146 www2.yunjisuan.com
  5. #从Harbor
  6. [root@harbor-slave ~]# tail -2 /etc/hosts
  7. 192.168.200.145 www.yunjisuan.com
  8. 192.168.200.146 www2.yunjisuan.com

特别提示: 
离线方式安装的Habor容器默认会从LDNS处获取对应的域名的IP解析,并不找本地的hosts文件 
由于我们是自己是自己设定的域名,因此,需要搭建用于内网解析的LDNS域名解析服务器

 

6.2 搭建LDNS域名解析服务器

主机名IP用途最小资源配比最佳资源配比
docker-client 192.168.200.142 docker客户端    
harbor 192.168.200.145 harbor私有镜像仓库 2CPU 4CPU
      4GBMEM 8GB
harbor-slave 192.168.200.146 harbor从库 2CPU 4CPU
      4GBMEM 8GB
LDNS 192.168.200.147 本地DNS    
 
  1. [root@LDNS ~]# yum -y install bind bind-chroot bind-utils
  2. [root@LDNS ~]# cd /etc
  3. [root@LDNS etc]# cp named.conf{,.bak}
  4. #配置文件修改成如下所示:
  5. [root@LDNS named]# cat /etc/named.conf
  6. options {
  7. listen-on port 53 { 192.168.200.147; };
  8. // listen-on-v6 port 53 { ::1; };
  9. directory "/var/named";
  10. dump-file "/var/named/data/cache_dump.db";
  11. statistics-file "/var/named/data/named_stats.txt";
  12. memstatistics-file "/var/named/data/named_mem_stats.txt";
  13. allow-query { any; };
  14. forwarders { 192.168.200.2; };
  15. recursion yes;
  16. dnssec-enable no;
  17. dnssec-validation no;
  18. /* Path to ISC DLV key */
  19. bindkeys-file "/etc/named.iscdlv.key";
  20. managed-keys-directory "/var/named/dynamic";
  21. pid-file "/run/named/named.pid";
  22. session-keyfile "/run/named/session.key";
  23. };
  24. logging {
  25. channel default_debug {
  26. file "data/named.run";
  27. severity dynamic;
  28. };
  29. };
  30. zone "." IN {
  31. type hint;
  32. file "named.ca";
  33. };
  34. zone "yunjisuan.com" IN {
  35. type master;
  36. file "yunjisuan.com.zone";
  37. };
  38. include "/etc/named.rfc1912.zones";
  39. include "/etc/named.root.key";
  40. #检查配置文件是否有错
  41. [root@LDNS named]# named-checkconf /etc/named.conf
  42. #创建正向解析文件
  43. [root@LDNS named]# cd /var/named
  44. [root@LDNS named]# ls
  45. chroot data dynamic named.ca named.empty named.localhost named.loopback slaves
  46. [root@LDNS named]# cp -p named.empty yunjisuan.com.zone
  47. [root@LDNS named]# vim yunjisuan.com.zone
  48. [root@LDNS named]# cat yunjisuan.com.zone
  49. $TTL 1D
  50. @ IN SOA yunjisuan.com. root.ns1.yunjisuan.com. (
  51. 20180719 ; serial
  52. 1D ; refresh
  53. 1H ; retry
  54. 1W ; expire
  55. 3H ) ; minimum
  56. NS ns1.yunjisuan.com.
  57. ns1 A 192.168.200.147
  58. www A 192.168.200.145
  59. www2 A 192.168.200.146
  60. #测试正向解析文件是否有错
  61. [root@LDNS named]# named-checkzone yunjisuan.com yunjisuan.com.zone
  62. zone yunjisuan.com/IN: loaded serial 20180719
  63. OK
  64. #启动域名解析服务
  65. [root@LDNS named]# systemctl start named
  66. [root@LDNS named]# ss -antup | grep named
  67. udp UNCONN 0 0 192.168.200.147:53 *:* users:(("named",pid=1576,fd=512))
  68. tcp LISTEN 0 10 192.168.200.147:53 *:* users:(("named",pid=1576,fd=21))
  69. tcp LISTEN 0 128 127.0.0.1:953 *:* users:(("named",pid=1576,fd=22))
  70. tcp LISTEN 0 128 ::1:953 :::* users:(("named",pid=1576,fd=23))
  71. #将本地DNS改成自己,进行解析测试
  72. [root@LDNS named]# cat /etc/resolv.conf
  73. # Generated by NetworkManager
  74. nameserver 192.168.200.147
  75. [root@LDNS named]# nslookup www.baidu.com
  76. Server: 192.168.200.147
  77. Address: 192.168.200.147#53
  78. Non-authoritative answer:
  79. www.baidu.com canonical name = www.a.shifen.com.
  80. Name: www.a.shifen.com
  81. Address: 61.135.169.125
  82. Name: www.a.shifen.com
  83. Address: 61.135.169.121
  84. [root@LDNS named]# nslookup www.yunjisuan.com
  85. Server: 192.168.200.147
  86. Address: 192.168.200.147#53
  87. Name: www.yunjisuan.com
  88. Address: 192.168.200.145
  89. [root@LDNS named]# nslookup www2.yunjisuan.com
  90. Server: 192.168.200.147
  91. Address: 192.168.200.147#53
  92. Name: www2.yunjisuan.com
  93. Address: 192.168.200.146
 

6.3 构建Harbor主从同步

提示:如果Harbor不是已经绑定的公网域名,那么必须构建自己的本地LDNS

 
  1. #修改Harbor-master上的域名解析DNS服务器为本地构建的LDNS
  2. [root@harbor harbor]# cat /etc/resolv.conf
  3. nameserver 192.168.200.147
  4. [root@harbor harbor]# nslookup www2.yunjisuan.com
  5. Server: 192.168.200.147
  6. Address: 192.168.200.147#53
  7. Name: www2.yunjisuan.com
  8. Address: 192.168.200.146

11.png-29.1kB

12.png-22.3kB

13.png-26.6kB

14.png-23.2kB

至此,Harbor仓库主从复制已经构建完毕。 
备注:如果勾选了阻止潜在漏洞的选项会影响harbor主从复制

QQ截图20180719014504.png-45.2kB

特别提示: 
如果是harbor经历过vmware虚拟机的暂停和恢复。那么很可能之前能够访问的harbor仓库,恢复后却不行了。此时,需要重启dorker进程并重新harbor容器进程。

 
 
 
 
 
posted on 2018-07-26 19:08  热巴热吧  阅读(507)  评论(0编辑  收藏  举报