文档基于2025-10-10日社区最终版构建     
切换到英文版    进入演示系统    进入交流社区

MinIO Documentation

租户的 cert-manager

以下流程创建并应用必要的资源,以便在租户内使用 cert-manager 管理 TLS 证书。

Note

该程序使用tenant-1作为租户的名称。

替换字符串tenant-1在整个过程中,请将租户名称替换为您的实际租户名称。

前提条件

1) 创建租户命名空间 CA 颁发者

在部署新租户之前,请为该租户的命名空间创建证书颁发机构和颁发者。

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

    kubectl create ns tenant-1
    

    这必须与值匹配metadata.namespace租户 YAML 中的字段。

  2. 为新证书颁发机构申请证书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
    

    重要

    Thespec.issueRef.name必须与名称匹配ClusterIssuer创建于设置 cert-manager如果您指定了不同的ClusterIssuer名称或正在使用不同的Issuer根据指南,修改issuerRef以匹配您的环境。

  3. 应用资源:

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

2) 创建Issuer

TheIssuer在租户命名空间内颁发证书。

  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 服务器证书。 该证书必须对以下 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>'

重要

替换占位符文本(用<>字符数)为您的租户设置值:

  • <cluster domain>是分配给您的 Kubernetes 集群的内部根 DNS 域。 通常,这是cluster.local,但请通过检查您的 CoreDNS 配置来确认该值是否为适用于您 Kubernetes 集群的正确值。

    例如:

    kubectl get configmap coredns -n kube-system -o jsonpath="{.data}"
    

    不同的 Kubernetes 提供商对根域名的管理方式有所不同。 请咨询您的 Kubernetes 提供商以获取更多信息。

  • tenant-name是提供给您的租户的名称metadata.nameof the Tenant YAML. 对于这个示例,它是myminio.

  • namespace是之前创建的用于安装租户的值。 在租户 YAML 中,它定义在metadata.namespacefield. 对于这个示例,它是tenant-1.

  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
    

    提示

    对于此示例,租户名称为myminio我们建议在字段中命名密钥spec.secretName as <tenant-name>-tls作为命名约定。

  2. 应用证书资源:

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

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

    Note

    • 替换tenant-1使用您租户的命名空间。

    • 替换myminio-tls使用您的密钥名称(如果不同)。

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

部署租户时,必须设置TLS配置以满足以下要求:

  • 租户不会自动生成自己的证书(spec.requestAutoCert: false)

  • 租户有一个有效的 cert-manager 引用(spec.externalCertSecret)

这将指示 Operator 仅使用 cert-manager 证书来部署租户。

以下 YAMLspec提供了一个满足这些要求的基准配置:

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。 要信任租户的 CA,您必须将证书作为 secret 传递给 Operator。

为此,创建一个前缀为operator-ca-tls-后跟一个唯一的标识符minio-operatornamespace.

MinIO Operator 挂载与信任机制全部由提供的证书颁发机构颁发的证书。 这是必需的,因为MinIO Operator使用/minio/health/cluster端点。

创建operator-ca-tls-tenant-1秘密

复制租户的 cert-manager 生成的 CA 公钥(ca.crt) 到minio-operatornamespace. 这允许 Operator 信任 cert-manager 颁发的 CA 及其派生的所有证书。

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

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

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

提示

在这个例子中我们选择了一个秘密名称operator-ca-tls-tenant-1我们使用了租户命名空间tenant-1作为后缀,便于识别该 CA 来自哪个命名空间。 使用您的租户命名空间名称,以便更轻松地将密钥与相关资源关联起来。

6) 部署租户

随着证书颁发机构和Issuer现在,您可以为租户的命名空间进行配置了,部署对象存储租户.

使用修改后的基线租户 YAML 来禁用 AutoCert 并引用您生成的密钥。