为 MinIO 启用多域名 TLS
MinIO 支持传输层安全性 (TLS) 1.2+ 版本的入站和出站流量加密。
MinIO Operator 支持以下方式为 MinIO Tenant 启用 TLS:
使用 Kubernetes 集群签名证书自动配置 TLS
用户指定的TLS使用Kubernetes密钥
Certmanager管理的TLS证书
MinIO Operator 支持在部署时附加用户指定的 TLS 证书部署 or 修改MinIO 租户。
这些自定义证书支持Server Name Indication (SNI), MinIO 服务器根据连接客户端指定的主机名来识别要使用的证书。 例如,您可以生成由组织首选证书颁发机构(CA)签名的证书,并将这些证书附加到 MinIO 租户。 信任该 CA 的应用程序CA可以连接到 MinIO 租户并完全验证租户 TLS 证书。
MinIO 会自动检测配置目录或默认目录中的 TLS 证书,并启用 TLS 启动服务。
MinIO 服务器支持多个 TLS 证书,其中服务器使用Server Name Indication (SNI)用于识别在响应客户端请求时使用哪个证书。 当客户端使用特定主机名连接时,MinIO 使用SNI为该主机名选择合适的TLS证书。
此过程记录了在 MinIO 中为多个域名启用 TLS 的步骤。 有关单域名 TLS 的说明,请参阅 TODO
前提条件
访问 MinIO 集群
您必须拥有对 Kubernetes 集群的访问权限,并具备相应的管理权限。kubectlconfiguration.
此过程假设您的权限集已充分扩展,以支持在 Kubernetes 集群上部署或修改与 MinIO 相关的资源,包括但不限于 pods、statefulsets、replicasets、deployments 和 secrets。
TLS Certificates
使用一个必要的TLS证书进行配置支持的密码套件供 MinIO 使用。
看MinIO TLS on Kubernetes有关支持的租户 TLS 配置的更完整指南。
使用您偏好的方式配置证书,例如通过您组织的内部证书颁发机构,或使用知名的全球提供商(如 Digicert 或 Verisign)。
您可以使用自签名证书创建openssl对于 MinIOcertgen工具。
例如,以下命令生成一个自签名证书,其中包含一组与MinIO服务器主机关联的IP和DNS主题备用名称(SAN):
certgen -host "localhost,minio-*.example.net"
看MinIO Baremetal TLS有关证书生成和放置的更完整指导。
过程
MinIO Operator 支持三种在 MinIO 租户上管理 TLS 证书的方法:
MinIO 自动 TLS 证书生成
用户指定的TLS证书
cert-manager托管TLS证书
您也可以部署未启用 TLS 的 MinIO 租户。
以下步骤适用于使用 MinIO 的新部署和现有部署Kustomize:
Review theTenant CRD
TenantSpec.requestAutoCert和TenantSpec.certConfig字段。对于现有的 MinIO 租户,请检查用于创建该租户的 Kustomize 资源,并内省这些字段及其当前配置(如果有)。
创建或修改您的租户 YAML 以设置以下值:
requestAutoCert和certConfig必要时。 例如:spec: requestAutoCert: true certConfig: commonName: "CN=MinioTenantCommonName" organizationName: "O=MyOrganizationName" dnsNames: - 'minio-tenant.domain.tld' - '*.kubernete.cluster.dns.path.tld'
The
spec.certConfig.dnsNames应该包含一个列表SANTLS证书覆盖的范围。查看Kustomize 租户基础 YAML作为创建或修改租户资源指导的基线模板。
应用新的 Kustomization 模板
一旦应用更改,MinIO Operator 会自动重新部署具有更新配置的租户。
以下步骤适用于使用 MinIO 的新部署和现有部署Kustomize:
Review theTenant CRD
TenantSpec.externalCertsCecret字段对于现有的 MinIO 租户,请检查用于创建该租户的 Kustomize 资源,并查看该字段的当前配置(如果有)。
创建或修改您的租户 YAML 以引用适当的
cert-manager资源。例如,以下 Tenant YAML 片段引用了一个 cert-manager 资源
myminio-tls: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: default-domain type: cert-manager.io/v1 - name: internal-domain type: cert-manager.io/v1 - name: external-domain type: cert-manager.io/v1
应用新的 Kustomization 模板
一旦应用更改,MinIO Operator 会自动重新部署具有更新配置的租户。
以下步骤适用于使用 MinIO 的新部署和现有部署Kustomize:
Review theTenant CRD
TenantSpec.externalCertSecret字段。对于现有的 MinIO 租户,请检查用于创建该租户的 Kustomize 资源,并查看该字段的当前配置(如果有)。
创建或修改您的租户 YAML 以引用类型为 secret 的密钥
kubernetes.io/tls:例如,以下租户 YAML 片段为 MinIO 租户接受连接的每个域名引用了两个 TLS 密钥:
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-1 type: kubernetes.io/tls - name: domain-certificate-2 type: kubernetes.io/tls
应用新的 Kustomization 模板
一旦应用更改,MinIO Operator 会自动重新部署具有更新配置的租户。
MinIO Server 会为每个节点搜索 TLS 密钥和证书,并使用这些凭据启用 TLS。 MinIO 在发现并验证证书后会自动启用 TLS。 搜索位置取决于您的 MinIO 配置:
默认情况下,MinIO 服务器会在以下目录中查找每个节点的 TLS 密钥和证书:
${HOME}/.minio/certs
哪里${HOME}是运行 MinIO Server 进程的用户的主目录。
您可能需要创建${HOME}/.minio/certs如果目录不存在。
对于systemd托管部署中这必须对应于USER运行 MinIO 进程。
如果该用户没有主目录,请使用自定义路径作为替代选项。
您可以为 MinIO 服务器指定一个路径来搜索证书,使用minio server --certs-dir or -Sparameter.
例如,以下命令片段指示 MinIO 进程使用/opt/minio/certsTLS证书目录。
minio server --certs-dir /opt/minio/certs ...
运行 MinIO 服务的用户必须对此目录拥有读写权限。
将证书放置在/certs文件夹,在其中创建一个子文件夹/certs对于 MinIO 需要提供 TLS 证书的每个额外域名。
虽然 MinIO 对文件夹名称没有要求,但建议创建与域名匹配的子文件夹以提高人工可读性。
将该域名的 TLS 私钥和公钥放置在对应的子文件夹中。
/path/to/certs
private.key
public.crt
s3-example.net/
private.key
public.crt
internal-example.net/
private.key
public.crt