使用 K8s configmaps 传递应用程序配置

问题描述

如何使用 application.propertiesconfigmaps 传递给 Spring 启动应用程序。由于 application.yml 文件包含敏感信息,因此需要传入 secretsconfigmaps在这种情况下,我们必须将敏感和非敏感配置数据传递给 Spring 引导 Pod 的选项是什么。 我目前正在使用 Spring 云配置服务器,Spring 云配置服务器可以使用 encrypt.key 加密敏感数据并解密密钥。

解决方法

@paltaa 描述的 ConfigMaps 可以解决非敏感信息的问题。对于敏感信息,我会使用 sealedSecret

Sealed Secrets 由两部分组成:

  • 集群端控制器/操作员
  • 客户端实用程序:kubeseal

kubeseal 实用程序使用非对称加密来加密只有控制器才能解密的机密。

这些加密的秘密被编码在一个 SealedSecret 资源中,您可以将其视为创建秘密的秘诀。

安装后,您可以照常创建您的秘密,然后您可以:

kubeseal --format=yaml < secret.yaml > sealed-secret.yaml

你可以安全地将你的sealedSecret推送到github等

这个普通的 kubernetes secret 将在几秒钟后出现在集群中,您可以像使用直接创建的任何 secret 一样使用它(例如,从 Pod 中引用它)。

,

您可以将 Secret 挂载为卷,与 ConfigMap 相同。例如:

创建秘密。

kubectl create secret generic ssh-key-secret --from-file=application.properties

然后将其挂载为卷:

apiVersion: v1
kind: Pod
metadata:
  name: secret-test-pod
  labels:
    name: secret-test
spec:
  volumes:
  - name: secret-volume
    secret:
      secretName: ssh-key-secret
  containers:
  - name: ssh-test-container
    image: mySshImage
    volumeMounts:
    - name: secret-volume
      readOnly: true
  mountPath: "/etc/secret-volume"

https://kubernetes.io/docs/concepts/configuration/secret/ 中的更多信息