gpt4 book ai didi

azure - 如何与 Kubernetes 上的 Secrets Store CSI 驱动程序共享所有 Azure KeyVault key 和 secret

转载 作者:行者123 更新时间:2023-12-02 06:40:07 24 4
gpt4 key购买 nike

如何编辑下面的 yaml 文件以获取 Azure KeyVault 中的所有 secret 、 key 、证书,而不是使用数组并在此处键入/写入所有内容?

我只能获取下面列出的 secret 和 key ,但我想分享我的 AKV 中存储的所有数据

apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
metadata:
name: azure-kvname-podid
spec:
provider: azure
parameters:
usePodIdentity: "true"
keyvaultName: "kvname"
cloudName: "" # [OPTIONAL for Azure] if not provided, azure environment will default to AzurePublicCloud
objects: |
array:
- |
objectName: secret1
objectType: secret # object types: secret, key or cert
objectVersion: "" # [OPTIONAL] object versions, default to latest if empty
- |
objectName: key1
objectType: key
objectVersion: ""
tenantId: "tid" # the tenant ID of the KeyVault

reference1 reference2

最佳答案

我使用过一点 Azure CSI,我知道有两种方法。

非常快速的免责声明,因为这似乎正是您所要求的,没有“一句话”可以从 Azure KeyVault 获取您的所有 secret 。这意味着如果您期望“从 AKV 选择 *”而不指定这些 secret / key /证书的特定 ID,那么这个“ secret 存储 CSI”将不是您所期望的。您或多或少必须有一个相当大小的 YAML 文件来让它适用于您的所有 Azure KeyVault secret 。
也就是说,如果您愿意,您可以使用单个命令部署包含 200 个 secret 的非常大的 YAML 文件,这将在下面提到。

因此,我将回顾一下我使用的两种方法的优缺点,并举例说明它们的工作原理。

方法1

优点:YAML 文件更短,所有 AKV secret 都在一个变量中。

缺点:您的所有 AKV secret 都在一个变量中;根据您的应用程序,这可能不起作用。例如,这相当于安装一个卷,并且 Pod 可以访问您告诉它连接到的所有类型的 secret 。

如何实现:实际上,您拥有的示例 YAML 几乎就是如何拥有多个 secret 。只需继续将您希望 Azure CSI 为您注入(inject)的所有 secret 添加到“数组”字段即可,下面是修改后的示例:

apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
metadata:
name: azure-kvname-podid # This ID, is what you use in your Volume Mapping to reference this.
spec:
provider: azure
parameters:
usePodIdentity: "true"
keyvaultName: "kvname"
objects: |
array:
- |
objectName: secret1
objectType: secret
- |
objectName: key1
objectType: key
- |
objectName: your_db_password # So this ID, matches the same ID in your Azure KeyVault (AKV)
objectType: secret # object types: secret, key or cert. There no other types for AKV.
- |
objectName: your_blob_storage_password # So this ID, matches the same ID in your Azure KeyVault (AKV)
objectType: secret # object types: secret, key or cert. There no other types for AKV.
- |
objectName: even_more_secrets_in_your_AKV # So this ID, matches the same ID in your Azure KeyVault (AKV)
objectType: secret # object types: secret, key or cert. There no other types for AKV.
tenantId: "tid" # the tenant ID of the KeyVault

方法2

优点:您的 secret 被分解为各个变量,使您的部署能够灵活地选择将哪些 secret 附加到哪个 Pod

缺点:这将是一个非常长的 YAML 文件,并且有很多重复的字段。也就是说;这本质上是使用单行来部署所有 secret ,使用 "kubectl apply -f <FILE_NAME>.yaml --namespace=<NAMESPACE>"

如何实现:这几乎是复制/粘贴你所拥有的内容,只是分成多个部分。因此,下面是 5 个 AKV key 的示例,这些 key 分为 5 个单独的变量,可以在您的应用程序中批量安装:

apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
metadata:
name: akv-secret1 # This ID, is what you use in your Volume Mapping to reference this.
spec:
provider: azure
parameters:
usePodIdentity: "true"
keyvaultName: "kvname"
objects: |
array:
- |
objectName: secret1
objectType: secret
tenantId: "tid" # the tenant ID of the KeyVault
---
apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
metadata:
name: akv-secret2 # This ID, is what you use in your Volume Mapping to reference this.
spec:
provider: azure
parameters:
usePodIdentity: "true"
keyvaultName: "kvname"
objects: |
array:
- |
objectName: secret2
objectType: secret
tenantId: "tid" # the tenant ID of the KeyVault
---
apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
metadata:
name: akv-secret3 # This ID, is what you use in your Volume Mapping to reference this.
spec:
provider: azure
parameters:
usePodIdentity: "true"
keyvaultName: "kvname"
objects: |
array:
- |
objectName: secret3
objectType: secret
tenantId: "tid" # the tenant ID of the KeyVault
---
apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
metadata:
name: akv-secret4 # This ID, is what you use in your Volume Mapping to reference this.
spec:
provider: azure
parameters:
usePodIdentity: "true"
keyvaultName: "kvname"
objects: |
array:
- |
objectName: secret4
objectType: secret
tenantId: "tid" # the tenant ID of the KeyVault
---
apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
metadata:
name: akv-secret5 # This ID, is what you use in your Volume Mapping to reference this.
spec:
provider: azure
parameters:
usePodIdentity: "true"
keyvaultName: "kvname"
objects: |
array:
- |
objectName: secret5
objectType: secret
tenantId: "tid" # the tenant ID of the KeyVault

关于azure - 如何与 Kubernetes 上的 Secrets Store CSI 驱动程序共享所有 Azure KeyVault key 和 secret ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64777149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com