cert-manager for 租户
以下步骤创建并应用在租户中使用 cert-manager 进行 TLS 证书所需的资源。
注意
这些步骤使用 tenant-1
作为租户名称。
在整个过程中替换字符串 tenant-1
以反映您租户的名称。
先决条件
已安装 kustomize
您
k8s
集群的kubectl
访问权限已完成 设置 cert-manager 的步骤
MinIO 运算符已安装并 为 cert-manager 设置.
1) 创建租户命名空间 CA 发行者
在部署新租户之前,为租户的命名空间创建一个证书颁发机构和发行者。
如有必要,请创建租户的命名空间。
kubectl create ns tenant-1
这必须与租户 YAML 中
metadata.namespace
字段的值匹配。使用
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
必须与 设置 cert-manager 时创建的ClusterIssuer
的名称匹配。如果您指定了不同的ClusterIssuer
名称或正在使用与指南不同的Issuer
,请修改issuerRef
以匹配您的环境。应用资源
kubectl apply -f tenant-1-ca-certificate.yaml
2) 创建 Issuer
Issuer
在租户命名空间中颁发证书。
为
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
应用
Issuer
资源定义kubectl apply -f tenant-1-ca-issuer.yaml
3) 为租户创建证书
请求 cert-manager 为 MinIO 颁发新的 TLS 服务器证书。证书必须对以下 DNS 域名有效
minio.<命名空间>
minio.<命名空间>.svc
minio.<命名空间>.svc.<集群 域名>
*.<租户名称>-hl.<命名空间>.svc.<集群 域名>
*.<命名空间>.svc.<集群 域名>
*.<租户名称>.minio.<命名空间>.svc.<集群 域名>'
重要
用你的租户的值替换占位符文本(用 <
和 >
字符标记)
<集群 域名>
是在你的 Kubernetes 集群中分配的内部根 DNS 域名。通常,这是cluster.local
,但请通过检查你的 CoreDNS 配置来确认你的 Kubernetes 集群的正确值。例如
kubectl get configmap coredns -n kube-system -o jsonpath="{.data}"
不同的 Kubernetes 提供商以不同的方式管理根域名。请咨询你的 Kubernetes 提供商以了解更多信息。
租户名称
是在租户 YAML 的metadata.name
中为你的租户提供的名称。在本例中,它是myminio
。命名空间
是之前创建的值,租户将在其中安装。在租户 YAML 中,它在metadata.namespace
字段中定义。在本例中,它是tenant-1
。
为指定的域请求
证书
创建一个名为
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
字段中的秘密命名为<租户名称>-tls
作为命名约定。应用证书资源
kubectl apply -f tenant-1-minio-certificate.yaml
验证更改是否生效
kubectl describe secret/myminio-tls -n tenant-1
注意
将
tenant-1
替换为你的租户的命名空间。将
myminio-tls
替换为你的秘密的名称(如果不同)。
4) 使用 cert-manager 部署租户进行 TLS 证书管理
部署租户时,必须设置 TLS 配置,以便
租户不会自动生成自己的证书 (
spec.requestAutoCert: false
) 并且租户具有有效的 cert-manager 引用 (
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 Operator 中信任租户的 CA
默认情况下,MinIO Operator 不信任租户的 CA。要信任租户的 CA,必须将证书作为秘密传递给操作员。
为此,请使用前缀 operator-ca-tls-
创建一个秘密,后跟 minio-operator 命名空间中的唯一标识符。
MinIO Operator 会挂载并信任由提供的证书颁发机构颁发的所有证书。这是必需的,因为 MinIO Operator 使用 /minio/health/cluster
端点执行健康检查。
创建 operator-ca-tls-tenant-1
秘密
将租户的 cert-manager 生成的 CA 公钥 (ca.crt
) 复制到 minio-operator 命名空间。这使操作员能够信任 cert-manager 颁发的 CA 及其所有派生证书。
创建一个包含 CA 的
ca.crt
文件kubectl get secrets -n tenant-1 tenant-1-ca-tls -o=jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
创建秘密
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
,你现在可以 部署对象存储租户。
使用修改后的基线租户 YAML 来禁用 AutoCert 并引用你生成的秘密。