文件

租戶的 cert-manager

以下程序會建立並套用必要的資源,以便在租戶內使用 cert-manager 進行 TLS 憑證管理。

注意

這些程序使用 tenant-1 作為租戶的名稱。

請在整個程序中將字串 tenant-1 替換為您的租戶名稱。

先決條件

1) 建立租戶命名空間 CA 發行者

在部署新租戶之前,請為租戶的命名空間建立憑證授權單位和發行者。

  1. 如有必要,請建立租戶的命名空間。

    kubectl create ns tenant-1
    

    這必須與租戶 YAML 中的 metadata.namespace 欄位的值相符。

  2. 請求一個新的憑證授權單位的憑證,其中 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 以符合您的環境。

  3. 套用資源

    kubectl apply -f tenant-1-ca-certificate.yaml
    

2) 建立 Issuer

Issuer 會在租戶命名空間內發行憑證。

  1. 產生 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
    
  2. 套用 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

  1. 為指定的網域請求 Certificate

    建立一個名為 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 作為命名慣例。

  2. 套用憑證資源

    kubectl apply -f tenant-1-minio-certificate.yaml
    
  3. 驗證變更是否生效

    kubectl describe secret/myminio-tls -n tenant-1
    

    注意

    • tenant-1 替換為您租戶的命名空間。

    • 如果不同,請將 myminio-tls 替換為您的密碼名稱。

4) 使用 cert-manager 部署租戶以進行 TLS 憑證管理

部署租戶時,您必須設定 TLS 設定,以便

  • 租戶不會自動產生自己的憑證 (spec.requestAutoCert: false) 並且

  • 租戶具有有效的 cert-manager 參考 (spec.externalCertSecret)

這會指示 Operator 僅使用 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。

為此,請在 minio-operator 命名空間中建立一個具有前置詞 operator-ca-tls-,後接唯一識別碼的密碼。

MinIO Operator 會掛載並信任由提供的憑證授權單位發行的所有憑證。這是必要的,因為 MinIO Operator 會使用 /minio/health/cluster 端點執行健康檢查。

建立 operator-ca-tls-tenant-1 密碼

將租戶的 cert-manager 產生的 CA 公開金鑰 (ca.crt) 複製到 minio-operator 命名空間。這允許 Operator 信任 cert-manager 發行的 CA 以及由此衍生的所有憑證。

  1. 建立一個包含 CA 的 ca.crt 檔案

    kubectl get secrets -n tenant-1 tenant-1-ca-tls -o=jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
    
  2. 建立密碼

    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 並參考您產生的密碼。