helm实验-安装 harbor
1、前期准备说明
- 在使用helm安装harbor前需要准备好PV,这里通过storagclass来自动创建pv
- 还要准备PV的后端存储,这里使用的是NFS
2、配置nfs共享环境
安装nfs
- 使用/data/nfs目录作为PV的后端存储
# 安装nfs
apt update
apt install -y nfs-kernel-server
# 创建共享目录并给予权限
mkdir -p /data/nfs
chmod 777 /data/nfs
# 配置nfs使用共享目录
vim /etc/exports
/data/nfs *(rw,sync,no_subtree_check,no_root_squash)
exportfs -r
systemctl restart nfs-kernel-server
# 验证
showmount -e
安装nfs挂载工具
- 在k8s所有节点安装,用于PV自动挂载到nfs共享目录
apt update
apt install -y nfs-common
3、安装nfs存储供应器
- 通过helm安装,其中包含了storageClass
添加helm仓库
-- 添加nfs供应器helm仓库
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
-- 查看仓库中可安装的版本
helm search repo -l nfs-subdir-external-provisioner
-- 将chart下载到本地
helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --version 4.0.18 --untar
-- 或者通过以下链接手动下载到本地
https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/releases
安装nfs供应器
-- 指定nfs的地址、共享目录、存储类
cd nfs-subdir-external-provisioner
helm install my-nfs-provisioner . \
-n kube-system \
--set nfs.server=192.168.40.14 \
--set nfs.path=/data/nfs \
--set storageClass.name=nfs-client \
--set storageClass.defaultClass=true
查看安装情况
kubectl get pod -n kube-system | grep nfs
kubectl get sc

4、通过helm安装harbor
安装helm仓库
- helm 2版本中,使用helm fetch,helm 3版本使用helm pull
helm repo add harbor https://helm.goharbor.io # 添加仓库
helm pull harbor/harbor --version 1.17.2 --untar # 从本地名为 harbor 的 Helm 仓库中,下载名为 harbor 的 Chart 包到当前终端所在目录,并自动解压tar包
helm pull harbor/harbor # 这个命令不会解压,会下载tar包

配置harbor
- 将上一步中storageClass的名字写到values.yaml的storageClass字段中,每个pod的配置中都要写
![image]()
安装nginx-ingress-controller
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/baremetal/deploy.yaml -O nginx-ingress-controller.yaml
# 替换镜像,还需要手动删除镜像后的摘要
sed -i 's|registry.k8s.io|swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io|g' nginx-ingress-controller.yaml > /dev/null 2>&1
# 会创建ingressclass和controller
kubectl apply -f nginx-ingress-controller.yaml
配置hosts
- 查看ingress的IP
kubectl get ingress -n harbor
- 虚拟机和客户端都配置hosts
![image]()
- 主机hosts文件路径 C:\Windows\System32\drivers\hosts
- 192.168.137.161 core.harbor.domain
配置harbor的ingressclass名称
- 将harbor values.yaml中的className改为nginx
![image]()
- 配置hostNetwork,hostNetwork: true 表示 Pod 直接使用宿主机的网络,而不是容器网络(CNI)
kubectl patch deploy ingress-nginx-controller -n ingress-nginx \
-p '{"spec":{"template":{"spec":{"hostNetwork":true}}}}'
安装harbor
cd harbor && kubectl create ns harbor
helm install myharbor . -n harbor

helm list -A

kubectl get pod -n harbor

5、访问harbor
通过ingress访问
- 浏览器通过http://core.harbor.domain访问harbor

通过nodeport访问
- 在kuboard中编辑harbor-protal的服务类型为NodePort。实现通过nodeport访问harbor

6、给harbor配置https证书(旧)
- 这里将证书存放在 /root/harbor-helm/harbor/tls 路径下。以下的操作都在这个路径下执行
生成证书颁发机构证书
- 在生产环境中,您应该从 CA 获取证书。在测试或开发环境中,您可以生成自己的 CA。要生成 CA 证书,请运行以下命令。
# 生成 CA 证书私钥。
openssl genrsa -out ca.key 4096
# 生成 CA 证书。
# 设置CN为core.harbor.domain。以实际为准
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=core.harbor.domain" \
-key ca.key \
-out ca.crt
生成服务器证书
# 生成私钥
openssl genrsa -out core.harbor.domain.key 4096
# 生成证书签名请求 (CSR)。
# 同样的,设置CN为core.harbor.domain。以实际为准。并修改.key文件和.csr文件名,使用域名命名比较有辨识度
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=core.harbor.domain" \
-key core.harbor.domain.key \
-out core.harbor.domain.csr
# 生成 x509 v3 扩展文件。
# 无论您是使用 FQDN 还是 IP 地址连接到您的 Harbor 主机,您都必须创建此文件,以便您可以为您的 Harbor 主机生成符合主题备用名称 (SAN) 和 x509 v3 扩展要求的证书。替换 DNS 条目以反映您的域名。
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=core.harbor.domain
DNS.2=core.harbor
DNS.3=hostname
EOF
# 使用 v3.ext 文件为您的 Harbor 主机生成证书。
# 将 CSR 和 CRT 文件名中的 yourdomain.com 替换为 Harbor 主机名。
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in core.harbor.domain.csr \
-out core.harbor.domain.crt
-
配置完证书的目录结构
![image]()
-
查看一下secret
![image]()
-
删除旧的secret
kubectl delete secret myharbor-ingress -n harbor
- 配置新的secret,与原secret同名,指定新的证书
kubectl create secret -n harbor generic myharbor-ingress --from-file=ca.crt=ca.crt --from-file=tls.crt=core.harbor.domain.crt --from-file=tls.key=core.harbor.domain.key
- 现在可以通过https://core.harbor.domain访问haibor。密码在values.yaml文件中








浙公网安备 33010602011771号