这是本节的多页打印视图。 .
证书管理操作
先按 cert-manager 设置指南准备环境,再为继承的 MinIO Operator 部署配置证书。
1 - 使用 cert-manager 管理 Operator 证书
MinIO Operator 负责管理 minio-operator 命名空间中各服务的 TLS 证书签发。
本页说明如何使用 cert-manager 管理 Operator 的 TLS 证书。
前提条件
- 使用受支持版本的 Kubernetes
- 已安装 kustomize
- 可以通过
kubectl访问你的k8s集群 - 已完成 cert-manager 配置
- MinIO Operator 尚未安装
1) 为 minio-operator 命名空间创建 CA Issuer
本指南将 禁用 MinIO Operator 的自动证书生成功能,改为使用 cert-manager 签发证书。
minio-operator 命名空间必须拥有自己的证书颁发机构(CA),该 CA 派生自你在 配置 cert-manager 时创建的集群 ClusterIssuer 证书。 请使用 cert-manager 创建此 CA 证书。
重要
该 CA 证书 必须 在安装 MinIO Operator 之前 已存在。
-
如果
minio-operator命名空间尚不存在,请先创建: -
申请一个新的
Certificate,并设置spec.isCA: true。该证书将作为
minio-operator命名空间的 CA 使用。创建一个名为
operator-ca-tls-secret.yaml的文件,内容如下:警告重要
spec.issueRef.name必须与 配置 cert-manager 时创建的ClusterIssuer名称一致。 如果你使用了不同的ClusterIssuer名称,或者使用了与本指南不同的Issuer,请根据你的环境调整issuerRef。 -
应用该资源:
Kubernetes 会在 minio-operator 命名空间中创建一个名为 operator-ca-tls 的新 Secret。
重要
任何需要与 MinIO Operator 交互的应用都必须信任此证书。
2) 使用该 Secret 创建 Issuer
使用 operator-ca-tls Secret 为 minio-operator 命名空间创建一个 Issuer 资源。
-
创建一个名为
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>替换为你的环境实际使用的值。cluster domain是 Kubernetes 集群内部的根 DNS 域。 该值通常为cluster.local,但你仍应检查 CoreDNS 配置,以确认 Kubernetes 集群实际使用的值。例如:
不同 Kubernetes 发行版或托管平台对根域名的管理方式可能不同。 更多信息请参阅你的 Kubernetes 提供方文档。
-
为上述 DNS 名称创建一个
Certificate:创建一个名为
sts-tls-certificate.yaml的文件,内容如下:警告重要
spec.secretName不是可选项。Secret 名称 必须 为
sts-tls。 请确认在证书 YAML 中按照高亮所示设置spec.secretName: sts-tls。 -
应用该资源:
这会在 minio-operator 命名空间中创建一个名为 sts-tls 的 Secret。
警告
如果包含 TLS 证书的 sts-tls Secret 缺失,或者其中包含无效的 key-value 对,则 STS service 无法启动。
4) 在禁用 Auto TLS 的情况下安装 Operator
现在你可以 安装 MinIO Operator。
安装 Operator 时,请在 minio-operator 容器中将环境变量 OPERATOR_STS_AUTO_TLS_ENABLED 设置为 off。
禁用该环境变量后,MinIO Operator 将不再自行签发证书。 此时 Operator 将依赖 cert-manager 签发 TLS 证书。
环境变量的具体定义方式取决于你的 Operator 安装方式。 以下步骤演示如何使用 kustomize 配置该变量。
-
创建一个名为
kustomization.yaml的 kustomization patch 文件,内容如下: -
将该 kustomization 资源应用到集群:
将现有 MinIO Operator 部署迁移到 cert-manager
如果要将现有 MinIO Operator 部署从 AutoCert 迁移到 cert-manager,请完成以下步骤:
- 完成 安装 cert-manager 的步骤,并禁用 auto-cert。
- 完成本页步骤 1 到 3,为 Operator 创建证书颁发机构。
- 执行本页中的安装步骤时,不再使用原有的 Operator TLS 证书,而改用 cert-manager 签发的证书。
- 参照 用于租户的 cert-manager 页面,为每个租户创建新的 cert-manager 证书。
- 使用每个租户对应的 cert-manager 证书 Secret,替换 MinIO Operator 命名空间中租户正在使用的 Secret。
后续步骤
2 - 租户的 cert-manager
以下过程用于创建并应用在租户内使用 cert-manager 管理 TLS 证书所需的资源。
说明
本过程使用 tenant-1 作为租户名称。
请在整个过程中将 tenant-1 替换为你的租户名称。
前提条件
- 已安装 kustomize
- 可通过
kubectl访问你的k8s集群 - 已完成 cert-manager 的设置
- 已安装 MinIO Operator,并已 完成 cert-manager 设置
1) 创建租户命名空间的 CA Issuer
在部署新租户之前,先为该租户的命名空间创建 Certificate Authority 和 Issuer。
-
如有必要,先创建租户命名空间。
该值必须与租户 YAML 中
metadata.namespace字段的值一致。 -
为新的 Certificate Authority 申请一个
Certificate,并将spec.isCA设为true。创建一个名为
tenant-1-ca-certificate.yaml的文件,内容如下:警告重要
spec.issueRef.name必须与 设置 cert-manager 时创建的ClusterIssuer名称一致。 如果你使用了不同的ClusterIssuer名称,或者采用了与本指南不同的Issuer,请按你的环境修改issuerRef。 -
应用该资源:
2) 创建 Issuer
Issuer 负责在租户命名空间内签发证书。
-
生成一个
Issuer的资源定义。创建一个名为
tenant-1-ca-issuer.yaml的文件,内容如下: -
应用该
Issuer资源定义:
3) 为租户创建证书
请求 cert-manager 为 MinIO 签发新的 TLS server 证书。 该证书必须对以下 DNS 域名有效:
minio.<namespace>minio.<namespace>.svcminio.<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 集群实际使用的值。例如:
不同 Kubernetes 提供方对根域名的管理方式各不相同。 更多信息请参考你的 Kubernetes 提供方文档。
-
tenant-name是 Tenant YAML 中metadata.name字段指定的名称。 在本例中该值为myminio。 -
namespace是前面创建、将用于安装租户的命名空间值。 在 Tenant YAML 中,它定义在metadata.namespace字段。 在本例中该值为tenant-1。
-
为指定域名申请一个
Certificate创建一个名为
tenant-1-minio-certificate.yaml的文件。 文件内容应类似如下,并根据你的集群和租户配置进行调整:说明提示
在本例中,Tenant 名称为
myminio。 作为命名约定,建议将spec.secretName字段中的 secret 命名为<tenant-name>-tls。 -
应用该证书资源:
-
验证变更是否已生效:
说明说明
- 将
tenant-1替换为你的租户命名空间。 - 如果 secret 名称不同,请将
myminio-tls替换为实际值。
- 将
4) 使用 cert-manager 部署租户并管理 TLS 证书
部署 Tenant 时,必须将 TLS 配置设置为以下状态:
- Tenant 不会自动生成自己的证书(
spec.requestAutoCert: false)并且 - Tenant 具有有效的 cert-manager 引用(
spec.externalCertSecret)
这会指示 Operator 在部署 Tenant 时仅使用 cert-manager 管理的证书。
以下 YAML spec 提供了满足这些要求的基线配置:
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 及其派生的所有证书。
-
创建一个包含该 CA 的
ca.crt文件: -
创建 secret:
提示
在本例中,我们选择将 secret 命名为 operator-ca-tls-tenant-1。 我们使用租户命名空间 tenant-1 作为后缀,以便更容易识别该 CA 来自哪个命名空间。 建议使用你的租户命名空间名称作为后缀,以便将 secret 与相关资源更容易关联起来。
6) 部署租户
租户命名空间中的 Certificate Authority 和 Issuer 就绪后,你现在可以 部署对象存储租户。
请使用修改后的基线 Tenant YAML,禁用 AutoCert 并引用刚刚生成的 secret。