Harbor再次安装与使用
文章目录
- 初次安装
- 准备证书
- 下载安装cfssl工具
- cfssl命令介绍
- 创建根证书
- 创建证书签名请求文件
- 初始化生成CA证书和密钥
- 创建harobr服务器证书
- 安装docker和docker-compose
- 安装docker
- 安装docker-compose
- 安装harbor
- 配置docker使用harbor仓库
- 小提示
初次安装
准备证书
下载安装cfssl工具
下载下来的工具是可以直接执行的
root@harbor:~# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
root@harbor:~# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
root@harbor:~# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
下载完成之后可以重命名一下直接使用
root@harbor:~# mv cfssl_linux-amd64 /opt/bin/cfssl
root@harbor:~# mv cfssljson_linux-amd64 /opt/bin/cfssljson
root@harbor:~# mv cfssl-certinfo_linux-amd64 /opt/bin/cfssl-certinfo
root@harbor:~# chmod +x /opt/bin/*
root@harbor:/opt/pki# export PATH=$PATH:/opt/bin #如果想用起来方便点也可以将cfssl工具加到PATH环境变量中
cfssl命令介绍
cfssl常用命令如下:
cfssl gencert -initca ca-csr.json | cfssljson -bare ca ## 初始化ca
cfssl gencert -initca -ca-key key.pem ca-csr.json | cfssljson -bare ca ## 使用现有私钥, 重新生成
cfssl certinfo -cert ca.pem #查看cert(证书信息)
cfssl certinfo -csr ca.csr #查看CSR(证书签名请求)信息
cfssl工具,子命令介绍:
- bundle: 创建包含客户端证书的证书包
- genkey: 生成一个key(私钥)和CSR(证书签名请求)
- scan: 扫描主机问题
- revoke: 吊销证书
- certinfo: 输出给定证书的证书信息, 跟cfssl-certinfo 工具作用一样
- gencrl: 生成新的证书吊销列表
- selfsign: 生成一个新的自签名密钥和 签名证书
- print-defaults: 打印默认配置,这个默认配置可以用作模板
- config:生成ca配置模板文件
- csr:生成证书请求模板文件
- serve: 启动一个HTTP API服务
- gencert: 生成新的key(密钥)和签名证书
- -initca:初始化一个新ca
- -ca:指明ca的证书
- -ca-key:指明ca的私钥文件
- -config:指明请求证书的json文件
- -profile:与-config中的profile对应,是指根据config中的profile段来生成证书的相关信息
ocspdump
- ocspsign
- info: 获取有关远程签名者的信息
- sign: 签名一个客户端证书,通过给定的CA和CA密钥,和主机名
- ocsprefresh
- ocspserve
创建根证书
cfssl工具利用json格式创建证书比较方便,先自己创建一个json的根证书
root@harbor:/opt/pki # cat > ca-config.json <<EOF
{"signing": {"default": {"expiry": "87600h"},"profiles": {"harbor": {"usages": ["signing","key encipherment","server auth","client auth"],"expiry": "876000h"}}}
}
EOF
这个策略,有一个default默认的配置,和一个profiles,profiles可以设置多个profile,这里的profile是harbor
- default默认策略,指定了证书的默认有效期是一年(8760h)
- harbor:表示该配置(profile)的用途是为harbor生成证书及相关的校验工作
- signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE
- server auth:表示可以该CA 对 server 提供的证书进行验证
- client auth:表示可以用该 CA 对 client 提供的证书进行验证
- expiry:也表示过期时间,如果不写以default中的为准
创建证书签名请求文件
创建证书签名请求文件
root@harbor:/opt/pki # cat > ca-csr.json <<EOF
{"CN": "harbor","key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","ST": "HuBei","L": "WuHan","O": "harbor","OU": "org"}],"ca": {"expiry": "876000h"}
}
EOF
- CN: Common Name,浏览器使用该字段验证网站是否合法,一般写的是域名。非常重要。浏览器使用该字段验证网站是否合法
- key:生成证书的算法
- hosts:表示哪些主机名(域名)或者IP可以使用此csr申请的证书,为空或者""表示所有的都可以使用(本例中没有hosts字段)
- names:一些其它的属性
- C: Country, 国家
- ST: State,州或者是省份
- L: Locality Name,地区,城市
- O: Organization Name,组织名称,公司名称(在k8s中常用于指定Group,进行RBAC绑定)
- OU: Organization Unit Name,组织单位名称,公司部门
初始化生成CA证书和密钥
root@harbor:/opt/pki # cfssl gencert -initca ca-csr.json | cfssljson -bare ca
# 该命令会生成运行CA所必需的文件ca-key.pem(私钥)和ca.pem(证书),还会生成ca.csr(证书签名请求),用于交叉签名或重新签名。
cfssl certinfo -cert ca.pem #查看cert(证书信息)
cfssl certinfo -csr ca.csr #查看CSR(证书签名请求)信息
创建harobr服务器证书
创建harbor证书请求文件
root@harbor:/opt/pki # cat > harbor-csr.json <<EOF
{"CN": "harbor","hosts": [],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","ST": "HuBei","L": "WuHan","O": "harbor","OU": "org"}]
}
EOF
使用请求文件根据CA配置颁发证书
root@harbor:/opt/pki# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=harbor harbor-csr.json |cfssljson -bare harbor
- -config :指定CA证书机构的配置文件
- -profile:指定CA配置文件中的哪个模块
root@harbor:/opt/pki# ll -rst
total 44
4 drwxr-xr-x 4 root root 4096 Oct 14 05:52 ../
4 -rw-r--r-- 1 root root 289 Oct 14 06:02 ca-config.json
4 -rw-r--r-- 1 root root 238 Oct 14 06:02 ca-csr.json
4 -rw-r--r-- 1 root root 1338 Oct 14 06:04 ca.pem
4 -rw-r--r-- 1 root root 989 Oct 14 06:04 ca.csr
4 -rw------- 1 root root 1679 Oct 14 06:04 ca-key.pem
4 -rw-r--r-- 1 root root 215 Oct 14 06:47 harbor-csr.json
4 -rw-r--r-- 1 root root 1375 Oct 14 06:47 harbor.pem
4 -rw-r--r-- 1 root root 989 Oct 14 06:47 harbor.csr
4 -rw------- 1 root root 1679 Oct 14 06:47 harbor-key.pem
4 drwxr-xr-x 2 root root 4096 Oct 14 06:47 ./
# 此时已经生成了harbor的证书(harbor.pem)和harbor的私钥(harbor-key.pem)
安装docker和docker-compose
安装docker
root@harbor:~# apt-get purge docker-ce docker-ce-cli containerd.io && rm -rf /var/lib/docker #卸载老版本docker(如果有的话)
- 当执行apt-get install时,apt软件包管理工具会先检查要安装的软件的状态,向我这种情况下,手动删除了软件配置后,并不会引起dpkg中记录的状态的改变,即仍为 config-files 状态,所以安装过程会直接跳过创建配置文件这一过程。于是当软件重新安装后想要启动进程的时候,才发现找不到文件。所以当你想彻底地删除软件包的时候,用 apt-get purge 吧
root@harbor:~# apt update #更换apt源之后需要操作
root@harbor:~# apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
#安装docker依赖
root@harbor:~# root@harbor:~# curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
#添加GPG证书
root@harbor:~# add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#写入软件源信息
root@harbor:~# apt-get update && apt-get -y install docker-ce
#安装最新版docker-ce
root@harbor:/etc/apt# cat > /etc/docker/daemon.json <<EOF
{"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
],
"insecure-registries":["IP:443"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# 配置docker镜像仓库,设置cgroupdriver为systemd
root@harbor:/etc/apt# cat > /etc/sysctl.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
root@harbor:/etc/apt# sysctl -p
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
# 配置内核参数开启路由转发
root@harbor:/etc/apt# systemctl daemon-reload && systemctl enable --now docker
root@harbor:/etc/apt# systemctl is-active docker
active
安装docker-compose
下载docker-compose安装包
root@harbor:~# wget https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-linux-x86_64
root@harbor:~# mv docker-compose-darwin-x86_64 /usr/local/bin/docker-compose
root@harbor:~# chmod +x /usr/local/bin/docker-compose
root@harbor:/opt/harbor# docker-compose -v
Docker Compose version v2.11.2
安装harbor
下载harbor安装包
root@harbor:/opt# wget https://github.com/goharbor/harbor/releases/download/v2.6.1/harbor-offline-installer-v2.6.1.tgz
root@harbor:/opt# tar -xf harbor-offline-installer-v2.6.1.tgz
root@harbor:/opt# cd harbor/
root@harbor:/opt/harbor# ls
LICENSE common.sh harbor.v2.6.1.tar.gz harbor.yml input install.sh prepare
# 如果是harbor.yml.tmpl可以mv重命名为harbor.yml
root@harbor:/opt/harbor# vim harbor.yml
# 修改hostname,注释http相关配置,修改https证书路径
示例如下:
root@harbor:/opt/harbor# ./prepare #运行harbor脚本启用https
root@harbor:/opt/harbor# ./install.sh
# 执行harbor自带脚本安装harbor
# ✔ ----Harbor has been installed and started successfully.----
# 有以上打印表示安装成功
查看容器状态
root@harbor:/opt/harbor# docker-compose ps
NAME COMMAND SERVICE STATUS PORTS
harbor-core "/harbor/entrypoint.…" core running (healthy)
harbor-db "/docker-entrypoint.…" postgresql running (healthy)
harbor-jobservice "/harbor/entrypoint.…" jobservice running (healthy)
harbor-log "/bin/sh -c /usr/loc…" log running (healthy) 127.0.0.1:1514->10514/tcp
harbor-portal "nginx -g 'daemon of…" portal running (healthy)
nginx "nginx -g 'daemon of…" proxy running (healthy) 0.0.0.0:80->8080/tcp, :::80->8080/tcp, 0.0.0.0:443->8443/tcp, :::443->8443/tcp
redis "redis-server /etc/r…" redis running (healthy)
registry "/home/harbor/entryp…" registry running (healthy)
registryctl "/home/harbor/start.…" registryctl running (healthy
#需要在harbor部署目录执行
harbor启停命令如下
docker-compose down -v
docker-compose up -d
登录harbor
浏览器输入访问地址:
https模式:https://IP:443
http 模式: http://IP:80
用户:admin
密码:harbor.yml文件中harbor_admin_password的值,默认是Harbor12345
。
配置docker使用harbor仓库
登录harbor仓库
root@harbor:/opt/harbor# docker login -u admin -p Harbor12345 harbor.org
# 这里用了https就别再加443,否则容易出错,harbor.org可以在/etc/hosts中配置解析
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
退出的话docker logout
https://<你自己的IP>:443
即可
另外,harbor使用域名的情况下,需要将harbor证书传到docker节点,否则会报错x509证书错误,具体做法可以参考官网
root@master1:~# ls /etc/docker/certs.d/harbor.org/
ca.crt harbor.org.crt harbor.org.key
仅仅这样还不够,还需要编辑 /etc/docker/daemon.json
root@master1:~# cat /etc/docker/daemon.json
{"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://reg-mirror.qiniu.com",
"https://registry.docker-cn.com"
],
"insecure-registries":["https://harbor.org:443"], #这里和实际域名需要匹配
"exec-opts": ["native.cgroupdriver=systemd"]
}
和原来一样,改完之后重启docker服务
小提示:我这边使用admin登录结果出现可以登录成功,但是无法push镜像的情况,建议在harbor上新建其他用户进行使用
如果想要快速将本地容器镜像都改名并上传至harbor,可以使用我这个脚本(会删除原有镜像,如果不想删除记得注释后半截)
#!/bin/bash
source_images=$(docker images |awk 'NR!=1{print $1":"$2}')
for i in $source_images;doj=$(echo ${i##*/})# j=$(echo $i|awk -F '/' '{print $NF}')#取j的时候上面两种取法都可以,第一种轻量一些harbor_k8s=harbor.hu.org/kubernetes/$jdocker tag "$i" "$harbor_k8s"docker push "$harbor_k8s"
done
#下面开始删除远来的镜像,如果不想删就将下面的都注释掉
untag_images=$(docker images |awk 'NR!=1{print $1":"$2}')
for m in $untag_images;dodocker rmi $m
done
如果想直接对其他k8s节点也进行这个操作,可以利用ansible的script模块
root@harbor:~# ansible k8s_node -m script -a rename_image.sh
小提示
1 使用proxy访问harbor
如果需要使用proxy访问harbor,需要注意修改external_url
且如果proxy的端口和harbor端口不匹配的时候一定要取消external_url注释且端口需要写proxy的端口
2 shell从最左或者最右删除字符
root@harbor:~# image=aaa/bbb/ccc/ddd:v1
root@harbor:~# echo ${#image} #打印变量长度
18
root@harbor:~# echo ${image} #标准查看变量
aaa/bbb/ccc/ddd:v1#从左边开始删除使用#,*在需要匹配的字符左边
#删除匹配到的第一个
root@harbor:~# echo ${image#*/}
bbb/ccc/ddd:v1
#删除匹配到的最后一个
root@harbor:~# echo ${image##*/}
ddd:v1
#从右边开始删除使用%,*在需要匹配的字符右边
#删除匹配到的第一个
root@harbor:~# echo ${image%/*}
aaa/bbb/ccc
#删除匹配到的最后一个
root@harbor:~# echo ${image%%/*}
aaa
Harbor再次安装与使用相关推荐
- Harbor: Harbor卸载安装及基本使用教程
Harbor卸载安装及基本使用教程 前言 卸载 删除harbor相关的目录及文件 删除docker中有关harbor的镜像及容器 下载 解压安装 解压tar文件 配置Harbor 执行安装脚本 安装时 ...
- Oracle9i卸载后再次安装,设置的SID相同出现“指定的SID在本机上已经存在。请指定一个不同的SID。”...
Oracle9.0.2卸载后再次安装,设置的SID相同出现"指定的SID在本机上已经存在.请指定一个不同的SID." 记得阿都跟我说过要全部清除注册表. 但是考虑到出现相同的SID ...
- Android之解决卸载app后再次安装提示room数据库错误
1.问题 目前只有一个google手机之前安装了app,里面有room写的数据库,后面把app卸载了,再次安装新的app(修改了数据库里面的字段),启动奔溃. 2.分析 提示数据库错误,很明显就像以前 ...
- Harbor的安装部署
先贴一个很详细的博客:https://www.cnblogs.com/kevingrace/p/6547616.html 什么是Harbor? Docker容器应用的开发和运行离不开可靠的镜像管理,虽 ...
- VisualStudio卸载后无法再次安装的解决方法
VisualStudio卸载后无法再次安装的解决方法 参考文章: (1)VisualStudio卸载后无法再次安装的解决方法 (2)https://www.cnblogs.com/javabg/p/7 ...
- 解决chrome浏览器崩溃,再次安装不上问题
解决chrome浏览器崩溃,再次安装不上问题 参考文章: (1)解决chrome浏览器崩溃,再次安装不上问题 (2)https://www.cnblogs.com/runningsoybean/p/1 ...
- mysql server再次安装失败_MySQL在windows上多次安装失败
Mysql首次安装: 1.官网下载mysql安装包 2.安装选择自定义,custom 3.更换路径,然后按需求选择,选择标准就行 Mysql重复安装需要注意的问题: 1.程序和功能下,需要卸载MySQ ...
- 安装JDK失败,再次安装时出现已经安装过了的,解决办法
在电脑上安装JDK失败,再次安装时会提醒"已经在安装,请关闭原来的安装进程"这时的解决办法如下: 第一步: 1. 在电脑上,进入命令行,输入"regedit", ...
- AutodeskCAD卸载后无法再次安装?完美解决!
可能你也会纳闷,既然我已经卸载了,为什么在安装CAD软件时依然会显示[已安装]而且也无法再次安装.这一切,都是[注册表]在捣鬼.注册表就是存储我们安装软件的相关信息,在安装软件时系统会根据注册表中的相 ...
最新文章
- HBase安装与命令行操作
- DT时代下[个推3.0]遵循的四个法则
- 编译boost时 cmake的debug:math命令无法解析“*”号
- 【深度学习入门到精通系列】模型结构可视化神器Netron(连.pth都可以~!)
- 从AX4.0本地化SP2凭证系统的一个bug看UserConnection的使用
- 解决jquey中当事件嵌套时,内层事件会执行多次的问题
- hdu 1573(中国剩余定理非互质情况)
- import org.apache.http.xxxxxx 爆红,包不存在之解决办法
- java a3 套打印_Java - apache PDFBox兩個A3論文到一個A2?
- python抖音github_GitHub - eternal-flame-AD/Douyin-Bot: Python 抖音机器人,论如何在抖音上找到漂亮小姐姐?...
- Ybt#452-序列合并【期望dp】
- [JS][jQuery]清空元素html()、innerHTML= 与 empty()的区别 、remove()区别
- 汇编:分段函数的值的计算
- 作用 react_react-styleguidist核心知识点详解
- linux端口转发_详解Linux网桥功能--概念、工作机制、相关命令及实例说明
- MD5消息摘要算法和SHA-1安全散列算法
- react native 0.50 源码解析 再出发 持续更新
- C++string字符串1.2
- 计算机语言中交集符号,数学相交符号
- Ubuntu安装指定版本的内核
热门文章
- 关于STM32利用TIM+PWM+DMA控制WS2812
- cad工具快速选择特性里面是空的解决方法
- MGC TOKEN—必将超越PlusToken的搬砖套利项目!
- 技术一般的程序员找工作,如今真的一年比一年难...
- 黑马程序员——java基础---网络编程
- ieee14节点 matlab,《IEEE14节点电力网络分析》.doc
- ps顶级调色技术解密视频教程 终极大法
- 深度linux系统wifi信号变弱,在Deepin 20社区版下WiFi网速变慢的处理
- 配置静态NAT和配置动态NAT
- OpenGL实验2:图形的旋转、平移、缩放