【发布时间】:2022-10-23 19:06:30
【问题描述】:
在我的 Kubernetes 集群中,我有一个 ConfigMap 对象,其中包含我的 Postgres pod 的地址。它是使用以下 YAML 创建的:
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-configmap
data:
database_url: postgres-service
现在我在我的部署配置之一中引用了这个值:
env:
- name: DB_ADDRESS
valueFrom:
configMapKeyRef:
name: postgres-configmap
key: database_url
此部署是一个旨在与数据库通信的 Spring Boot 应用程序。因此它从 DB_ADDRESS 环境变量中读取数据库的 URL。 (忽略默认值,仅在开发期间使用)
datasource:
url: ${DB_ADDRESS:jdbc:postgresql://localhost:5432/users}
username: ${POSTGRES_USER:postgres}
password: ${POSTGRES_PASSWORD:mysecretpassword}
因此,根据日志,问题在于地址必须具有 jdbc:postgresql:// 前缀。无论是在 ConfigMap 的 YAML 中还是在 application.yml 中,我都需要将前缀协议字符串与变量连接起来。知道如何在 yml 中执行此操作或建议其他解决方法吗?
【问题讨论】:
-
你为什么不把完整的数据库 url 放在你的 ConfigMap 中呢?
-
@larsks 好吧,我猜在 ConfigMap 中,“postgres-service”值会被 Kubernetes 动态替换,具体取决于 Postgres pod 实际拥有的 ClusterIP。
-
这根本不是服务和配置映射的工作方式(除非您使用的是您的问题中没有提到的某种自动化)。首先,您需要为您的 postgres Pod 创建一个 Service。然后将 ConfigMap 中的
database_url设置为jdbc:postgresql://postgreshost:5432/users,除了将postgreshost替换为姓名您为 postgres 服务创建的服务资源。
标签: postgresql spring-boot kubernetes yaml environment-variables