文档

用于 Operator 的 cert-manager

MinIO Operator 管理托管在 minio-operator 命名空间中的服务的 TLS 证书颁发。

本页介绍如何使用 cert-manager 管理 Operator 的 TLS 证书。

先决条件

1) 为 minio-operator 命名空间创建一个 CA 发行者

本指南禁用了 MinIO Operator 中证书的自动生成,并改用 cert-manager 颁发证书。

minio-operator 命名空间必须有自己的证书颁发机构 (CA),该证书颁发机构源自集群的 ClusterIssuer 证书,该证书是在 cert-manager 设置 期间创建的。使用 cert-manager 创建此 CA 证书。

重要

此 CA 证书必须在安装 MinIO Operator之前存在。

  1. 如果它不存在,请创建 minio-operator 命名空间

    kubectl create ns minio-operator
    
  2. 使用指定了 spec.isCA: true 的新证书请求。

    此证书充当 minio-operator 命名空间的 CA

    创建一个名为 operator-ca-tls-secret.yaml 的文件,内容如下

    # operator-ca-tls-secret.yaml
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: minio-operator-ca-certificate
      namespace: minio-operator
    spec:
      isCA: true
      commonName: operator
      secretName: operator-ca-tls
      duration: 70128h # 8y
      privateKey:
        algorithm: ECDSA
        size: 256
      issuerRef:
        name: selfsigned-root
        kind: ClusterIssuer
        group: cert-manager.io
    

    重要

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

  3. 应用资源

    kubectl apply -f operator-ca-tls-secret.yaml
    

Kubernetes 在 minio-operator 命名空间中创建了一个名为 operator-ca-tls 的新密钥。

重要

确保在需要与 MinIO Operator 交互的任何应用程序中信任此证书。

2) 使用密钥创建 Issuer

使用 operator-ca-tls 密钥为 minio-operator 命名空间添加一个 Issuer 资源。

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

    # operator-ca-issuer.yaml
    apiVersion: cert-manager.io/v1
    kind: Issuer
    metadata:
      name: minio-operator-ca-issuer
      namespace: minio-operator
    spec:
      ca:
        secretName: operator-ca-tls
    
  2. 应用资源

    kubectl apply -f operator-ca-issuer.yaml
    

3) 创建 TLS 证书

现在 Issuer 已存在于 minio-operator 命名空间中,cert-manager 可以添加证书。

来自 cert-manager 的证书必须对以下 DNS 域名有效

  • sts

  • sts.minio-operator.svc.

  • sts.minio-operator.svc.<cluster domain>

    重要

    <cluster domain> 替换为 MinIO 租户的实际值。 cluster domain 是 Kubernetes 集群中分配的内部根 DNS 域名。 通常情况下,它是 cluster.local,但请通过检查 CoreDNS 配置来确认 Kubernetes 集群的正确值。

    例如

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

    不同的 Kubernetes 提供商以不同的方式管理根域名。 请咨询您的 Kubernetes 提供商以了解更多信息。

  1. 为指定的域名创建 Certificate

    创建一个名为 sts-tls-certificate.yaml 的文件,内容如下

    # sts-tls-certificate.yaml
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: sts-certmanager-cert
      namespace: minio-operator
    spec:
      dnsNames:
        - sts
        - sts.minio-operator.svc
        - sts.minio-operator.svc.cluster.local # Replace cluster.local with the value for your domain.
      secretName: sts-tls
      issuerRef:
        name: minio-operator-ca-issuer
    

    重要

    spec.secretName 不是可选的。

    秘密名称 **必须** 为 sts-tls。 请通过设置 spec.secretName: sts-tls 来确认这一点,如证书 YAML 中突出显示的那样。

  2. 应用资源

    kubectl apply -f sts-tls-certificate.yaml
    

这将在 minio-operator 命名空间中创建一个名为 sts-tls 的秘密。

警告

如果包含 TLS 证书的 sts-tls 秘密缺失或包含无效的 key-value 对,则 STS 服务将无法启动。

4) 安装带有禁用自动 TLS 的 Operator

您现在可以 安装 MinIO Operator

安装 Operator 部署时,请在 minio-operator 容器中将 OPERATOR_STS_AUTO_TLS_ENABLED 环境变量设置为 off

禁用此环境变量可以防止 MinIO Operator 发行证书。 相反,Operator 依赖 cert-manager 来发行 TLS 证书。

根据安装 Operator 的方式,定义环境变量的方法有多种。 以下步骤使用 kustomize 来定义变量。

  1. 创建一个名为 kustomization.yaml 的 kustomization 修补文件,内容如下

    # minio-operator/kustomization.yaml
    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    
    resources:
    - github.com/minio/operator/resources
    
    patches:
    - patch: |-
        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: minio-operator
          namespace: minio-operator
        spec:
          template:
            spec:
              containers:
                - name: minio-operator
                  env:
                    - name: OPERATOR_STS_AUTO_TLS_ENABLED
                      value: "off"
                    - name: OPERATOR_STS_ENABLED
                      value: "on"
    
  2. 将 kustomization 资源应用到集群

    kubectl apply -k minio-operator
    

将现有的 MinIO Operator 部署迁移到 cert-manager

要将现有的 MinIO Operator 部署从使用 AutoCert 迁移到 cert-manager,请完成以下步骤

  1. 完成 安装 cert-manager 的步骤,包括禁用自动证书。

  2. 完成此页面上的步骤 1-3 以生成 Operator 的证书颁发机构。

  3. 当您到达此页面的安装步骤时,请用 cert-manager 发行的证书替换现有的 Operator TLS 证书。

  4. 为每个租户创建新的 cert-manager 证书,类似于 租户的 cert-manager 页面上描述的步骤。

  5. 将 MinIO Operator 命名空间中的租户秘密替换为与每个租户的 cert-manager 发行的证书相关的秘密。

下一步

设置 MinIO 租户的 cert-manager