网站首页 > 技术文章 正文
Harbor 是一个开源的容器镜像仓库管理工具,用于存储、签名和扫描容器镜像。
Harbor 是 CNCF 毕业项目,具有合规性、性能和互操作性,可帮助工程师在 Kubernetes 和 Docker 等云原生计算平台上一致、安全地管理容器镜像文件。
Harbor 提供了比标准 Docker Registry 更丰富的功能,特别是在安全性、访问控制和镜像复制方面。
GitHub地址:https://github.com/goharbor/harbor
DockerHub地址:https://hub.docker.com/r/bitnami/harbor-core
官网链接:https://goharbor.io/
主要功能
- 镜像存储与管理:Harbor 允许用户存储和管理 Docker 镜像和 Helm chart,支持将镜像和 chart 分组到不同的项目中,每个项目都可以有独立的权限管理。
- 安全与漏洞扫描:Harbor 集成了静态分析工具,如 Clair 或 Trivy,可以自动扫描镜像中的已知漏洞。用户可以配置策略以防止包含严重漏洞的镜像被拉取或运行。
- 角色基础的访问控制:提供细粒度的访问控制,用户可以为每个项目设定不同的角色和权限,如项目管理员、开发者或访客。
- 镜像复制:支持跨多个 Harbor 实例的镜像复制,便于在不同的环境或地理位置之间同步镜像,实现数据灾备和负载均衡。
- 高可用性和可伸缩性:Harbor 支持高可用部署模式,可以在多个服务器节点上运行以保证服务的稳定性。通过与 Kubernetes 和 Docker Swarm 等容器编排工具的集成,支持大规模的镜像服务。
- 多租户支持:Harbor 允许多个团队共享同一个实例,每个团队可以操作自己的独立仓库空间,实现资源隔离。
核心特性
- 云原生兼容性:
容器和 Helm 图表管理:Harbor 不仅支持 Docker 容器镜像,还支持 Helm 图表,这使得在统一的平台上管理这两种资源成为可能。这在广泛使用 Helm 部署复杂应用的 Kubernetes 环境中尤其有用。
- 基于角色的访问控制(RBAC):
基于项目的管理:用户可以通过项目在 Harbor 中管理和访问仓库,每个项目下的镜像或 Helm 图表可以有不同的权限,增强了安全性和操作的粒度。
- 基于策略的镜像复制:
跨仓库同步:Harbor 允许根据定义的策略在多个镜像仓库实例之间复制镜像和图表,策略可以包括仓库、标签和标签的过滤器。这一功能可以用来辅助负载均衡,实现高可用性,并促进混合云和多云场景下多数据中心的部署。
- 漏洞扫描:
定期扫描和策略检查:Harbor 定期扫描镜像以检测已知漏洞,并通过策略检查阻止部署存在漏洞的镜像。
- LDAP/AD 支持:
用户认证与管理:Harbor 与现有企业的 LDAP/AD 进行集成,用于用户认证和管理,并支持将 LDAP 组导入 Harbor,然后可以为特定项目授权。
- OIDC 支持:
身份验证和单点登录:Harbor 利用 OpenID Connect (OIDC) 验证由外部授权服务器或身份提供者认证的用户身份。可以启用单点登录以登录 Harbor 门户。
- 图像删除与垃圾回收:
定期清理:系统管理员可以运行垃圾收集作业,定期删除镜像(悬空的清单和未引用的 blobs),释放空间。
- Notary 支持:
镜像签名:支持使用 Docker Content Trust(利用 Notary)对容器镜像进行签名,以保证其真实性和来源。此外,还可以激活防止部署未签名镜像的策略。
- 图形用户门户:
易于浏览和管理:用户可以轻松浏览、搜索仓库并管理项目。
- 审计:
操作跟踪:通过日志跟踪对仓库的所有操作。
- RESTful API:
便于集成:提供 RESTful API 以便于执行管理操作,易于与外部系统集成。内嵌 Swagger UI 可用于探索和测试 API。
- 简易部署:
Docker compose 和 Helm Chart:Harbor 可通过 Docker compose 或 Helm Chart 部署,最近还添加了 Harbor Operator。
使用场景
- 企业级容器管理:适用于需要严格安全和合规要求的企业环境,可以管理和分发容器镜像。
- CI/CD 流水线:在持续集成和持续部署的环境中作为镜像仓库使用,支持自动化的镜像构建、测试和部署。
- 多云和跨地区部署:通过镜像复制功能,支持跨云和跨数据中心的容器部署,增强业务的灾备能力。
部署和访问
//安装docker-compose:
[root@k8s-master01 harbor]# wget https://github.com/docker/compose/releases/download/v2.19.1/docker-compose-linux-x86_64 ##下载Amd64架构安装包
[root@k8s-master01 harbor]# cp docker-compose-linux-aarch64 /usr/local/bin/docker-compose ##拷贝到/usr/local/bin下并重命名为docker-compose
[root@k8s-master01 harbor]# chmod +x /usr/local/bin/docker-compose ##赋予可执行权限
[root@k8s-master01 harbor]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose ##新建软链
[root@k8s-master01 harbor]# docker-compose version ##安装完成后,查看版本
//安装harbor:
[root@k8s-master01 harbor]# mkdir -p /data/harbor /var/log/harbor ##新建目录
[root@k8s-master01 harbor]# wget -P /opt/ https://github.com/goharbor/harbor/releases/download/v2.8.2/harbor-offline-installer-v2.8.2.tgz ##将下载文件放到/opt/目录下
[root@k8s-master01 harbor]# tar -zxvf /opt/harbor-offline-installer-v2.8.2.tgz ##解压完成后,会生成一个harbor目录,也就是harbor的工作目录
[root@k8s-master01 harbor]# cd /opt/harbor
[root@k8s-master01 harbor]# docker load -i harbor.v2.8.2.tar.gz
[root@k8s-master01 harbor]# cp harbor.yml.tmpl harbor.yml ##改文件名为.yml格式
//按需修改harbor.yaml相关参数:
[root@k8s-master01 harbor]# vim opt/harbor/harbor.yml ##主要参数有hostname、http(s)、port、证书/私钥存放路径、数据存放路径、WebUI登陆所需的账户名/密码等:
# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: harbor.cisco.com或192.168.146.133
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
# https related config
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /data/cert/server.crt
private_key: /data/cert/server.key
# # Uncomment following will enable tls communication between all harbor components
# The initial password of Harbor admin
# It only works in first time to install harbor
# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: Harbor12345
# Harbor DB configuration
database:
# The password for the root user of Harbor DB. Change this before any production use.
password: root123
# The default data volume
data_volume: /data/harbor
# Log configurations
log:
# options are debug, info, warning, error, fatal
level: info
# configs for logs in local storage
local:
# Log files are rotated log_rotate_count times before being removed. If count is 0, old versions are removed rather than rotated.
rotate_count: 50
# Log files are rotated only if they grow bigger than log_rotate_size bytes. If size is followed by k, the size is assumed to be in kilobytes.
# If the M is used, the size is in megabytes, and if G is used, the size is in gigabytes. So size 100, size 100k, size 100M and size 100G
# are all valid.
rotate_size: 200M
# The directory on your host that store log
location: /var/log/harbor
[root@k8s-master01 harbor]# ./prepare ##Harbor将nginx实例用作所有服务的反向代理。您可以使用prepare脚本来配置nginx为使用https
[root@k8s-master01 harbor]# sh /root/harbor/install.sh ##初始化服务后,访问http://192.168.146.133:5000(默认密码:admin/Harbor12345)
采用https方式还需要生成相关证书:
[root@k8s-master01 harbor]# mkdir -p /data/cert /etc/docker/certs.d/harbor.cisco.com 或
mkdir -p /data/cert /etc/docker/certs.d/192.168.146.133:5000 或
mkdir -p /data/cert /etc/docker/certs.d/harbor.cisco.com:5000 ##把默认的nginx端口443映射到一个不同的端口
[root@k8s-master01 harbor]# cd /etc/docker/certs.d/harbor.cisco.com 或
cd /etc/docker/certs.d/192.168.146.133:5000 或
cd /etc/docker/certs.d/harbor.cisco.com:5000
[root@k8s-master01 harbor.cisco.com]# openssl genrsa -out ca.key 4096 ##生成ca证书私钥
[root@k8s-master01 harbor.cisco.com]# openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.cisco.com" -key ca.key -out ca.crt ##生成ca证书
[root@k8s-master01 harbor.cisco.com]# openssl genrsa -out server.key 4096 ##生成harbor服务器证书私钥
[root@k8s-master01 harbor.cisco.com]# openssl req -sha512 -new -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.cisco.com" -key server.key -out server.csr ##生成harbor服务器证书签发请求文件
[root@k8s-master01 harbor.cisco.com]# vim v3.ext ##新创建v3.ext文件,用于协助签发harbor服务器证书
//域名方式访问:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=harbor.cisco.com
DNS.2=harbor.cisco
DNS.3=cisco
//IP方式访问:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:192.168.1.18
[root@k8s-master01 harbor.cisco.com]# openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt ##生成harbor服务器证书
[root@k8s-master01 harbor.cisco.com]# cp server.crt server.key /data/cert/ ##把server.crt和server.key拷贝到/data/cert/,供harbor.yml指定证书路径使用
[root@k8s-master01 harbor.cisco.com]# openssl x509 -inform PEM -in server.crt -out server.cert ##把.crt转换为.cert供doker的配置文件daemon.json使用
[root@k8s-master01 harbor.cisco.com]# cp server.cert server.key ca.crt /etc/docker/certs.d/harbor.cisco.com ##把这三个文件拷贝到docker的证书目录下
/etc/docker/certs.d/
└── harbor.cisco.com
├── server.cert <-- Server certificate signed by CA
├── server.key <-- Server key signed by CA
├── server.crt <-- Server certificate signed by CA
└── ca.crt <-- Certificate authority that signed the registry certificate
[root@k8s-master01 harbor]# ./prepare #Harbor将nginx实例用作所有服务的反向代理。您可以使用prepare脚本来配置nginx为使用https
[root@k8s-master01 harbor]# sh /root/harbor/install.sh #初始化服务后,访问https://192.168.146.133:5000(默认密码:admin/Harbor12345)
//添加harbor开机自启动服务,需要新建harbor.service服务:
[root@k8s-master01 harbor]# vim /etc/systemd/system/harbor.service
[Unit]
Description=Harbor Container Registry
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/docker-compose -f /opt/harbor/docker-compose.yml up
ExecStop=/usr/bin/docker-compose -f /opt/harbor/docker-compose.yml down
WorkingDirectory=/opt/harbor
Restart=always
[Install]
WantedBy=default.target
//采用http方式使用harbor,需要修改harbor客户端的docker或K8s有关镜像仓库的配置:
//修改docker的daemon.json配置:
[root@k8s-master01 harbor]# vim /etc/docker/daemon.json ##所有安装了docker的节点都需要添加insecure-registries配置,避免docker login的时候报https错误
{
"insecure-registries": ["192.168.146.133:5000"],
"live-restore": true
}
[root@k8s-master01 harbor]# systemctl daemon-reload
[root@k8s-master01 harbor]# systemctl restart docker
[root@k8s-master01 harbor]# docker-compose restart
或
[root@k8s-master01 harbor]# vim /usr/lib/systemd/system/docker.service ##在Docker server启动的时候,增加启动参数,使其默认使用HTTP访问,避免docker login的时候报https错误
--13行--修改
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.146.133:5000 --containerd=/run/containerd/containerd.sock 或
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.146.133:5000
[root@k8s-master01 harbor]# systemctl daemon-reload
[root@k8s-master01 harbor]# systemctl restart docker
[root@k8s-master01 harbor]# docker-compose restart
//修改k8s的config.toml配置:
[root@k8s-master01 harbor]# vim /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.146.133:5000"]
endpoint = ["http://192.168.146.133:5000"]
[root@k8s-master01 harbor]# systemctl restart containerd
[root@k8s-master01 harbor]# ctr -n k8s.io image pull 192.168.146.133/kubernetes/harbor-exporter:v2.3.2 --plain-http --user admin:Harbor12345
//采用https方式使用harbor,需要修改harbor客户端的docker或K8s有关镜像仓库的配置:
//修改docker的daemon.json配置:
[root@k8s-master01 ~]# scp -r /etc/docker/certs.d/harbor.cisco.com/ca.crt root@客户机ip:/etc/docker/certs.d/harbor.cisco.com/ ##从harbor服务端,把相关证书文件拷贝到harbor客户端
[root@k8s-master01 ~]# vim /etc/docker/daemon.json ##修改registry-mirrors
{
"registry-mirrors": ["your-harbor-domain.com"],
"debug": true,
"experimental": false,
"tls": true,
"tlscacert": "/etc/docker/certs.d/your-harbor-domain.com/ca.crt",
"tlscert": "/etc/docker/certs.d/your-harbor-domain.com/client.cert",
"tlskey": "/etc/docker/certs.d/your-harbor-domain.com/client.key",
"live-restore": true
}
[root@k8s-master01 ~]# systemctl restart docker.service
//修改K8s的config.toml配置:
[root@k8s-master01 ~]# scp -r /etc/docker/certs.d/harbor.cisco.com/ca.crt root@客户机ip:/etc/docker/certs.d/harbor.cisco.com/ ##从harbor服务端,把相关证书文件拷贝到harbor客户端
[root@k8s-master01 harbor]# vim /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."your-harbor-domain.com"]
endpoint = ["https://your-harbor-domain.com"]
ca_file = "/root/certs.d/your-harbor-domain.com/ca.crt"
cert_file = "/root/certs.d/your-harbor-domain.com/client.cert"
key_file = "/root/certs.d/your-harbor-domain.com/client.key"
[root@k8s-master01 ~]# systemctl restart containerd
[root@k8s-master01 harbor]# ctr -n k8s.io image pull 192.168.146.133/kubernetes/harbor-exporter:v2.3.2 --plain-http --user admin:Harbor12345 ##测试
//在harbor客户端验证是否能够登陆harbor客户端:
[root@k8s-master01 ~]# docker login harbor.chengonglei.com 或 docker login harbor.chengonglei.com:port ##harbor客户端可以采用这种方式进行验证
[root@k8s-master01 ~]# vim /etc/hosts ##进行测试
192.168.1.18 harbor.cisco.com
//Harbor维护命令:
docker-compose down -v ##关停harbor(数据不会被删除)
docker-compose up -d ##重启harbor
//FAQ:
cat intermediate-certificate.pem >> yourdomain.com.crt ##如果使用证书签发机构的中间证书,请将中间证书与自己的证书合并,创建证书捆绑包。
cp yourdomain.com.crt /etc/pki/ca-trust/source/anchors/yourdomain.com.crt ##当Docker守护进程在某些操作系统上运行时,你可能需要在操作系统层面信任证书。
update-ca-trust
!!!【点赞】、【关注】不走丢^_^
!!!【点赞】、【关注】不走丢^_^
猜你喜欢
- 2024-10-08 容器化Web应用:从部署到扩展 doctor容器化部署
- 2024-10-08 容器化最佳实践:构建高效开发流程
- 2024-10-08 云时代必修课-云原生CI/CD(持续集成与交付)全流程实战(完结)
- 2024-10-08 Kubernetes vs.Docker:了解容器和编排
- 2024-10-08 docker之容器编排工具-Mesos集群环境搭建
- 2024-10-08 x-cmd pkg | ctop - 针对容器的类 top 命令
- 2024-10-08 起源:Docker容器技术 容器开源
- 2024-10-08 Docker容器集群快速编排工具Compose应用实践
- 2024-10-08 HashiCorp Nomad Enterprise 1.7.6(x64)编排容器工作负载批处理
- 2024-10-08 Docker和Docker-compose docker和docker-compose区别
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)