租户的 cert-manager

以下过程用于创建并应用在租户内使用 cert-manager 管理 TLS 证书所需的资源。

前提条件

1) 创建租户命名空间的 CA Issuer

在部署新租户之前,先为该租户的命名空间创建 Certificate Authority 和 Issuer

  1. 如有必要,先创建租户命名空间。

    kubectl create ns tenant-1
    

    该值必须与租户 YAML 中 metadata.namespace 字段的值一致。

  2. 为新的 Certificate Authority 申请一个 Certificate,并将 spec.isCA 设为 true

    创建一个名为 tenant-1-ca-certificate.yaml 的文件,内容如下:

    # tenant-1-ca-certificate.yaml
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: tenant-1-ca-certificate
      namespace: tenant-1
    spec:
      isCA: true
      commonName: tenant-1-ca
      secretName: tenant-1-ca-tls
      duration: 70128h # 8y
      privateKey:
        algorithm: ECDSA
        size: 256
      issuerRef:
        name: selfsigned-root
        kind: ClusterIssuer
        group: cert-manager.io
    
  3. 应用该资源:

    kubectl apply -f tenant-1-ca-certificate.yaml
    

2) 创建 Issuer

Issuer 负责在租户命名空间内签发证书。

  1. 生成一个 Issuer 的资源定义。

    创建一个名为 tenant-1-ca-issuer.yaml 的文件,内容如下:

    # tenant-1-ca-issuer.yaml
    apiVersion: cert-manager.io/v1
    kind: Issuer
    metadata:
      name: tenant-1-ca-issuer
      namespace: tenant-1
    spec:
      ca:
        secretName: tenant-1-ca-tls
    
  2. 应用该 Issuer 资源定义:

    kubectl apply -f tenant-1-ca-issuer.yaml
    

3) 为租户创建证书

请求 cert-manager 为 MinIO 签发新的 TLS server 证书。 该证书必须对以下 DNS 域名有效:

  • minio.<namespace>
  • minio.<namespace>.svc
  • minio.<namespace>.svc.<cluster domain>
  • *.<tenant-name>-hl.<namespace>.svc.<cluster domain>
  • *.<namespace>.svc.<cluster domain>
  • *.<tenant-name>.minio.<namespace>.svc.<cluster domain>'
  1. 为指定域名申请一个 Certificate

    创建一个名为 tenant-1-minio-certificate.yaml 的文件。 文件内容应类似如下,并根据你的集群和租户配置进行调整:

    # tenant-1-minio-certificate.yaml
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: tenant-certmanager-cert
      namespace: tenant-1
    spec:
      dnsNames:
        - "minio.tenant-1"
        - "minio.tenant-1.svc"
        - 'minio.tenant-1.svc.cluster.local'
        - '*.minio.tenant-1.svc.cluster.local'
        - '*.myminio-hl.tenant-1.svc.cluster.local'
        - '*.myminio.minio.tenant-1.svc.cluster.local'
      secretName: myminio-tls
      issuerRef:
        name: tenant-1-ca-issuer
    
  2. 应用该证书资源:

    kubectl apply -f tenant-1-minio-certificate.yaml
    
  3. 验证变更是否已生效:

    kubectl describe secret/myminio-tls -n tenant-1
    

4) 使用 cert-manager 部署租户并管理 TLS 证书

部署 Tenant 时,必须将 TLS 配置设置为以下状态:

  • Tenant 不会自动生成自己的证书(spec.requestAutoCert: false并且
  • Tenant 具有有效的 cert-manager 引用(spec.externalCertSecret

这会指示 Operator 在部署 Tenant 时仅使用 cert-manager 管理的证书。

以下 YAML spec 提供了满足这些要求的基线配置:

apiVersion: minio.min.io/v2
kind: Tenant
metadata:
  name: myminio
  namespace: tenant-1
spec:
...
  ## Disable default tls certificates.
  requestAutoCert: false
  ## Use certificates generated by cert-manager.
  externalCertSecret:
    - name: myminio-tls
      type: cert-manager.io/v1
...

5) 在 MinIO Operator 中信任租户 CA

默认情况下,MinIO Operator 不信任租户的 CA。 若要让 Operator 信任该 CA,你必须将该证书作为 secret 传递给 Operator。

为此,请在 minio-operator 命名空间中创建一个以 operator-ca-tls- 为前缀、后接唯一标识符命名的 secret。

MinIO Operator 会挂载并信任由所提供的 Certificate Authority 签发的 所有 证书。 这是必需的,因为 MinIO Operator 会通过 /minio/health/cluster 端点执行健康检查。

创建 operator-ca-tls-tenant-1 secret

将租户中由 cert-manager 生成的 CA 公钥(ca.crt)复制到 minio-operator 命名空间中。 这样 Operator 就能信任该 cert-manager 颁发的 CA 及其派生的所有证书。

  1. 创建一个包含该 CA 的 ca.crt 文件:

    kubectl get secrets -n tenant-1 tenant-1-ca-tls -o=jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
    
  2. 创建 secret:

    kubectl create secret generic operator-ca-tls-tenant-1 --from-file=ca.crt -n minio-operator
    

6) 部署租户

租户命名空间中的 Certificate Authority 和 Issuer 就绪后,你现在可以 部署对象存储租户

请使用修改后的基线 Tenant YAML,禁用 AutoCert 并引用刚刚生成的 secret。

最后修改 August 2, 2026: init commit (8338d5b)

本页部分内容改编自 MinIO 对象存储文档,© 2020–至今 MinIO, Inc.,依据 CC BY 4.0 授权,由 Silo 项目转换与维护。归属与署名

本页为非官方中文翻译。如与英文原文有出入,以英文原文为准。