k8s

使用cert-manager自动续签harbor证书

前言

harbor需要上https,可以参考这里,harbor的证书是自签名的,证书需要手动续签,如果只有一个环境还好,但有多个harbor环境,然后证书过期时间不一致时,就需要耗费很多的精力来处理证书过期问题。

现在我环境中的harbor是以docker-compose形式部署的,提供k8s集群服务来拉取镜像。那么可不可以把harbor部署在k8s集群中,再使用cert-manager工具来生成证书,并完成自动续签呢?答案是可以的。

cert-manager部署

这里使用helm方式部署。官方文档地址:https://cert-manager.io/docs/installation/helm/

helm repo add jetstack https://charts.jetstack.io
helm repo update
# 安装CRD。
helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.13.2 \
  --set installCRDs=true

values.yaml中可以配置项参考:https://artifacthub.io/packages/helm/cert-manager/cert-manager

file

file

查看crd和pod。

file

创建ClusterIssuer

查看ingressclass,在创建ClusterIssuer时需要指定,如果没有指定,有默认的class也可以。

k get ingressclass

file

创建Issuer或ClusterIssuer对象以连接到证书颁发机构(CA)。ClusterIssuer是一个全局对象,而Issuer是命名空间相关的。yaml如下:

vim ClusterIssuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-harbor
spec:
  acme:
    # 使用 Let's Encrypt ACME 服务器
    server: https://acme-v02.api.letsencrypt.org/directory
    email: 1127093900@qq.com
    privateKeySecretRef:
      name: letsencrypt-harbor
    solvers:
      - http01:
          ingress:
            class: nginx

k apply -f ClusterIssuer.yaml

file

harbor部署

官方部署文档:https://goharbor.io/docs/2.9.0/install-config/harbor-ha-helm/

helm repo add harbor https://helm.goharbor.io
helm search repo harbor
helm pull harbor/harbor
tar xvf harbor-1.13.1.tgz
cd harbor
vim values.yaml

expose:
  type: ingress
  tls:
    enabled: true
    certSource: auto
   # 这里可以随意填写一个,cert-manager会自动创建并挂载,不写也行
    secretName: "harbor-secret-tls"
    commonName: ""
  ingress:
    hosts:
      core: harbor.test.com
    annotations:
      ingress.kubernetes.io/ssl-redirect: "true"
      nginx.ingress.kubernetes.io/ssl-redirect: "true"
      ingress.kubernetes.io/proxy-body-size: "0"
      nginx.ingress.kubernetes.io/proxy-body-size: "0"
      # 这里添加自动创建tls,并使用上面创建的issuer
      kubernetes.io/tls-acme: "true"
      certmanager.k8s.io/issuer: letsencrypt-harbor

helm install harbor --create-namespace -n harbor .

file

这里镜像会拉取超时。到github下载离线包,导入镜像。

wget https://github.com/goharbor/harbor/releases/download/v2.9.1/harbor-offline-installer-v2.9.1.tgz
tar xvf harbor-offline-installer-v2.9.1.tgz
cd harbor
nerdctl -n k8s.io load -i harbor.v2.9.1.tar.gz

file

查看secret,cert-manager自动创建的secret name为harbor-ingress,包含了ca.crttls.crttls.key

file

查看证书挂载位置:/etc/core/ca

file

file

访问harbor

本地添加hosts后访问 https://harbor.test.com

file

查看证书有效期

可以看到证书有效期是1年。

echo | openssl s_client -servername harbor.test.com -connect harbor.test.com:443 2>/dev/null | openssl x509 -noout -dates

file

浏览器导入证书

导入ca.crt到受信任的根证书颁发机构。

file

file

file

拷贝证书

证书是软链接,真实路径是/etc/core/ca/..data/

file

k cp -n harbor harbor-core-6748cd8888-5qnfq:/etc/core/ca/..data/ca.crt ca.crt.
k cp -n harbor harbor-core-6748cd8888-5qnfq:/etc/core/ca/..data/tls.crt tls.crt
k cp -n harbor harbor-core-6748cd8888-5qnfq:/etc/core/ca/..data/tls.key tls.ke

登录harbor

添加解析,直接登录会报错:x509: certificate signed by unknown authority Get https://harbor.wowjoy.com/v2/: x509: certificate signed by unknown authority

解决方法是拷贝上面的ca.crt并导入。

cat ca.crt >> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
docker login
nerdctl login

file

file

分类: k8s
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x