安装 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 之前,必须配置一个有效的颁发者。
安装或配置某种颁发者,该颁发者将用于在您的信任域中签署证书请求资源。
如果您希望使用命名空间范围的颁发者,则必须在将从其挂载卷的每个命名空间中创建它。
您必须使用与使用自定义 URI SAN 签署证书兼容的颁发者类型。ACME 颁发者通常不起作用,自签名颁发者也不合适。
可以在 csi-driver-spiffe 存储库 中找到一个示例演示 集群颁发者。
⚠️ 此信任域的根 CA 由 cert-manager 生成,**私钥存储在集群中**!
这可能不适合生产部署,具体取决于您的威胁模型。
我们还将使用 cmctl 来批准证书请求,因为默认审批器在上面已被禁用。
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 安装到集群中。我们还必须配置我们配置的颁发者资源类型和名称,以便审批器拥有 批准引用证书请求的权限。
安装方式略有不同,具体取决于您是否希望使用运行时配置,建议您使用运行时配置。
使用运行时配置
首先,在安装命名空间中创建一个包含要使用的颁发者详细信息的配置映射。
颁发者不必在 pod 尝试挂载 csi-driver-spiffe 之前存在。
配置映射的名称在安装时传递到 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
)被显式设置为为空,这意味着将仅使用运行时配置。
如果希望在运行时配置配置映射无效或被删除的情况下回退到该颁发者,则可以设置默认颁发者值。
不使用运行时配置
请注意,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 文档。