租戶的 cert-manager
以下程序會建立並套用必要的資源,以便在租戶內使用 cert-manager 來進行 TLS 憑證管理。
注意
程序使用 tenant-1
作為租戶的名稱。
在整個程序中,請將字串 tenant-1
替換為您的租戶名稱。
先決條件
已安裝 kustomize
kubectl
存取您的k8s
叢集完成 設定 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 提供商以獲取更多資訊。
租戶名稱
是在 Tenant YAML 的metadata.name
中提供給租戶的名稱。在本例中,它是myminio
。命名空間
是先前建立的值,租戶將安裝在此值中。在租戶 YAML 中,它在metadata.namespace
欄位中定義。在本例中,它是tenant-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
欄位中的 secret 命名為<租戶名稱>-tls
。套用憑證資源
kubectl apply -f tenant-1-minio-certificate.yaml
驗證變更是否生效
kubectl describe secret/myminio-tls -n tenant-1
注意
將
tenant-1
替換為您租戶的命名空間。如果您的 secret 名稱不同,請將
myminio-tls
替換為您的 secret 名稱。
4) 使用 cert-manager 部署租戶以進行 TLS 憑證管理
部署 Tenant 時,您必須設定 TLS 配置,使其滿足以下條件:
Tenant 不會自動產生自己的憑證 (
spec.requestAutoCert: false
) 並且Tenant 具有有效的 cert-manager 參照 (
spec.externalCertSecret
)
這會指示 Operator 僅使用 cert-manager 憑證部署 Tenant。
以下 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,您必須將憑證作為 secret 傳遞給 Operator。
若要執行此操作,請在 minio-operator
命名空間中建立一個以 operator-ca-tls-
為首碼,後接唯一識別碼的 secret。
MinIO Operator 會掛載並信任由提供的憑證授權單位發行的所有憑證。這是必要的,因為 MinIO Operator 使用 /minio/health/cluster
端點執行健康檢查。
建立 operator-ca-tls-tenant-1
secret
將租戶的 cert-manager 產生的 CA 公開金鑰 (ca.crt
) 複製到 minio-operator
命名空間。這允許 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
建立 secret
kubectl create secret generic operator-ca-tls-tenant-1 --from-file=ca.crt -n minio-operator
提示
在本例中,我們選擇的 secret 名稱為 operator-ca-tls-tenant-1
。我們使用租戶命名空間 tenant-1
作為後綴,以便輕鬆識別 CA 來自哪個命名空間。使用您租戶命名空間的名稱,以便更輕鬆地將 secret 連結到相關資源。
6) 部署租戶
在租戶命名空間中設定好憑證授權單位和 Issuer
後,您現在可以部署物件儲存租戶。
使用修改後的基準租戶 YAML 停用 AutoCert 並參照您產生的 secret。