ToB企服应用市场:ToB评测及商务社交产业平台

标题: Harbor镜像堆栈(v2.10.3)附相干自界说设置 [打印本页]

作者: 水军大提督    时间: 2024-8-5 07:06
标题: Harbor镜像堆栈(v2.10.3)附相干自界说设置
目录
 一. 环境准备 
二. 部署安装
三. 修改网段的方法
四. 设置开机与伴随docker启动
五. 基础使用
1. 创建一个用户
2. docker登任命户
3. 创建项目
4. 推送镜像
六. 自制证书设置HTTPS


 一. 环境准备 


Harbor 是一个开源的企业级 Docker 镜像堆栈,提供了很多功能,包罗用户管理、访问控制、镜像复制和安全扫描。
官方文档部署手册:Harbor docs | Harbor Installation Prerequisites
下载地址:Releases · goharbor/harbor (github.com) 
官方给出的最低设置和保举设置如下图:

本文使用假造机设置:
主机名IP体系软件版本设置信息
harbor192.168.226.28Rocky_linux9.4 Docker version 27.1.1
Docker Compose version v2.29.1
2核4G,磁盘48G
Harbor:v2.10.3
  1. 可以从官方发布页面下载 Harbor 安装程序。下载在线安装程序或离线安装程序。
  2. 在线安装程序:在线安装程序从 Docker 中心下载 Harbor 镜像。因此,安装程序的尺寸非常小。
  3. 离线安装程序:如果要部署 Harbor 的主机没有连接到 Internet,请使用离线安装程序。离线安装程序包含预先构建的映像,因此它比在线安装程序大
  4. 在线和离线安装程序的安装过程几乎相同。
  5. 这里我主要使用离线安装,因为在线安装因为墙、内部网络等原因,很多时候会下载很慢,而离线安装包都包含了预先构建的镜像,所以直接现在离线安装包最好!
复制代码


二. 部署安装


上传至假造机,这里我已经上传好了。
  1. [root@harbor ~]# ll
  2. total 637052
  3. -rw-------. 1 root root       815 Jun  6 14:00 anaconda-ks.cfg
  4. -rw-r--r--  1 root root 652334970 Aug  1 00:15 harbor-offline-installer-v2.10.3.tgz
复制代码
解压
  1. [root@harbor ~]# tar -xf harbor-offline-installer-v2.10.3.tgz
  2. [root@harbor ~]# ll
  3. total 637052
  4. -rw-------. 1 root root       815 Jun  6 14:00 anaconda-ks.cfg
  5. drwxr-xr-x  2 root root       123 Aug  1 00:45 harbor
  6. -rw-r--r--  1 root root 652334970 Aug  1 00:15 harbor-offline-installer-v2.10.3.tgz
  7. [root@harbor ~]# ll harbor
  8. total 641820
  9. -rw-r--r-- 1 root root     11347 Jul  2 15:42 LICENSE
  10. -rw-r--r-- 1 root root      3643 Jul  2 15:42 common.sh
  11. -rw-r--r-- 1 root root 657181693 Jul  2 15:42 harbor.v2.10.3.tar.gz
  12. -rw-r--r-- 1 root root     13972 Jul  2 15:42 harbor.yml.tmpl
  13. -rwxr-xr-x 1 root root      1975 Jul  2 15:42 install.sh
  14. -rwxr-xr-x 1 root root      1882 Jul  2 15:42 prepare
复制代码
这是离线安装包,其中在解压后的harbor目录中harbor.v2.10.3.tar.gz是打包好的所需镜像压缩包
最重要的是 harbor.yml.tmpl和 install.sh ,他们分别是设置文件和安装执行文件。 
以.tmpl末端的文件多为模板文件,将harbor.yml.tmpl拷贝一份并命名为harbor.yml去掉.tmpl
  1. [root@harbor ~]# cd harbor
  2. [root@harbor harbor]# cp harbor.yml.tmpl harbor.yml
  3. [root@harbor harbor]# ll
  4. total 641836
  5. -rw-r--r-- 1 root root     11347 Jul  2 15:42 LICENSE
  6. -rw-r--r-- 1 root root      3643 Jul  2 15:42 common.sh
  7. -rw-r--r-- 1 root root 657181693 Jul  2 15:42 harbor.v2.10.3.tar.gz
  8. -rw-r--r-- 1 root root     13972 Aug  1 00:58 harbor.yml
  9. -rw-r--r-- 1 root root     13972 Jul  2 15:42 harbor.yml.tmpl
  10. -rwxr-xr-x 1 root root      1975 Jul  2 15:42 install.sh
  11. -rwxr-xr-x 1 root root      1882 Jul  2 15:42 prepare
复制代码

简化后的 harbor.yml 文件模板:
  1. hostname: reg.mydomain.com
  2. http:
  3.   port: 80
  4. https:
  5.   port: 443
  6.   certificate: /your/certificate/path
  7.   private_key: /your/private/key/path
  8. harbor_admin_password: Harbor12345
  9. database:
  10.   password: root123
  11.   max_idle_conns: 100
  12.   max_open_conns: 900
  13.   conn_max_lifetime: 5m
  14.   conn_max_idle_time: 0
  15. data_volume: /data
  16. trivy:
  17.   ignore_unfixed: false
  18.   skip_update: false
  19.   skip_java_db_update: false
  20.   offline_scan: false
  21.   security_check: vuln
  22.   insecure: false
  23. jobservice:
  24.   max_job_workers: 10
  25.   job_loggers:
  26.     - STD_OUTPUT
  27.     - FILE
  28.   logger_sweeper_duration: 1 #days
  29. notification:
  30.   webhook_job_max_retry: 3
  31.   webhook_job_http_client_timeout: 3 #seconds
  32. log:
  33.   level: info
  34.   local:
  35.     rotate_count: 50
  36.     rotate_size: 200M
  37.     location: /var/log/harbor
  38. _version: 2.10.0
  39. proxy:
  40.   http_proxy:
  41.   https_proxy:
  42.   no_proxy:
  43.   components:
  44.     - core
  45.     - jobservice
  46.     - trivy
  47. upload_purging:
  48.   enabled: true
  49.   age: 168h
  50.   interval: 24h
  51.   dryrun: false
  52. cache:
  53.   enabled: false
  54.   expire_hours: 24
复制代码
如今我根据需要对该文件进行设定修改,hostname参数直接使用IP;这里因为https用不到,为避免学习麻烦先注释,有需要再加,修改见图:

然后继续用命令执行安装
  1. [root@harbor harbor]# ./install.sh
复制代码
 

看到图中箭头所指的successfully就部署乐成了。 
浏览器访问IP即可,比方我这里就访问http://192.168.226.28/
如果设置文件中自己没有修改,默认用户名:admin   默认密码:Harbor12345  


三. 修改网段的方法


在使用中,如果需要自界说网段,可进行如下步骤。
在运行安装步骤时,会自动的新文件表明

其中docker-compose.yml它是一个关键的设置文件,它用于界说构成 Harbor 平台的服务及其容器设置。
  1. [root@harbor harbor]# ll
  2. total 641832
  3. -rw-r--r-- 1 root root     11347 Jul  2 15:42 LICENSE
  4. drwxr-xr-x 3 root root        20 Aug  1 03:02 common
  5. -rw-r--r-- 1 root root      3643 Jul  2 15:42 common.sh
  6. -rw-r--r-- 1 root root      5843 Aug  1 03:02 docker-compose.yml
  7. -rw-r--r-- 1 root root 657181693 Jul  2 15:42 harbor.v2.10.3.tar.gz
  8. -rw-r--r-- 1 root root      1003 Aug  1 03:01 harbor.yml
  9. -rw-r--r-- 1 root root     13972 Jul  2 15:42 harbor.yml.tmpl
  10. -rwxr-xr-x 1 root root      1975 Jul  2 15:42 install.sh
  11. -rwxr-xr-x 1 root root      1882 Jul  2 15:42 prepare
复制代码
关闭harbor
  1. [root@harbor harbor]# docker compose down
复制代码
 注:如果没有删除的话 需要使用 docker network rm harbor_harbor 的方式删除
然后查看下网络确保已经删除harbor
  1. [root@harbor harbor]# docker network ls
  2. NETWORK ID     NAME      DRIVER    SCOPE
  3. 6cb7a2d44eb7   bridge    bridge    local
  4. 5ef4b87494b0   host      host      local
  5. 1855e2156e9b   none      null      local
复制代码
 创建网络,并根据需要自界说网段
  1. [root@harbor harbor]# docker network create --driver=bridge --subnet=10.110.0.0/16 harbor
复制代码
查抄
  1. [root@harbor harbor]# docker network ls && docker network inspect harbor
  2. NETWORK ID     NAME      DRIVER    SCOPE
  3. 6cb7a2d44eb7   bridge    bridge    local
  4. d009323768e3   harbor    bridge    local
  5. 5ef4b87494b0   host      host      local
  6. 1855e2156e9b   none      null      local
  7. [
  8.     {
  9.         "Name": "harbor",
  10.         "Id": "d009323768e31e0565d46324d629e408793f1577f919588819eadf09f2ab3629",
  11.         "Created": "2024-08-01T02:39:55.477662508+08:00",
  12.         "Scope": "local",
  13.         "Driver": "bridge",
  14.         "EnableIPv6": false,
  15.         "IPAM": {
  16.             "Driver": "default",
  17.             "Options": {},
  18.             "Config": [
  19.                 {
  20.                     "Subnet": "10.110.0.0/16"
  21.                 }
  22.             ]
  23.         },
  24.         "Internal": false,
  25.         "Attachable": false,
  26.         "Ingress": false,
  27.         "ConfigFrom": {
  28.             "Network": ""
  29.         },
  30.         "ConfigOnly": false,
  31.         "Containers": {},
  32.         "Options": {},
  33.         "Labels": {}
  34.     }
  35. ]
复制代码
接下来修改 /root/harbor/docker-compose.yml 这个设置文件
  1. [root@harbor harbor]# vim docker-compose.yml
  2. #将最后面的 是否使用外部网络设置为true
  3. networks:
  4.   harbor:
  5.     external: true
复制代码
 重新运行docker-compose.yml文件
  1. [root@harbor harbor]# docker compose up -d --force-recreate
  2. #该命令若不在docker-compose.yml需指定位置docker compose -f /root/harbor/docker-compose.yml up -d --force-recreate
复制代码
重新验证查看
  1. [root@harbor harbor]# docker network ls && docker network inspect harbor
复制代码
 


四. 设置开机与伴随docker启动


Docker compose 不会伴随docker的启动而启动,需要进行一下设置
执行下述代码即可,如果你的docker-compose.yml目录位置和我不一样,你需要对下面这段代码路径进行自主修改。
  1. cat >/usr/lib/systemd/system/harbor.service <<EOF
  2. [Unit]
  3. Description=Harbor service with docker-compose
  4. Requires=docker.service
  5. After=docker.service
  6. [Service]
  7. Restart=always
  8. RemainAfterExit=yes
  9. StandardError=null
  10. StandardOutput=null
  11. WorkingDirectory=/root/harbor
  12. ExecStartPre=/usr/bin/docker compose -f /root/harbor/docker-compose.yml down
  13. ExecStart=/usr/bin/docker compose -f /root/harbor/docker-compose.yml up -d
  14. ExecStop=/usr/bin/docker compose -f /root/harbor/docker-compose.yml down
  15. [Install]
  16. WantedBy=multi-user.target
  17. EOF
复制代码
重新加载 systemd 的设置并设置自启动。
  1. systemctl daemon-reload && systemctl enable harbor.service
复制代码
如今可以重启docker测试harbor会不会正常运行了。
  1. [root@harbor ~]# systemctl restart docker
复制代码
需等候一会验证,下面这样就是ok了。
  1. [root@harbor ~]# docker ps
  2. CONTAINER ID   IMAGE                                 COMMAND                  CREATED             STATUS                             PORTS                                   NAMES
  3. 976d1adf7aba   goharbor/nginx-photon:v2.10.3         "nginx -g 'daemon of…"   About an hour ago   Up 25 seconds (health: starting)   0.0.0.0:80->8080/tcp, :::80->8080/tcp   nginx
  4. 666d1cbe5ec3   goharbor/harbor-jobservice:v2.10.3    "/harbor/entrypoint.…"   About an hour ago   Up 22 seconds (health: starting)                                           harbor-jobservice
  5. 41b46a091552   goharbor/harbor-core:v2.10.3          "/harbor/entrypoint.…"   About an hour ago   Up 25 seconds (health: starting)                                           harbor-core
  6. 04a9798038d4   goharbor/registry-photon:v2.10.3      "/home/harbor/entryp…"   About an hour ago   Up 25 seconds (health: starting)                                           registry
  7. fc68ec53a081   goharbor/harbor-registryctl:v2.10.3   "/home/harbor/start.…"   About an hour ago   Up 24 seconds (health: starting)                                           registryctl
  8. 6b7cfd18ee75   goharbor/harbor-db:v2.10.3            "/docker-entrypoint.…"   About an hour ago   Up 24 seconds (health: starting)                                           harbor-db
  9. dbde85a2eacc   goharbor/redis-photon:v2.10.3         "redis-server /etc/r…"   About an hour ago   Up 25 seconds (health: starting)                                           redis
  10. 0856838ace4d   goharbor/harbor-portal:v2.10.3        "nginx -g 'daemon of…"   About an hour ago   Up 25 seconds (health: starting)                                           harbor-portal
  11. 8bbb45f72629   goharbor/harbor-log:v2.10.3           "/bin/sh -c /usr/loc…"   About an hour ago   Up 25 seconds (health: starting)   127.0.0.1:1514->10514/tcp               harbor-log
复制代码

五. 基础使用

1. 创建一个用户


2. docker登任命户

直接在docker登岸是须要用443端口的https,那么如果我们想用80端口的http,需要额外设置
  1. [root@harbor ~]# vim /etc/docker/daemon.json
  2. {
  3.   "registry-mirrors": [
  4.     "https://do.nark.eu.org",
  5.     "https://dc.j8.work",
  6.     "https://pilvpemn.mirror.aliyuncs.com",
  7.     "https://docker.m.daocloud.io",
  8.     "https://dockerproxy.com",
  9.     "https://docker.mirrors.ustc.edu.cn",
  10.     "https://docker.nju.edu.cn"
  11.   ],
  12.   "exec-opts": ["native.cgroupdriver=systemd"],
  13.   "log-driver": "json-file",
  14.   "log-opts": {
  15.     "max-size": "100m"
  16.   },
  17.   "storage-driver": "overlay2",
  18.   "insecure-registries": ["192.168.226.28"]
  19. }
复制代码
重启docker
  1. # 前面配置systemd 的管理harbor,配置了对docker启动而启动,因此重启docker,harbor也会重启。
  2. [root@harbor ~]# systemctl restart docker
复制代码
登录
  1. [root@harbor ~]# docker login 192.168.226.28
复制代码

查看登录信息
  1. [root@harbor ~]# cat .docker/config.json
复制代码
3. 创建项目


给这个项目添加使用用户


4. 推送镜像

  1. [root@harbor ~]# docker images
  2. REPOSITORY                      TAG       IMAGE ID       CREATED       SIZE
  3. goharbor/harbor-exporter        v2.10.3   7aa694114453   4 weeks ago   107MB
  4. goharbor/redis-photon           v2.10.3   359683ebd59c   4 weeks ago   165MB
  5. goharbor/trivy-adapter-photon   v2.10.3   6d51017555d9   4 weeks ago   516MB
  6. goharbor/harbor-registryctl     v2.10.3   96efb27ac641   4 weeks ago   152MB
  7. goharbor/registry-photon        v2.10.3   f73ad548d874   4 weeks ago   84.7MB
  8. goharbor/nginx-photon           v2.10.3   0ae16f53f286   4 weeks ago   154MB
  9. goharbor/harbor-log             v2.10.3   9ee81cca16ce   4 weeks ago   163MB
  10. goharbor/harbor-jobservice      v2.10.3   053df0842d37   4 weeks ago   143MB
  11. goharbor/harbor-core            v2.10.3   ed909856be82   4 weeks ago   171MB
  12. goharbor/harbor-portal          v2.10.3   c8c29cea2ef3   4 weeks ago   162MB
  13. goharbor/harbor-db              v2.10.3   c623b46fd89d   4 weeks ago   269MB
  14. goharbor/prepare                v2.10.3   292e199c8873   4 weeks ago   210MB
  15. [root@harbor ~]# docker tag goharbor/harbor-db:v2.10.3 192.168.226.28/namespace/ceshi:1.0
  16. [root@harbor ~]# docker push 192.168.226.28/namespace/ceshi:1.0
复制代码


六. 自制证书设置HTTPS


删除上面在docker设置的   "insecure-registries": ["http://192.168.226.28"]
  1. [root@harbor harbor]# vim /etc/docker/daemon.json
  2. #删除这行  "insecure-registries": ["http://192.168.226.28"]
复制代码
 删除后见下图样式


创建脚本文件
  1. [root@harbor ~]# cd harbor
  2. [root@harbor harbor]# vim generate_cert.sh
  3. #!/bin/bash
  4. # **********************************************************
  5. # * 文件名     : generate_cert.sh
  6. # * 作者        : zzdict
  7. # * 邮箱         : zzdict@gmail.com / elk_deer@foxmail.com
  8. # * 创建时间   : 2024-08-23 01:14
  9. # * 描述         : 制作证书脚本
  10. # **********************************************************
  11. # 使用该脚本生成自签名证书
  12. # 使用方法: ./generate_cert.sh <域名> <证书有效天数> <输出目录>
  13. # 示例: ./generate_cert.sh example.com 365 ./certs
  14. # 检查是否提供了所有参数
  15. if [ "$#" -ne 3 ]; then
  16.     echo "用法: $0 <域名> <证书有效天数> <输出目录>"
  17.     exit 1
  18. fi
  19. # 获取命令行参数
  20. DOMAIN=$1
  21. DAYS_VALID=$2
  22. OUTPUT_DIR=$3
  23. # 创建输出目录(如果不存在)
  24. mkdir -p $OUTPUT_DIR
  25. # 定义文件名
  26. PRIVATE_KEY_FILE="$OUTPUT_DIR/$DOMAIN.key"
  27. CERTIFICATE_FILE="$OUTPUT_DIR/$DOMAIN.crt"
  28. CSR_FILE="$OUTPUT_DIR/$DOMAIN.csr"
  29. CONFIG_FILE="$OUTPUT_DIR/openssl.cnf"
  30. # 生成私钥
  31. echo "生成私钥..."
  32. openssl genrsa -out $PRIVATE_KEY_FILE 2048
  33. # 生成 OpenSSL 配置文件,包含 SAN
  34. echo "生成 OpenSSL 配置文件..."
  35. cat > $CONFIG_FILE <<EOF
  36. [ req ]
  37. default_bits       = 2048
  38. default_keyfile    = privkey.pem
  39. distinguished_name = req_distinguished_name
  40. req_extensions     = req_ext
  41. x509_extensions    = v3_ca
  42. [ req_distinguished_name ]
  43. countryName                 = 国家代码 (2 个字母)
  44. stateOrProvinceName         = 省份名称 (完整拼写)
  45. localityName                = 城市名称 (如,城市)
  46. organizationName            = 组织名称 (如,公司)
  47. organizationalUnitName      = 组织单位名称 (如,部门)
  48. commonName                  = 通用名称 (如,完全限定域名)
  49. emailAddress                = 邮件地址
  50. countryName_default         = CN
  51. stateOrProvinceName_default = State
  52. localityName_default        = City
  53. organizationName_default    = Organization
  54. organizationalUnitName_default = OrgUnit
  55. commonName_default          = $DOMAIN
  56. emailAddress_default        = email@example.com
  57. [ req_ext ]
  58. subjectAltName = @alt_names
  59. [ v3_ca ]
  60. subjectAltName = @alt_names
  61. [ alt_names ]
  62. DNS.1 = $DOMAIN
  63. EOF
  64. # 生成证书签名请求(CSR)
  65. echo "生成证书签名请求..."
  66. openssl req -new -key $PRIVATE_KEY_FILE -out $CSR_FILE -config $CONFIG_FILE -subj "/C=CN/ST=State/L=City/O=Organization/OU=OrgUnit/CN=$DOMAIN/emailAddress=email@example.com"
  67. # 生成自签名证书
  68. echo "生成自签名证书..."
  69. openssl x509 -req -days $DAYS_VALID -in $CSR_FILE -signkey $PRIVATE_KEY_FILE -out $CERTIFICATE_FILE -extensions v3_ca -extfile $CONFIG_FILE
  70. # 输出结果
  71. echo "证书生成完毕:"
  72. echo "私钥: $PRIVATE_KEY_FILE"
  73. echo "证书: $CERTIFICATE_FILE"
  74. echo "证书签名请求: $CSR_FILE"
  75. # 删除临时的 OpenSSL 配置文件
  76. rm -f $CONFIG_FILE
复制代码
执行脚本
  1. [root@harbor harbor]# sh generate_cert.sh mataki4.org 365 ./certs
复制代码
此命令将在 ./certs 目录中生成以下文件:


编辑Harbor设置https
  1. [root@harbor harbor]# vim harbor.yml
  2. https:
  3.   port: 443
  4.   certificate: /root/harbor/certs/mataki4.org.crt
  5.   private_key: /root/harbor/certs/mataki4.org.key
复制代码

初始化设置
  1. [root@harbor harbor]# ./prepare
复制代码
设置本地域名解析 
  1. [root@harbor harbor]# vim /etc/hosts
  2. # 加入下述配置ip 域名
  3. 192.168.226.28 mataki4.org
复制代码
重启docker,因为前面设置了harbor启动方式,重启docker,harbor也会重启。
  1. [root@harbor harbor]# systemctl daemon-reload
  2. [root@harbor harbor]# systemctl restart docker
复制代码
windows设置域名解析,在C:\Windows\System32\drivers\etc\hosts
需要使用记事本的管理员模式打开编辑或者Notepad++编辑也可

使用域名访问mataki4.org  
见图可以看到,新访问的链接上有了https协议

 
由于是自制的证书,会有这种不安全提示,如果不喜欢可进行下述设置办理。
  1. [root@harbor harbor]# cd certs/
  2. [root@harbor certs]# ll
  3. total 12
  4. -rw-r--r-- 1 root root  997 Aug  3 01:12 mataki4.org.crt
  5. -rw-r--r-- 1 root root  895 Aug  3 01:12 mataki4.org.csr
  6. -rw------- 1 root root 1704 Aug  3 01:12 mataki4.org.key
复制代码
 需要将mataki4.org.crt自签名证书文件导入到浏览器中,先从服务器下载到桌面,然后打开浏览器设置证书导入。

到这就乐成了。
重新刷新网页查看


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4