针对 Operator 的 cert-manager
MinIO Operator 管理在 minio-operator
命名空间中托管的服务的 TLS 证书颁发。
此页面介绍如何使用 cert-manager 管理 Operator 的 TLS 证书。
先决条件
kustomize 已安装
kubectl
访问您的k8s
集群已完成 设置 cert-manager 的步骤
MinIO Operator 尚未安装。
1) 为 minio-operator
命名空间创建一个 CA 发行者
本指南**禁用** MinIO Operator 中证书的自动生成,而是使用 cert-manager 颁发证书。
minio-operator
命名空间必须有自己的证书颁发机构 (CA),该证书颁发机构源自集群的 ClusterIssuer
证书,该证书是在 cert-manager 设置 期间创建的。使用 cert-manager 创建此 CA 证书。
重要
此 CA 证书**必须**在安装 MinIO Operator **之前**存在。
如果它不存在,请创建
minio-operator
命名空间kubectl create ns minio-operator
使用指定的
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
以匹配您的环境。应用资源
kubectl apply -f operator-ca-tls-secret.yaml
Kubernetes 在 minio-operator
命名空间中创建了一个名为 operator-ca-tls
的新密钥。
重要
确保在任何需要与 MinIO 运算符交互的应用程序中信任此证书。
2) 使用密钥创建 Issuer
使用 operator-ca-tls
密钥为 minio-operator
命名空间添加一个 Issuer
资源。
创建一个名为
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
应用资源
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 提供商以了解更多信息。
为指定的域名创建一个
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 中突出显示的那样)来确认这一点。应用资源
kubectl apply -f sts-tls-certificate.yaml
这将在 minio-operator
命名空间中创建一个名为 sts-tls
的密钥。
警告
如果包含 TLS 证书的 sts-tls
密钥丢失或包含无效的 key-value
对,则 STS 服务将不会启动。
4) 使用禁用自动 TLS 的方式安装 Operator
您现在可以 安装 MinIO Operator。
在安装 Operator 部署时,将 OPERATOR_STS_AUTO_TLS_ENABLED
环境变量设置为 off
在 minio-operator
容器中。
禁用此环境变量将阻止 MinIO Operator 颁发证书。相反,Operator 依赖 cert-manager 来颁发 TLS 证书。
根据您安装 Operator 的方式,有各种方法来定义环境变量。以下步骤使用 kustomize 定义变量。
创建一个名为
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"
将 kustomization 资源应用于集群
kubectl apply -k minio-operator
将现有的 MinIO Operator 部署迁移到 cert-manager
要将现有的 MinIO Operator 部署从使用 AutoCert 转换为使用 cert-manager,请完成以下步骤
完成 安装 cert-manager 的步骤,包括禁用自动证书。
完成此页面上的步骤 1-3 以生成 Operator 的证书颁发机构。
当您到达此页面上的安装步骤时,请用 cert-manager 颁发的证书替换现有的 Operator TLS 证书。
为每个租户创建新的 cert-manager 证书,类似于 租户的 cert-manager 页面上描述的步骤。
将 MinIO Operator 命名空间中的租户密钥替换为与每个租户的 cert-manager 颁发的证书相关的密钥。