中文文档

租户认证管理器

以下步骤将创建和应用必要的资源,以便在租户内使用 cert-manager 管理 TLS 证书。

备注

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

在整个程序中替换字符串 tenant-1 以反映租户的名称。

前提条件

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

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

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

    kubectl create ns tenant-1
    

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

  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

重要

spec.issueRef.name 必须与在 setting up cert-manager 时创建的 ClusterIssuer 的名称一致。 如果您指定了不同的 ClusterIssuer 名称或使用了与指南不同的 Issuer ,请修改 issuerRef 以匹配您的环境。

  1. 应用资源:

    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) 为租户创建证书

请求证书管理器为 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 是租户 YAML 的 metadata.name 中为租户提供的名称。 在本例中,它是 myminio

  • namespace 是之前创建的值,租户将安装在该值上。 在租户 YAML 中,它定义在 metadata.namespace 字段中。 在本例中,它是 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 中的秘密命名为 <tenant-name>-tls 作为命名约定。

  2. 应用证书资源:

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

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

    备注

    • tenant-1 替换为租户的命名空间。

    • myminio-tls 替换为秘密名称(如果不同)。

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

部署租户时,必须设置 TLS 配置:

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

  • 承租人拥有有效的证书管理人证明 (spec.externalCertSecret)

这将指示操作员只使用 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 操作员中信任租户的 CA

MinIO 操作员默认不信任租户的 CA。 要信任租户的 CA,必须将证书作为秘密传递给操作员。

为此,请在 minio-operator 命名空间中创建一个秘密,前缀为 operator-ca-tls- ,后缀为唯一标识符。

MinIO Operator 挂载并信任由所提供的证书颁发机构签发的 所有 证书。 之所以需要这样做,是因为 MinIO 操作员会使用 /minio/health/cluster 端点执行健康检查。

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

将租户的证书管理器生成的 CA 公钥(ca.crt)复制到 minio-operator 命名空间。 这样,操作员就可以信任证书管理器签发的 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. 创建密码:

    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 就位后,现在就可以 :ref:` 部署对象存储租户 <minio-k8s-deploy-minio-tenant>` 。

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

Join Slack 商业支持购买咨询