在AKS中结合pod identity以及CSI Driver mount key vault中的secret

网友投稿 216 2022-09-29

在AKS中结合pod identity以及CSI Driver mount key vault中的secret

在之前一篇文章中有介绍过在AKS里如何通过CSI driver这个add on,将secret自动mount到pod中,通过将secret放到key vault中让应用程序自动获取,可以很好地保护一些机密信息的安全

​​在AKS中通过CSI Driver mount key vault中的secret​​

但是这种做法有一个小小问题,就是之前我们是用service principal mount的secret,这要求我们需要在AKS上创建一个secret,里边存放service principal的id和pwd,一般情况下如果AKS是由负责运维的team统一管理,应用团队没有权限的话,这种做法不会有什么问题,但是如果应用团队也有AKS权限,这样就不怎么好了,因为有可能应用团队的人可能会有权限查看到secret里的值

所以为了避免这种情况,我们还可以使用pod identity结合​managed service identity一起把所有获取token的步骤完全交给后台Azure完成,在前端不需要有任何明显的pwd这种痕迹​

​下边来看下具体做法,这个demo要求的前置条件比较多,如果本文没写到的步骤,可以参考以下两篇文章​

​​在AKS中通过CSI Driver mount key vault中的secret​​

​​在AKS中使用pod identity获取token - 实践​​

环境准备:

1. AKS Cluster * 1

2. User assigned managed identity * 1

3. Key Vault * 1

4. Kubectl client * 1

前置条件:

1. 创建好AKS Cluster

2. 创建好Key Vault

3. 在Key Vault中准备好测试用的secret

4. 创建好测试用的User assigned managed identity

5. 为AKS Cluster Enable CSI driver add on

6. 在AKS Cluster 部署pod identity component

实际操作

给identity授权访问secret

​首先先给User assigned managed identity授权访问Key Vault中的secret​

Demo就是个User assigned managed identity

准备yaml文件

接下来就是准备pod identity中的Azure Identity和binding部署文件以及pod的部署文件

​AzureIdentity​

apiVersion: "aadpodidentity.k8s.io/v1"kind: AzureIdentitymetadata: name: spec: type: 0 resourceID: /subscriptions//resourcegroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/ clientID:

​AzureIdentityBinding​

apiVersion: "aadpodidentity.k8s.io/v1"kind: AzureIdentityBindingmetadata: name: spec: azureIdentity: selector:

准备SecretProviderClass的yaml

apiVersion: secrets-store.csi.x-k8s.io/v1kind: SecretProviderClassmetadata: name: azure-kvname-podidspec: provider: azure parameters: usePodIdentity: "true" keyvaultName: "kvname" 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

最后准备测试用的pod yaml

apiVersion: v1kind: Podmetadata: labels: app: podidentitykeyvault aadpodidbinding: keyvaultdemoselector name: podidentitykeyvaultspec: containers: - image: *** livenessProbe: path: / port: 80 initialDelaySeconds: 30 periodSeconds: 20 timeoutSeconds: 10 failureThreshold: 3 imagePullPolicy: Always name: podidentitysecret volumeMounts: - mountPath: "/mnt/secrets-store" name: secrets-store-inline readOnly: true volumes: - csi: driver: secrets-store.csi.k8s.io readOnly: true volumeAttributes: secretProviderClass: "azure-kv-demo" name: "secrets-store-inline"

开始部署

kubectl apply -f .\AzureIdentity.ymlkubectl apply -f .\AzureIdentityBinding.yml

部署的过程不一一赘述了,但是可以看到部署之后,Pod正常跑起来,并且可以获取到secret

azure assigned identity也正常创建了

kubectl get azureassignedidentity

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring中Bean的单例和多例使用说明
下一篇:在AKS中使用pod identity获取token - 解决获取token报错
相关文章

 发表评论

暂时没有评论,来抢沙发吧~