linux怎么查看本机内存大小
221
2022-09-29
在AKS中通过CSI Driver mount key vault中的secret
这篇文章要介绍什么,应该在标题中就能看出来了,这篇主要是介绍如何在AKS中将Azure Key Vault中的secret mount到storage中,这种场景应该算是非常标准的安全设计了,像是一些比较隐秘的信息一般都推荐放在Key Vault里,这样会比较安全,举个例子,数据库或者应用的username和pwd,放在Key Vault中,然后让pod自动读取key vault中的信息,这样可以最大程度避免信息泄露的风险
而如果想实现这点的话,就需要用到今天介绍的内容,主要其实是通过CSI driver来实现的,以前这东西叫Flex Volume,获取secret中的内容肯定是需要有权限的,而拿到授权的方式其实有很多种,包括service principal,pod identity,vmss identity等多种,本次主要用的是service principal的方式
首先大概介绍下需要准备的内容,大致包含这么多东西
一个AKS Cluster一个SP,以及对应的client id和pwd一个Key Vault,在Key Vault里配置一些secret添加Access Policy给SP授权访问secret部署用的yaml文件
创建cluster,service principal(SP)以及key vault的步骤就不介绍了
直接上干活,首先看下key vault中预配了以下的secret
现在添加一个access policy,给service principal授予secret的get,list权限
之后先在K8S上创建一个secret,这个secret会包含service principal的id和pwd,csi driver会读取这个secret然后通过service principal的id和pwd拿到token,进而拉取key vault里的secret
kubectl create secret generic keyvaultsecret --from-literal clientid=
接下来开始准备部署用的yaml文件,yaml文件主要有两个
SecretProviderClass yaml,用于描述要获取的secret以及通过哪种方式获取secretApp yaml,常规应用部署的yaml,包含mountpath以及使用的secret
SecretProviderClass yaml
apiVersion: secrets-store.csi.x-k8s.io/v1kind: SecretProviderClassmetadata: name: "spc-keyvault" namespace: "default" spec: provider: azure parameters: usePodIdentity: "false" useVMManagedIdentity: "false" userAssignedIdentityID: "***" # Service Principal ID keyvaultName: "mxyvault" objects: | array: - | objectName: username objectType: secret - | objectName: userpwd objectType: secret tenantId: "****" # tenant ID
App yaml
apiVersion: apps/v1kind: Deploymentmetadata: labels: app: apachesecret name: apachesecretspec: replicas: 2 selector: matchLabels: app: apachesecret strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 type: RollingUpdate template: metadata: labels: app: apachesecret name: apachesecret spec: containers: - image: ***** livenessProbe: path: / port: 80 initialDelaySeconds: 30 periodSeconds: 20 timeoutSeconds: 10 failureThreshold: 3 imagePullPolicy: Always name: apachesecret volumeMounts: - mountPath: "/mnt/secrets-store" name: secrets-store-inline readOnly: true volumes: - csi: driver: secrets-store.csi.k8s.io nodePublishSecretRef: name: keyvaultsecret readOnly: true volumeAttributes: secretProviderClass: "spc-keyvault" name: "secrets-store-inline"
这样一个简单的demo就搞差不多了,接下来在部署之前,需要先给AKS开启add on,否则secret provider class这个resource是不会被识别的
az aks enable-addons --addons azure-keyvault-secrets-provider --name myAKSCluster --resource-group myResourceGroup
接下来就可以开始部署了
kubectl apply -f "D:\UserData\Desktop\ApacheSecretProviderClassyml.yaml"kubectl apply -f "D:\UserData\Desktop\ApacheSecretDeployment.yml"
可以看到pod已经跑起来了
kubectl get po
而进到pod里,也可以看到secret已经成功pull下来了
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~