【问题标题】:Spring boot log secret.yaml from helm来自 helm 的 Spring Boot 日志 secret.yaml
【发布时间】:2018-08-24 17:51:25
【问题描述】:

我开始使用 helm。我已经定义了部署、服务、configMap 和秘密 yaml 文件。

我有一个简单的带有基本 http 身份验证的 Spring Boot 应用程序,用户名和密码在机密文件中定义。

我的应用部署正确,在浏览器中测试时提示用户名和密码错误。

有没有办法知道 spring boot 从 helms 接收到的值是什么?

或者有没有办法解密secret.yaml文件?

values.yaml

image:
  repository: myrepo.azurecr.io
  name: my-service
  tag: latest 

replicaCount: 1

users:
  - name: "admin"
    password: "admintest"
    authority: "admin"
  - name: "user-test"
    password:  "usertest"
    authority: "user"

spring:
  datasource:
    url: someurl
    username: someusername
    password: somepassword
    platform: postgresql

secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: {{ .Release.Name }}-{{ .Chart.Name }}-secret
stringData:
  spring.datasource.url: "{{ .Values.spring.datasource.url }}"
  spring.datasource.username: "{{ .Values.spring.datasource.username }}"
  spring.datasource.password: "{{ .Values.spring.datasource.password }}"
  spring.datasource.platform: "{{ .Values.spring.datasource.platform }}"  
  {{- range $idx, $user := .Values.users }}
  users_{{ $idx }}_.name: "{{ $user.name }}"
  users_{{ $idx }}_.password: "{{ printf $user.password }}"
  users_{{ $idx }}_.authority: "{{ printf $user.authority }}"
  {{- end }}

【问题讨论】:

    标签: spring-boot kubernetes-helm


    【解决方案1】:

    secret.yaml 文件中的密钥通常不会被加密,只是用 base64 编码。所以你可以在https://www.base64decode.org/这样的工具中解码秘密的内容,如果你可以访问kubernetes仪表板,它还提供了一种查看秘密值的方法。

    如果您以environment variables 的形式注入秘密,那么您可以找到带有kubeclt get pods 的pod,然后kubectl describe pod <pod_name> 将包含注入哪些环境变量的输出。

    使用 helm 我发现运行 helm install --dry-run --debug 非常有用,因为您可以在控制台中确切地看到将从该安装模板创建的 kubernetes 资源。

    【讨论】:

    • 很奇怪,我打印了秘密文件中的值。它具有预期的凭据,但我仍然无法访问应用程序,它再次询问用户名和密码。我将使用测试值添加我的 value.yaml 和 secret.yaml
    • secrets 是作为环境变量注入还是用于制作挂载在 Pod 中的属性文件?无论哪种方式,您都可以 kubectl exec -it <pod_name> -- /bin/bash 进入 pod 并使用 shell 查看它看到的内容(通过回显 env var 或在文件上执行 more)。尽管如果它在启动过程中失败,那么您可能只有一个短暂的执行窗口。您可以通过临时硬编码为自己争取更多执行时间,以确保它启动并让您自己进行更多调试。
    • 我对shell不是很熟悉,我运行命令但是我应该执行哪些命令?或者你能给我提供一个链接参考来检查吊舱。这些值作为属性文件的变量注入,我的 application.properties 文件具有与机密相同的值(数据库凭据和用户名/密码)。你能建议我一些调试技术吗?我应该在哪里调试?
    • 如果它从 values.yaml 进入您的属性文件,那么您需要在 Pod 中安装属性文件。这意味着您的部署资源应该包含一个挂载到/configvolumeMounts 部分和一个引用秘密的volumes 部分。我会先检查一下。 (您可以在dzone.com/articles/… 的“将游戏带到 Minikube”中找到对此的一些解释,但请注意,这是一个 configmap 示例,因此秘密的语法略有不同)。在 q 中包含卷和挂载会很酷。
    • 一旦你运行了kubectl exec -it <pod_name> -- /bin/bash,那么你应该可以运行cd /config然后more application.properties。对于挂载秘密的语法 - kubernetes.io/docs/concepts/configuration/secret/…
    猜你喜欢
    • 2019-04-06
    • 2018-03-15
    • 2023-03-08
    • 2022-10-20
    • 1970-01-01
    • 2018-05-18
    • 2021-08-31
    • 2020-12-30
    • 1970-01-01
    相关资源
    最近更新 更多