k8s:docker compose离线部署haborV2.13.1及采用外部的postgresql及redis数据库

本文介绍了在离线环境(Hygon C86 32核处理器+麒麟系统)部署Harbor 2.13.1的详细过程。主要内容包括:1)准备离线安装包并解压;2)配置harbor.yml文件(设置访问地址、HTTPS证书、管理员密码等);3)修改docker-compose.yml为关键服务添加privileged权限;4)调整docker配置添加insecure-registries并重启服务;5)最后执行docker-compose启动Harbor服务。文中特别强调了HTTPS证书配置、权限问题处理等关键步骤,为离线环境搭建企业级Docker镜像仓库提供了完整解决方案。

一、离线环境

CPU:Hygon C86 7285 32-core Processor

操作系统:麒麟操作系统

containerd:1.7.27

二、harbor概述

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。

2.1依赖组件

2.2软件环境

2.3下载离线版本

https://github.com/goharbor/harbor/releases

2.4上传服务及解压

cd /app/KubeSphere/setup

#tar -zxvf harbor-offline-installer-v2.13.1.tgz

2.5.修改harbor.yml配置

cd /app/KubeSphere/setup/harbor

cp harbor.yml.tmpl harbor.yml

采用外部的postgresql及redis数据库

hostname: 172.23.123.117

http:

port: 8082

https:

port: 8443

certificate: /usr/local/cert/server.crt

private_key: /usr/local/cert/server.key

harbor_admin_password: Harbor12345

data_volume: /app/harbor

external_database:

harbor:

host: "172.23.123.118"

port: "5432"

db_name: "registry"

username: "registry"

password: "Sinops1234~"

ssl_mode: disable

max_idle_conns: 2

max_open_conns: 0

external_redis:

host: 172.23.123.118:6379

password: Sinops1234~

tlsOptions:

enable: false

registry_db_index: 1

jobservice_db_index: 2

trivy_db_index: 5

idle_timeout_seconds: 30

注:必须保障/usr/local/cert下有两个证书,否则执行./prepare脚本时会报错。

🔹 hostname: 172.23.123.117

  • 含义:Harbor 服务的访问地址(主机名或 IP 地址)。

  • 说明 :用户通过浏览器或 Docker 客户端访问 Harbor 时使用的地址。这里配置的是 IP 地址 172.23.123.117,也可以配置为域名(如 harbor.example.com)。

  • 注意:如果配置为 IP 地址,使用 HTTPS 时可能需要额外处理证书信任问题。


🔹 http:

port: 8082

  • 含义:Harbor 的 HTTP 协议监听端口。

  • 说明 :如果不启用 HTTPS,可以通过 http://172.23.123.117:8082 访问 Harbor 的 Web 页面或 API。

  • 注意:生产环境中建议启用 HTTPS,禁用 HTTP。


🔹 https:

port: 8443

certificate: /usr/local/cert/server.crt

private_key: /usr/local/cert/server.key

  • 含义:HTTPS 配置,用于启用安全访问。

  • port :HTTPS 协议监听端口,用户可通过 https://172.23.123.117:8443 访问 Harbor。

  • certificate:SSL 证书文件路径。

  • private_key:SSL 证书对应的私钥文件路径。

  • 说明:通过 HTTPS 可以加密传输数据,提升安全性。需要确保证书有效且被客户端信任。


🔹 harbor_admin_password: Harbor12345

  • 含义 :Harbor 管理员账号(默认用户名为 admin)的初始密码。

  • 说明 :首次登录 Harbor Web 界面时使用用户名 admin 和此密码登录。建议登录后立即修改为更安全的密码。

  • 注意:该配置只在首次部署时生效,修改密码后不会自动更新此配置项。


🔹 data_volume: /app/harbor

  • 含义:Harbor 数据的持久化存储路径。

  • 说明:Harbor 所有持久化数据(如镜像、数据库、日志、配置等)将存储在此目录下。

  • 用途:通常用于 Docker 容器挂载宿主机目录,以保证数据持久化,即使容器被删除也不会丢失数据。

  • 注意:需确保该路径在宿主机上存在,并具有合适的权限。

2.5.证书详见我另外一篇博客

通过HTTPS访问Harbor2.13.1 的配置_docker-compose harbor 2.13.1 配置-CSDN博客

三、harbor概述

3.1、执行prepare脚本

用于生成安装Harbor所需的文件

./prepare

3.2、修改docker-compose.yml文件

将registry、registryctl、core、jobservice、proxy加上privileged: true,防止出现各种权限错误。

services:

log:

image: goharbor/harbor-log:v2.13.1

container_name: harbor-log

restart: always

cap_drop:

  • ALL

cap_add:

  • CHOWN

  • DAC_OVERRIDE

  • SETGID

  • SETUID

volumes:

  • /var/log/harbor/:/var/log/docker/:z

  • type: bind

source: ./common/config/log/logrotate.conf

target: /etc/logrotate.d/logrotate.conf

  • type: bind

source: ./common/config/log/rsyslog_docker.conf

target: /etc/rsyslog.d/rsyslog_docker.conf

ports:

  • 127.0.0.1:1514:10514

networks:

  • harbor

registry:

image: goharbor/registry-photon:v2.13.1

container_name: registry

restart: always

privileged: true

cap_drop:

  • ALL

cap_add:

  • CHOWN

  • SETGID

  • SETUID

volumes:

  • /app/harbor/registry:/storage:z

  • ./common/config/registry/:/etc/registry/:z

  • type: bind

source: /app/harbor/secret/registry/root.crt

target: /etc/registry/root.crt

  • type: bind

source: ./common/config/shared/trust-certificates

target: /harbor_cust_cert

networks:

  • harbor

depends_on:

  • log

logging:

driver: "syslog"

options:

syslog-address: "tcp://localhost:1514"

tag: "registry"

registryctl:

image: goharbor/harbor-registryctl:v2.13.1

container_name: registryctl

env_file:

  • ./common/config/registryctl/env

restart: always

privileged: true

cap_drop:

  • ALL

cap_add:

  • CHOWN

  • SETGID

  • SETUID

volumes:

  • /app/harbor/registry:/storage:z

  • ./common/config/registry/:/etc/registry/:z

  • type: bind

source: ./common/config/registryctl/config.yml

target: /etc/registryctl/config.yml

  • type: bind

source: ./common/config/shared/trust-certificates

target: /harbor_cust_cert

networks:

  • harbor

depends_on:

  • log

logging:

driver: "syslog"

options:

syslog-address: "tcp://localhost:1514"

tag: "registryctl"

core:

image: goharbor/harbor-core:v2.13.1

container_name: harbor-core

env_file:

  • ./common/config/core/env

restart: always

privileged: true

cap_drop:

  • ALL

cap_add:

  • SETGID

  • SETUID

volumes:

  • /app/harbor/ca_download/:/etc/core/ca/:z

  • /app/harbor/:/data/:z

  • ./common/config/core/certificates/:/etc/core/certificates/:z

  • type: bind

source: ./common/config/core/app.conf

target: /etc/core/app.conf

  • type: bind

source: /app/harbor/secret/core/private_key.pem

target: /etc/core/private_key.pem

  • type: bind

source: /app/harbor/secret/keys/secretkey

target: /etc/core/key

  • type: bind

source: ./common/config/shared/trust-certificates

target: /harbor_cust_cert

networks:

harbor:

depends_on:

  • log

  • registry

logging:

driver: "syslog"

options:

syslog-address: "tcp://localhost:1514"

tag: "core"

portal:

image: goharbor/harbor-portal:v2.13.1

container_name: harbor-portal

restart: always

cap_drop:

  • ALL

cap_add:

  • CHOWN

  • SETGID

  • SETUID

  • NET_BIND_SERVICE

volumes:

  • type: bind

source: ./common/config/portal/nginx.conf

target: /etc/nginx/nginx.conf

networks:

  • harbor

depends_on:

  • log

logging:

driver: "syslog"

options:

syslog-address: "tcp://localhost:1514"

tag: "portal"

jobservice:

image: goharbor/harbor-jobservice:v2.13.1

container_name: harbor-jobservice

env_file:

  • ./common/config/jobservice/env

restart: always

privileged: true

cap_drop:

  • ALL

cap_add:

  • CHOWN

  • SETGID

  • SETUID

volumes:

  • /app/harbor/job_logs:/var/log/jobs:z

  • type: bind

source: ./common/config/jobservice/config.yml

target: /etc/jobservice/config.yml

  • type: bind

source: ./common/config/shared/trust-certificates

target: /harbor_cust_cert

networks:

  • harbor

depends_on:

  • core

logging:

driver: "syslog"

options:

syslog-address: "tcp://localhost:1514"

tag: "jobservice"

proxy:

image: goharbor/nginx-photon:v2.13.1

container_name: harbor-nginx

restart: always

privileged: true

cap_drop:

  • ALL

cap_add:

  • CHOWN

  • SETGID

  • SETUID

  • NET_BIND_SERVICE

volumes:

  • ./common/config/nginx:/etc/nginx:z

  • /app/harbor/secret/cert:/etc/cert:z

  • type: bind

source: ./common/config/shared/trust-certificates

target: /harbor_cust_cert

networks:

  • harbor

ports:

  • 8082:8080

  • 8443:8443

depends_on:

  • registry

  • core

  • portal

  • log

logging:

driver: "syslog"

options:

syslog-address: "tcp://localhost:1514"

tag: "proxy"

networks:

harbor:

external: false

3.3、修改docker配置文件

// 1、打开daemon.json

vi /etc/docker/daemon.json

{

"insecure-registries": ["172.23.123.117", "172.23.123.117:8443"],

"selinux-enabled": false,

"iptables": true

}

其中主机ip"172.23.123.117"是安装harbor的主机ip,而端口"8443"是harbor.yml中设置的https.port值。

// 2、应用docker配置,并重启docker

systemctl daemon-reload

systemctl restart docker

3.4、安装harbor

**#**cd /app/KubeSphere/setup/harbor

docker compose up -d

相关推荐
2501_939909054 小时前
k8s基础与安装部署
云原生·容器·kubernetes
谷隐凡二5 小时前
Kubernetes Route控制器简单介绍
java·容器·kubernetes
李少兄9 小时前
Kubernetes 日志管理
docker·容器·kubernetes
秋饼9 小时前
【K8S测试程序--git地址】
git·容器·kubernetes
oMcLin10 小时前
如何在RHEL 9上配置并优化Kubernetes 1.23高可用集群,提升大规模容器化应用的自动化部署与管理?
kubernetes·自动化·php
ghostwritten10 小时前
Kubernetes 网络模式深入解析?
网络·容器·kubernetes
原神启动110 小时前
K8S(七)—— Kubernetes Pod 基础概念与实战配置
云原生·容器·kubernetes
不想画图11 小时前
Kubernetes(五)——rancher部署和Pod详解
linux·kubernetes·rancher
大都督老师11 小时前
配置 containerd 使用镜像加速器拉取 Docker Hub 镜像
容器·kubernetes·k8s
木童6621 天前
Kubernetes 操作管理完全指南:从陈述式到声明式,覆盖全生命周期
云原生·容器·kubernetes