前期准备
1. 一台 centos8 环境(确保已经安装好了docker 没安装的话直接yum install -y docker-ce docker-ce-cli containerd.io )
2. harbor 离线安装包
3. docker-compose 工具
离线包下载地址
github 官网地址
如果没法科学上网导致网站打开 可以试试下面两个镜像地址。打不开多刷新几遍。然后搜索 goharbor/harbor
https://github.com.cnpmjs.org
https://hub.fastgit.org
安装步骤
安装 docker-compose
github 下载地址
wget https://hub.fastgit.org/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64
mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
创建使用所需证书和密钥(如果打算安装http 模式这一步可以跳过)
- 生成ca 证书私钥
mkdir -p /data/harbor/certs
cd /data/harbor/certs/
openssl genrsa -out ca.key 4096
- 生成ca 自签名证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
-key ca.key \
-out ca.crt
注:CN 需要填写 你要创建harbor的域名或者 宿主机的IP
3. 生成 harbor 服务端私钥
openssl genrsa -out yourdomain.com.key 4096
- 生成 harbor 服务端证书的证书请求(ca 证书签名需要)
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
-key yourdomain.com.key \
-out yourdomain.com.csr
- 生成 x509 v3 扩展文件 (ssl 兼容需要)
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF
- 生成 服务端证书(用ca 证书通过证书请求和v3文件生成)
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in yourdomain.com.csr \
-out yourdomain.com.crt
部署harbor
wget https://github.com/goharbor/harbor/releases/download/v2.3.3/harbor-offline-installer-v2.3.3.tgz
(如果虚机无法访问外网可以在 自己能联网的电脑上下载好后上传到安装环境上)
tar -xvf harbor-offline-installer-v2.3.3.tgz
cd /harbor/
cp harbor.yml.tmpl harbor.yml
根据需求适配 harbor.yml文件
vi harbor.yml
# Configuration file of Harbor
# 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: kanq.k8s.com #上面创建证书用的你配置的CN 内容可以是 域名也可以是 具体IP
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 7080 # 这个是 http 访问模式。我这里修改了默认端口如果你对端口没要求的话可以不改默认80
# https related config
https: #这里是 https 访问模式 如果你对安全需求不高的话可以将下面几行全部注掉
# https port for harbor, default is 443
port: 7443 # 修改默认端口 默认443
# The path of cert and key files for nginx
certificate: /data/harbor/certs/kanq.k8s.com.crt # 第二步生成的服务端证书路径
private_key: /data/harbor/certs/kanq.k8s.com.key # 第二步生成的服务端密钥路径
保存后执行
./prepare 生成配置文件
./install.sh 安装harbor
一切正常的情况下到这一部harbor 就安装好了
网页打开 https://x.x.x.x:7443/ 默认用户名和密码可以在harbor.yml 中查看,当然你也可以在安装前修改成你需要的。
如果修改的话再修改完成后
一定要执行
docker-compose down -v (删除服务)
./prepare (重新生成配置文件)
docker-compose up -d (启动服务)
使用harbor 镜像仓库
- https 模式的harbor
docker 等镜像管理工具 认为 .crt 是ca 证书 所以我们首先需要将服务端的证书格式转化为.cert
openssl x509 -inform PEM -in kanq.k8s.com.crt -out kanq.k8s.com.cert
a. docker
mkdir -p /etc/docker/certs.d/kanq.k8s.com\:7443/ (如果是默认443 端口这里:7443 可以去掉)
将上面生成的服务端的证书和密钥 考到 /etc/docker/certs.d/kanq.k8s.com\:7443/ 目录下
cp kanq.k8s.com.cert /etc/docker/certs.d/kanq.k8s.com\:7443/
cp kanq.k8s.com.key /etc/docker/certs.d/kanq.k8s.com\:7443/
cp ca.crt /etc/docker/certs.d/kanq.k8s.com\:7443/
systemctl restart docker
b. podman
mkdir -p /etc/containers/certs.d/kanq.k8s.com\:7443/
cp kanq.k8s.com.cert /etc/containers/certs.d/kanq.k8s.com\:7443/
cp kanq.k8s.com.key /etc/containers/certs.d/kanq.k8s.com\:7443/
cp ca.crt /etc/containers/certs.d/kanq.k8s.com\:7443/
podman 就是一个工具无需重启(他没有守护进程 跟docker具体区别请自行百度谷歌这里就不展开了)
- http 模式
无需证书 所以需要修改 docker(podman)仓库配置 不做ssl 安装认证
a. docker
增加insecure-registries 变量
vi /etc/docker/daemon.json
{
"data-root": "/var/lib/docker",
"exec-opts": ["native.cgroupdriver=cgroupfs"],
"insecure-registries": ["kanq.k8s.com\:7443"],
"max-concurrent-downloads": 10,
"live-restore": true,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "50m",
"max-file": "1"
},
"storage-driver": "overlay2"
}
systemctl restart docker
b. podman
vi /etc/containers/registries.conf
# Registries that do not use TLS when pulling images or uses self-signed
# certificates.
[registries.insecure]
registries = ["kanq.k8s.com\:7443"]
- 使用
docker(podman) login -u admin -p Harbor kanq.k8s.com:7443
成功后就可以正常的docker(podman)pull push 了