Helm+Harbor部署-v3版本
一、部署 (虚拟机环境)
1、Helm 部分
1.1 步骤
环境: 一台ECS 安装helm 组件 centos7/8
下载 :wget https://get.helm.sh/helm-v3.6.2-linux-amd64.tar.gz
解压 : tar xf helm-v3.6.2-linux-amd64.tar.gz
把解压的二进制执行文件 加入环境变量。
cp ./helm /usr/local/bin/helm -ar
验证:
./helm –h
查看版本
[ templates]# helm version
version.BuildInfo{Version:“v3.6.2”, GitCommit:“ee407bdf364942bcb8e8c665f82e15aa28009b71”, GitTreeState:“clean”, GoVersion:“go1.16.5”} PS : 我这边是3版本!!
额外区别
3 与 2 的区别
Helm2:helm->tiller→k8s。
Helm3:helm→k8s。
1.2 helmpush插件
主用于上传chart仓库数据
Helmpush插件安装 (因为 helm 由于性能原因舍弃了 chart上传,可以用原生的curl 也可以用 helmpush )
由于墙拦住了比较慢
地址: https://github.com/chartmuseum/helm-push/releases/download/v0.9.0/helm-push_0.9.0_linux_amd64.tar.gz
解压 :tar xf helm-push_0.9.0_linux_amd64.tar.gz
把解压的二进制执行文件 加入环境变量。
cp ./helmpush /usr/local/bin/helmpush -ar
二、Harbor部分
2.1 安装docker (需要19版本以上)
添加镜像源: yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看版本:yum list docker-ce --showduplicates | sort -r
安装: yum install docker-ce-20.10.1
2.2 安装 docker-compose
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
2.3 安装 harbor
下载 :
wget https://github.com/goharbor/harbor/releases/download/v2.3.1/harbor-online-installer-v2.3.1.tgz
解压:
tar xf harbor-offline-installer-v2.3.1.tgz
编译SSL证书!因为docker 上传 需要用 HTTPS 以下改变其IP 生成对应的/app/harbor/certs 的密钥文件
注意! 千万生产不要用自建证书 一堆坑不好处理 详见可见案例问题处理部分
在该目录下操作生成证书,正好供harbor.yml使用
证书生成脚本
#!/bin/bash
mkdir -p /app/harbor/certs
cd /app/harbor/certs
IP='XXX.XXX.XXX.XXX'
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=www.harbor.mobi" -key ca.key -out ca.crt
openssl genrsa -out ${IP}.key 4096
openssl req -sha512 -new -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=${IP}" -key ${IP}.key -out ${IP}.csr
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:${IP}
EOF
openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in ${IP}.csr -out ${IP}.crt
openssl x509 -inform PEM -in ${IP}.crt -out ${IP}.cert
cp ${IP}.crt /etc/pki/ca-trust/source/anchors/${IP}.crt
update-ca-trust
HARBOR配置 下面IP password 替换为自身的
hostname: ${IP}
http:
port: 80
https:
port: 443
certificate: /root/harbor/harbor/certs/${IP}.crt
private_key: /root/harbor/harbor/certs/${IP}.key
harbor_admin_password: ${password}
database:
password: ${password}
max_idle_conns: 100
max_open_conns: 900
data_volume: /data
trivy:
ignore_unfixed: false
skip_update: false
insecure: false
jobservice:
max_job_workers: 10
notification:
webhook_job_max_retry: 10
chart:
absolute_url: disabled
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
_version: 2.3.0
proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- trivy
安装 (Harbor默认安装时是 不开启chartmuseum所以安装的时候加上–with-chartmuseum 支持chart仓库)
./install.sh --with-chartmuseum
结果
[Step 5]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating network "harbor_harbor-chartmuseum" with the default driver
Creating harbor-log ... done
Creating chartmuseum ... done
Creating redis ... done
Creating harbor-db ... done
Creating registryctl ... done
Creating harbor-portal ... done
Creating registry ... done
Creating harbor-core ... done
Creating nginx ... done
Creating harbor-jobservice ... done
✔ ----Harbor has been installed and started successfully.`
自签证书部分
一自签证书问题合集:( 已用正式证书以下问题不存在.)
问题一:
docker login https://cloud-harbor.xxxx.net --username username
登录报错如下:
Password:
Error response from daemon: Get https://cloud-harbor.xxxx.net/v2/: x509: certifixxxxcate signed by unknown authority
解决方案 :
本地机器允许自建证书通过。
把生成的Crt文件放入 /etc/ssl/certs/
执行更新语句
update-ca-trust
如果仓库没在本地的json中保留 将会被清空!!
重启docker生效 systemctl restart docker
!!! 注意 会影响本地的 docker上已跑的服务 请谨慎!
问题二 报错 GO版本低
x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0
解决方案(可以不用ROOT执行…这里方便展示)
原因: 由于go1.15以上不支持X509的证书 , 这里可以用SAN证书替换(这里不再扩展 -reqexts SAN ),本案例直接绕过校验
方法: 设置环境变量 ( 注意如果用ansible之类的工具 需要引入 /etc/profile 全局变量.)
echo “export GODEBUG=x509ignoreCN=0” >> /etc/profile; . /etc/profile
问题三报错访问IP证书不正确
[root@ip certs]# helm repo add --username XXX --password XXXXX repo_name
https://ip/chartrepo/repo_name
Error: looks like “https://ip/chartrepo/repo_name” is not a valid chart repository or cannot be reached: Get “https://ip/chartrepo/repo_name/index.yaml”: x509: cannot validate certificate for ip because it doesn’t contain any IP SAN
解决方式: 生成证书依据是域名,不是IP,故不可用IP. 生成一份对应域名的即可。