安裝 cert-manager csi-driver-spiffe
安裝步驟
1. 安裝 cert-manager
csi-driver-spiffe 需要已安裝 cert-manager,但 cert-manager 的預設安裝將無法運作。
⚠️ 至關重要的是,必須在 cert-manager 中停用預設的批准者 ⚠️
如果未停用預設的批准者,csi-driver-spiffe 的批准者將會與 cert-manager 競爭,並且策略執行將會變得無用。
策略執行對於安全使用 csi-driver-spiffe 絕對至關重要。請參閱安全性考量章節以取得更多詳細資訊。
以下範例示範如何重新配置已安裝的 cert-manager (v1.15.0+) 以在沒有自動批准者的情況下執行
# ⚠️ This Helm option is only available in cert-manager v1.15.0 and later.existing_cert_manager_version=$(helm get metadata -n cert-manager cert-manager | grep '^VERSION' | awk '{ print $2 }')helm upgrade cert-manager jetstack/cert-manager \--reuse-values \--namespace cert-manager \--version $existing_cert_manager_version \--set disableAutoApproval=true
2. 設定簽發者/叢集簽發者
如果您使用執行階段組態,則可以延後此步驟,但在 Pod 成功使用 csi-driver-spiffe 取得 SVID 之前,必須設定有效的簽發者。
安裝或設定某種類型的簽發者,該簽發者將用於簽署您信任網域中的 CertificateRequest 資源。
如果您希望使用命名空間範圍的簽發者,則必須在 Pod 將掛載磁碟區的每個命名空間中建立該簽發者。
您必須使用與使用自訂 URI SAN 簽署憑證相容的簽發者類型。ACME 簽發者通常無法運作,而 SelfSigned 簽發者也不適用。
範例示範叢集簽發者可以在 csi-driver-spiffe 儲存庫中找到。
⚠️ 此信任網域的根 CA 是由 cert-manager 產生,且私密金鑰儲存在叢集中!
根據您的威脅模型,這可能不適用於生產部署。
我們也將使用 cmctl 來批准 CertificateRequest,因為預設的批准者已在上方停用。
kubectl apply -f https://raw.githubusercontent.com/cert-manager/csi-driver-spiffe/ed646ccf28b1ecdf63f628bf16f1d350a9b850c1/deploy/example/clusterissuer.yaml# We must also approve the CertificateRequest since we# disabled the default approvercmctl approve -n cert-manager \$(kubectl get cr -n cert-manager -ojsonpath='{.items[0].metadata.name}')
3. 安裝 csi-driver-spiffe
使用我們設定的簽發者將 csi-driver-spiffe 安裝到叢集中。我們也必須設定簽發者的資源類型和我們設定的簽發者名稱,以便批准者具有批准參考 CertificateRequests 的權限。
安裝方式會根據您是否要使用建議的執行階段組態而略有不同。
使用執行階段組態
首先,在安裝命名空間中建立 ConfigMap,其中包含您想要使用的簽發者詳細資訊。
在 Pod 嘗試掛載 csi-driver-spiffe 之前,簽發者不必存在。
ConfigMap 的名稱會在安裝時傳遞至 csi-driver-spiffe。
kubectl create configmap -n cert-manager spiffe-issuer \--from-literal=issuer-name=csi-driver-spiffe-ca \--from-literal=issuer-kind=ClusterIssuer \--from-literal=issuer-group=cert-manager.io
helm upgrade -i -n cert-manager cert-manager-csi-driver-spiffe jetstack/cert-manager-csi-driver-spiffe --wait \--set "app.logLevel=1" \--set "app.trustDomain=my.trust.domain" \--set "app.issuer.name=" \--set "app.issuer.kind=" \--set "app.issuer.group=" \--set "app.runtimeIssuanceConfigMap=spiffe-issuer"
在上述範例中,預設簽發者值 (即 app.issuer.name
、app.issuer.kind
和 app.issuer.group
) 會明確設定為空白,這表示只會使用執行階段組態。
如果執行階段組態 ConfigMap 無效或已刪除,您可以設定預設的簽發者值,以便回復至該簽發者。
不使用執行階段組態
請注意,issuer.name
、issuer.kind
和 issuer.group
將需要變更以符合您實際使用的簽發者!
helm repo add jetstack https://charts.jetstack.io --force-updatehelm upgrade cert-manager-csi-driver-spiffe jetstack/cert-manager-csi-driver-spiffe \--install \--namespace cert-manager \--wait \--set "app.logLevel=1" \--set "app.trustDomain=my.trust.domain" \--set "app.issuer.name=csi-driver-spiffe-ca" \--set "app.issuer.kind=ClusterIssuer" \--set "app.issuer.group=cert-manager.io"
使用方式
📖 請閱讀csi-driver-spiffe 文件。