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

image

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包

image

配置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

image

helm list -A

image

kubectl get pod -n harbor

image

5、访问harbor

通过ingress访问

  • 浏览器通过http://core.harbor.domain访问harbor

image

通过nodeport访问

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

image

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文件中

image

image

posted @ 2026-03-27 11:22  立勋  阅读(1)  评论(0)    收藏  举报