如何在Kubernetes微服务YAML中使用HashiCorp Vault注入的密钥
在微服务YAML中使用Vault注入的密钥
方式1:通过环境变量直接引用
Vault注入密钥后会在K8s集群中生成对应的Secret资源,你可以在微服务的Deployment/StatefulSet配置里,直接通过secretKeyRef把password密钥映射成环境变量:
containers: - name: 你的微服务容器名 image: 你的服务镜像:版本 env: - name: DB_PASSWORD # 自定义环境变量名,服务代码里用这个名字取值 valueFrom: secretKeyRef: name: <Vault生成的Secret名称> # 可通过`kubectl get secrets`查询,通常和Pod名关联 key: password # 对应Vault里的password密钥
方式2:通过卷挂载读取文件
如果Vault采用卷挂载模式注入密钥,密钥会被写入Pod内的/vault/secrets目录(默认路径),每个密钥对应一个同名文件。你可以让服务代码直接读取/vault/secrets/password文件的内容,也可以在YAML里把文件内容转成环境变量:
containers: - name: 你的微服务容器名 image: 你的服务镜像:版本 env: - name: DB_PASSWORD valueFrom: secretKeyRef: name: <Vault生成的Secret名称> key: password # 如果需要手动挂载(通常Vault Injector会自动处理),可添加以下配置 volumeMounts: - name: vault-secrets mountPath: /vault/secrets readOnly: true volumes: - name: vault-secrets secret: secretName: <Vault生成的Secret名称>
Helm Chart里的统一配置建议
因为你用Helm管理8个微服务,建议把Vault相关配置抽离到values.yaml中,方便统一维护:
# values.yaml vault: secretName: "app-vault-secret" # 所有服务共用的Vault Secret名称,也可按服务单独配置
然后在微服务的Deployment模板中引用:
# templates/deployment.yaml env: - name: DB_PASSWORD valueFrom: secretKeyRef: name: {{ .Values.vault.secretName }} key: password
确认Vault生成的Secret名称
如果不知道Secret名称,可在集群中执行命令查询:
kubectl get secrets | grep <你的Pod名称前缀>
内容的提问来源于stack exchange,提问作者Veli Şenol
相关产品推荐
相关产品推荐

