文件

Operator 的 cert-manager

MinIO Operator 管理在 minio-operator 命名空間中託管的服務的 TLS 憑證簽發。

此頁面說明如何使用 cert-manager 管理 Operator 的 TLS 憑證。

必要條件

1) 為 minio-operator 命名空間建立 CA 簽發者

本指南停用 MinIO Operator 中的自動憑證產生,並改為使用 cert-manager 發出憑證。

minio-operator 命名空間必須有自己的憑證授權單位 (CA),該授權單位衍生自 cert-manager 設定 期間建立的叢集的 ClusterIssuer 憑證。使用 cert-manager 建立此 CA 憑證。

重要事項

此 CA 憑證必須在安裝 MinIO Operator 之前存在。

  1. 如果不存在,請建立 minio-operator 命名空間

    kubectl create ns minio-operator
    
  2. 請求一個新的憑證,其中指定 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 以符合您的環境。

  3. 套用資源

    kubectl apply -f operator-ca-tls-secret.yaml
    

Kubernetes 會在 minio-operator 命名空間中建立一個名為 operator-ca-tls 的新密鑰。

重要事項

請確保在任何需要與 MinIO Operator 互動的應用程式中信任此憑證。

2) 使用此密鑰建立 Issuer

使用 operator-ca-tls 密鑰來為 minio-operator 命名空間新增一個 Issuer 資源。

  1. 建立一個名為 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
    
  2. 套用資源

    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 供應商以取得更多資訊。

  1. 為指定的網域建立一個 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。請如憑證 YAML 中標示的,設定 spec.secretName: sts-tls 來確認。

  2. 套用資源

    kubectl apply -f sts-tls-certificate.yaml
    

這會在 minio-operator 命名空間中建立一個名為 sts-tls 的密鑰。

警告

如果缺少包含 TLS 憑證的 sts-tls 密鑰,或其中包含無效的 key-value 配對,則 STS 服務將無法啟動。

4) 安裝已停用自動 TLS 的 Operator

您現在可以安裝 MinIO Operator

在安裝 Operator 部署時,請在 minio-operator 容器中,將 OPERATOR_STS_AUTO_TLS_ENABLED 環境變數設定為 off

停用此環境變數可防止 MinIO Operator 發出憑證。相反地,Operator 會仰賴 cert-manager 發出 TLS 憑證。

有多種方法可以定義環境變數,具體取決於您安裝 Operator 的方式。 以下步驟使用 kustomize 定義變數。

  1. 建立一個名為 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"
    
  2. 將 kustomization 資源套用至叢集

    kubectl apply -k minio-operator
    

將現有的 MinIO Operator 部署移轉至 cert-manager

若要將現有的 MinIO Operator 部署從使用 AutoCert 過渡到 cert-manager,請完成以下步驟:

  1. 完成安裝 cert-manager的步驟,包括停用 auto-cert。

  2. 完成此頁面上的步驟 1-3,以產生 Operator 的憑證授權單位。

  3. 當您到達此頁面上的安裝步驟時,請改為以 cert-manager 發出的憑證取代現有的 Operator TLS 憑證。

  4. 為每個租戶建立新的 cert-manager 憑證,類似於租戶的 cert-manager頁面所述的步驟。

  5. 將 MinIO Operator 命名空間中租戶的密鑰,替換為與每個租戶的 cert-manager 發出憑證相關的密鑰。

後續步驟

設定MinIO 租戶的 cert-manager