文档

为 MinIO 启用 TLS

MinIO 支持使用 Transport Layer Security (TLS) 1.2+ 对入站和出站流量进行加密。

MinIO Operator 支持通过以下方式为 MinIO 租户启用 TLS:

  • 使用 Kubernetes Cluster Signing Certificates 自动下发 TLS

  • 使用 Kubernetes secret 指定用户提供的 TLS

  • 使用 cert-manager 管理 TLS 证书

MinIO 会自动检测配置目录或默认目录中的 TLS 证书,并以启用 TLS 的方式启动。

本文说明如何为 MinIO 的单个域名启用 TLS。 关于多域 TLS,请参见 TODO。

前提条件

访问 MinIO 集群

你必须能够访问 Kubernetes 集群,并且 kubectl 配置中具备对应的管理权限。

本过程假设你的权限足以在 Kubernetes 集群中部署或修改 MinIO 相关资源,包括但不限于 pod、statefulset、replicaset、deployment 和 secret。

本过程使用 mc 对 MinIO 集群执行操作。 请在一台可通过网络访问该集群的机器上安装 mc。 关于下载和安装 mc,请参见 mc Installation Quickstart

本过程还假设你已经为 MinIO 集群配置了 alias

同时假设你拥有对每台 MinIO 主机服务器的 SSH 或类似 shell 级别的管理访问权限。

TLS 证书

请准备 MinIO 所需的 TLS 证书,并确保其使用 受支持的密码套件

关于支持的租户 TLS 配置,请参见 Kubernetes 上的 MinIO TLS

请按你偏好的方式准备证书,例如通过组织内部 Certificate Authority,或使用 Digicert、Verisign 等知名公共 CA 提供商。

你也可以使用 openssl 或 MinIO 的 certgen 工具创建自签名证书。

例如,以下命令会生成一个自签名证书,其中包含与 MinIO Server 主机关联的一组 IP 和 DNS Subject Alternative Name (SAN):

certgen -host "localhost,minio-*.example.net"

关于证书生成和放置方式的更完整说明,请参见 Baremetal 上的 MinIO TLS

步骤

MinIO Operator 支持通过三种方式管理 MinIO 租户上的 TLS 证书:

  • MinIO 自动生成 TLS 证书

  • cert-manager 管理的 TLS 证书

  • 用户自行管理的 TLS 证书

你可以组合使用上述任意方式来启用和配置 TLS。 对于用户自有证书,MinIO 强烈建议使用 cert-manager 以简化管理和续期流程。

你也可以部署未启用 TLS 的 MinIO 租户。

以下步骤同时适用于使用 Kustomize 的新建和现有 MinIO 部署:

  1. 检查 Tenant CRD 中的 TenantSpec.requestAutoCertTenantSpec.certConfig 字段。

    对于现有 MinIO 租户,请检查用于创建租户的 Kustomize 资源,并查看这些字段及其当前配置(如果已配置)。

  2. 按需创建或修改租户 YAML,设置 requestAutoCertcertConfig 的值。 例如:

    spec:
       requestAutoCert: true
       certConfig:
         commonName: "CN=MinioTenantCommonName"
         organizationName: "O=MyOrganizationName"
         dnsNames:
           - '*.minio-tenant.domain.tld'
    

    创建或修改租户资源时,可参考 Kustomize Tenant base YAML 作为基线模板。

  3. 应用新的 Kustomization 模板

    一旦应用这些更改,MinIO Operator 会使用更新后的配置自动重新部署该租户。

以下步骤同时适用于使用 Kustomize 的新建和现有 MinIO 部署:

  1. 检查 Tenant CRD 中的 TenantSpec.externalCertsCecret 字段

    对于现有 MinIO 租户,请检查用于创建租户的 Kustomize 资源,并查看该字段当前配置(如果已配置)。

  2. 创建或修改租户 YAML,使其引用适当的 cert-manager 资源。

    例如,以下租户 YAML 片段引用了一个名为 myminio-tls 的 cert-manager 资源:

    apiVersion: minio.min.io/v2
    kind: Tenant
    metadata:
    name: myminio
    namespace: minio-tenant
    spec:
       ## Disable default tls certificates.
       requestAutoCert: false
       ## Use certificates generated by cert-manager.
       externalCertSecret:
          - name: myminio-tls
             type: cert-manager.io/v1
    
  3. 应用新的 Kustomization 模板

    一旦应用这些更改,MinIO Operator 会使用更新后的配置自动重新部署该租户。

以下步骤同时适用于使用 Kustomize 的新建和现有 MinIO 部署:

  1. 检查 Tenant CRD 中的 TenantSpec.externalCertSecret 字段。

    对于现有 MinIO 租户,请检查用于创建租户的 Kustomize 资源,并查看该字段当前配置(如果已配置)。

  2. 创建或修改租户 YAML,使其引用一个类型为 kubernetes.io/tls 的 secret:

    例如,以下租户 YAML 片段引用了一个 TLS secret,它覆盖了 MinIO 租户接受连接时使用的域名。

    apiVersion: minio.min.io/v2
    kind: Tenant
    metadata:
    name: myminio
    namespace: minio-tenant
    spec:
       ## Disable default tls certificates.
       requestAutoCert: false
       ## Use certificates generated by cert-manager.
       externalCertSecret:
       - name: domain-certificate
         type: kubernetes.io/tls
    
  3. 应用新的 Kustomization 模板

    一旦应用这些更改,MinIO Operator 会使用更新后的配置自动重新部署该租户。

MinIO Server 会为每个节点搜索 TLS 私钥和证书,并使用这些凭据启用 TLS。 MinIO 会在发现并验证证书后自动启用 TLS。 搜索位置取决于你的 MinIO 配置:

默认情况下,MinIO server 会在以下目录中查找每个节点的 TLS 私钥和证书:

${HOME}/.minio/certs

其中 ${HOME} 是运行 MinIO Server 进程的用户主目录。 如果 ${HOME}/.minio/certs 目录不存在,你可能需要手动创建它。

对于由 systemd 管理的部署,该路径必须对应运行 MinIO 进程的 USER。 如果该用户没有主目录,请改用 Custom Path 选项。

你可以通过 minio server --certs-dir-S 参数指定 MinIO server 搜索证书的路径。

例如,以下命令片段指示 MinIO 进程使用 /opt/minio/certs 目录存放 TLS 证书。

minio server --certs-dir /opt/minio/certs ...

运行 MinIO service 的用户 必须 对该目录拥有读写权限。

请将默认域名(例如 minio.example.net)对应的 TLS 证书放入 /certs 目录,其中私钥命名为 private.key,公钥证书命名为 public.crt

例如:

/path/to/certs
private.key
public.crt

你可以使用 MinIO 的 certgen 生成自签名证书,以便在启用 TLS 的情况下评估 MinIO。 例如,以下命令会生成一个自签名证书,其中包含与 MinIO Server 主机关联的一组 IP 和 DNS Subject Alternative Name (SAN):

certgen -host "localhost,minio-*.example.net"

请将生成的 public.crtprivate.key 放入 /path/to/certs 目录,以便为 MinIO 部署启用 TLS。 应用可以将 public.crt 作为受信任的 Certificate Authority 使用,从而在不禁用证书校验的情况下连接到 MinIO 部署。

如果你是在重新配置一个此前未启用 TLS 的现有部署,请更新 MINIO_VOLUMES,将其中的 http 改为 https。 你可能还需要同步更新应用或客户端所使用的 URL。