微服务 云原生:搭建 Harbor 私有镜像仓库

Harbor官网

写在文前: 本文中用到机器均为虚拟机 CentOS-7-x86_64-Minimal-2009 镜像。

基础设施要求

在这里插入图片描述
虚拟机配置达到最低要求即可,本次系统中使用 docker 24.0.4、docker-compose 1.29.2。docker 及 docker-compose 的安装可以参考上篇文章 微服务 & 云原生:搭建 K8S 集群 中的 基础准备 部分。

下载 Harbor

官方有两种安装方式:在线(Online installer)和离线(Offline installer),这里推荐安装离线安装包,在 https://github.com/goharbor/harbor/tags 选择相应版本进行下载,这里我选择 v2.8.3 版本,即 harbor-offline-installer-v2.8.3.tgz。
在这里插入图片描述

# 下载
wget -c https://github.com/goharbor/harbor/releases/download/v2.8.3/harbor-offline-installer-v2.8.3.tgz# 解压
tar xzvf harbor-offline-installer-v2.8.3.tgz

可以看到解压后的文件列表:
在这里插入图片描述

生成 CA 证书

新增本地域名 ip 映射,我这里安装 harbor 的机器的 ip 地址为 192.168.65.134

vim /etc/hosts# 添加 ip 与自定义域名映射,域名可以随便设置
192.168.65.134 harbor.kubemanagement.com

新建一个 certs 文件夹:

mkdir certs

在这里插入图片描述

生成 CA

# 1.
cd certs
openssl genrsa -out ca.key 4096
# 2. 注意这里域名用上面设置的,比如 harbor.kubemanagement.com
openssl req -x509 -new -nodes -sha512 -days 3650 \-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.kubemanagement.com" \-key ca.key \-out ca.crt
# 3. 
openssl genrsa -out harbor.kubemanagement.com.key 4096
# 4. 
openssl req -sha512 -new \-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.kubemanagement.com.com" \-key harbor.kubemanagement.com.key \-out harbor.kubemanagement.com.csr
# 5.
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names[alt_names]
DNS.1=harbor.kubemanagement.com
DNS.2=yourdomain
DNS.3=hostname
EOF 
# 6. 
openssl x509 -req -sha512 -days 3650 \-extfile v3.ext \-CA ca.crt -CAkey ca.key -CAcreateserial \-in harbor.kubemanagement.com.csr \-out harbor.kubemanagement.com.crt
# 7. 
mkdir -p /data/cert/cp harbor.kubemanagement.com.crt /data/cert/
cp harbor.kubemanagement.com.key /data/cert/
# 8.
openssl x509 -inform PEM -in harbor.kubemanagement.com.crt -out harbor.kubemanagement.com.cert
# 9.
mkdir -p /etc/docker/certs.d/harbor.kubemanagement.com/cp harbor.kubemanagement.com.cert /etc/docker/certs.d/harbor.kubemanagement.com/
cp harbor.kubemanagement.com.key /etc/docker/certs.d/harbor.kubemanagement.com/
cp ca.crt /etc/docker/certs.d/harbor.kubemanagement.com/
# 10.
systemctl restart docker

配置安装 Harbor

# 进入解压目录,如果目录里有 harbor.yml 就直接修改,我这里只有 harbor.yml.tmpl
cd harbor
cp harbor.yml.tmpl harbor.ymlvim harbor.yml

主要注意下面几个地方,分别是自定义的域名,保存 CA 的位置以及默认的登录密码:
在这里插入图片描述
修改完成后直接运行 install 脚本:

./install.sh

在这里插入图片描述
成功安装后提示:
在这里插入图片描述
使用 docker-compose 查看运行情况:

docker-compose ps

在这里插入图片描述
没有问题的话,全部处于 healthy 状态。

测试

浏览器输入域名或 ip 有如下界面,默认用户名为 admin,密码为 harbor.yml 文件中设置的:
在这里插入图片描述
登录系统后新建一个私有项目 kubemanagment:
在这里插入图片描述
在这里插入图片描述
此时,可以测试上传镜像,首先(必须)登陆 docker:

docker login harbor.kubemanagement.com

在这里插入图片描述
按照 Harbor 的要求,标记镜像并推送:
在这里插入图片描述
这里简单以busybox镜像为例

# 1. 拉取 busybox 镜像
docker pull busybox
# 2. tag
docker tag busy:latest harbor.kubemanagement.com/kubemanagment/busybox:latest
# 3. push
docker push harbor.kubemanagement.com/kubemanagment/busybox:latest

此时在网页中可以看到已经存在 kubemanagment/busybox 了:
在这里插入图片描述
到这里,Harbor 基本安装配置完成。

至于上面的 kubemanagment/mysql,是在测试 k8s 集群环境下测试 harbor 推送的,具体过程如下:

基础 k8s 集群环境为 微服务 & 云原生:搭建 K8S 集群,为简单起见,这里只包含一个 master 节点和一个 worker 节点。master 节点 ip 信息如下:

ip: 192.168.65.130

在 master 的 hosts 中增加映射:

vim /etc/hosts
192.168.65.134 harbor.kubemanagement.com

为了在 master 节点上推送镜像,直接使用 docker login harbor.kubemanagement.com 登录是不行的,会报错:
在这里插入图片描述
需要把 harbor 所在的机器上的 CA 信息拷贝到 master 节点中:

# 在 master主机上
cd /etc/docker/# 192.168.65.134 为 harbor 所在主机
scp -r root@192.168.65.134:/etc/docker/certs.d .

在这里插入图片描述
随后重启 docker:

systemctl restart docker

接着

# 这里的 mysql:8.0.23 是我 master 节点中以前就 pull 好的镜像
docker login harbor.kubemanagement.com
docker tag mysql:8.0.23 harbor.kubemanagement.com/kubemanagment/mysql:8.0.23
docker push harbor.kubemanagement.com/kubemanagment/mysql:8.0.23

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/57580.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MobPush iOS SDK iOS实时活动

开发工具&#xff1a;Xcode 功能需要: SwiftUI实现UI页面&#xff0c;iOS16.1以上系统使用 功能使用: 需应用为启动状态 功能说明 iOS16.1 系统支持实时活动功能&#xff0c;可以在锁定屏幕上实时获知各种事情的进展&#xff0c;MobPushSDK iOS 4.0.3版本已完成适配&#xf…

Photoshop 2023 25.0beta「Mac」

Photoshop 2023是一款专业图像处理软件&#xff0c;它主要用于图像编辑、合成和设计等方面。 Photoshop beta创新式填充的功能特色包括&#xff1a; 自动识别和删除对象&#xff1a;该功能可以自动识别图像中的对象&#xff0c;并用周围的图像填充空白部分&#xff0c;使图像看…

(杭电多校)2023“钉耙编程”中国大学生算法设计超级联赛(6)

1001 Count 当k在区间(1n)/2的左边时,如图,[1,k]和[n-k1,n]完全相同,所以就m^(n-k) 当k在区间(1n)/2的右边时,如图,[1,n-k1]和[k,n]完全相同,所以也是m^(n-k) 别忘了特判,当k等于n时,n-k为0,然后a1a1,a2a2,..anan,所以没什么限制,那么就是m^n AC代码&#xff1a; #includ…

多通道振弦数据记录仪应用于桥梁监测

随着城市化进程的加快&#xff0c;城市桥梁的数量不断增加。对于城市交通的保障作用&#xff0c;桥梁的重要性不言而喻。而为了保障桥梁的安全&#xff0c;桥梁监测的重要性也越来越受到人们的重视。在桥梁监测中&#xff0c;多通道振弦数据记录仪的应用得到了广泛的认可和应用…

什么是芯片?

https://zhuanlan.zhihu.com/p/228757435?utm_sourceweibo&utm_mediumsocial&utm_oi895441374156029952&utm_contentsnapshot 什么是芯片&#xff1f; 半导体&#xff1a;一种材料&#xff0c;导电性能介于导体和半导体之间&#xff0c;比如硅、锗、砷化镓。用这…

JMeter命令行执行+生成HTML报告

1、为什么用命令行模式 使用GUI方式启动jmeter&#xff0c;运行线程较多的测试时&#xff0c;会造成内存和CPU的大量消耗&#xff0c;导致客户机卡死&#xff1b; 所以一般采用的方式是在GUI模式下调整测试脚本&#xff0c;再用命令行模式执行&#xff1b; 命令行方式支持在…

【车道线】TwinLiteNet 复现过程全纪录

码字不易&#xff0c;喜欢的请点赞收藏&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 论文全文翻译&#xff1a;【freespace】TwinLiteNet: An Efficient and Lightweight Model for Driveable Area and Lane Segmentation_莫克_Cheney的博客-CSDN博客 目录…

Keburnetes YAML配置文件管理

Kubernetes 支持 YAML 和 JSON 格式管理资源对象JSON 格式&#xff1a;主要用于 api 接口之间消息的传递YAML 格式&#xff1a;用于配置和管理&#xff0c;YAML 是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读 YAML 语法格式 大小写敏感使用缩进表示层…

【JavaEE进阶】Spring创建与使用

文章目录 一. 创建 Spring 项目1.1 创建一个Maven项目1.2 添加Spring依赖1.4. 创建一个启动类 二. 将 Bean 对象存放至 Spring 容器中三. 从 Spring 容器中读取到 Bean1. 得到Spring对象2. 通过Spring 对象getBean方法获取到 Bean对象【DI操作】 一. 创建 Spring 项目 接下来使…

【bug】记录一次使用Swiper插件时loop属性和slidersPerView属性冲突问题

简言 最近在vue3使用swiper时&#xff0c;突然发现loop属性和slides-per-view属性同时存在启用时&#xff0c;loop生效&#xff0c;下一步只能生效一次的bug&#xff0c;上一步却是好的。非常滴奇怪。 解决过程 分析属性是否使用错误。 loop是循环模式&#xff0c;布尔型。 …

etcd

文章目录 etcd单机安装设置键值对watch操作读取键过往版本的值压缩修订版本lease租约&#xff08;过期机制&#xff09;授予租约撤销租约keepAlive续约获取租约信息 事务基于etcd实现分布式锁原生实现官方 concurrency 包实现 服务注册与发现Go 操作 Etcd 参考 etcd etcd 是一…

一起来看看 Compose Accompanist

好久不见&#xff0c;真的挺久了&#xff0c;之前一个月写的文章比现在多半年的都多。今年第一篇文章是简单写了下 Android 14 的适配&#xff1a;Android 14 又来了&#xff1f;别扶&#xff01;抬起我来吧&#xff01; 今天咱们来一起看看 Compose Accompanist 吧&#xff0…