使用 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 证书。
Important
该 CA 证书 必须 在安装 MinIO Operator 之前 已存在。
如果
minio-operator命名空间尚不存在,请先创建:kubectl create ns minio-operator
申请一个新的
Certificate,并设置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
Important
spec.issueRef.name必须与 配置 cert-manager 时创建的ClusterIssuer名称一致。 如果你使用了不同的ClusterIssuer名称,或者使用了与本指南不同的Issuer,请根据你的环境调整issuerRef。应用该资源:
kubectl apply -f operator-ca-tls-secret.yaml
Kubernetes 会在 minio-operator 命名空间中创建一个名为 operator-ca-tls 的新 Secret。
Important
任何需要与 MinIO Operator 交互的应用都必须信任此证书。
2) 使用该 Secret 创建 Issuer
使用 operator-ca-tls Secret 为 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 名称有效:
stssts.minio-operator.svc.sts.minio-operator.svc.<cluster domain>Important
将
<cluster domain>替换为你的环境实际使用的值。cluster domain是 Kubernetes 集群内部的根 DNS 域。 该值通常为cluster.local,但你仍应检查 CoreDNS 配置,以确认 Kubernetes 集群实际使用的值。例如:
kubectl get configmap coredns -n kube-system -o jsonpath="{.data}"
不同 Kubernetes 发行版或托管平台对根域名的管理方式可能不同。 更多信息请参阅你的 Kubernetes 提供方文档。
为上述 DNS 名称创建一个
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
Important
spec.secretName不是可选项。Secret 名称 必须 为
sts-tls。 请确认在证书 YAML 中按照高亮所示设置spec.secretName: sts-tls。应用该资源:
kubectl apply -f sts-tls-certificate.yaml
这会在 minio-operator 命名空间中创建一个名为 sts-tls 的 Secret。
Warning
如果包含 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 文件,内容如下:# 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 的步骤,并禁用 auto-cert。
完成本页步骤 1 到 3,为 Operator 创建证书颁发机构。
执行本页中的安装步骤时,不再使用原有的 Operator TLS 证书,而改用 cert-manager 签发的证书。
参照 用于租户的 cert-manager 页面,为每个租户创建新的 cert-manager 证书。
使用每个租户对应的 cert-manager 证书 Secret,替换 MinIO Operator 命名空间中租户正在使用的 Secret。