【问题标题】:How to add protocol prefix in Kubernetes ConfigMap如何在 Kubernetes ConfigMap 中添加协议前缀
【发布时间】: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


【解决方案1】:

如果您创建一个Service,它将为您提供一个主机名(服务的名称),然后您可以在 ConfigMap 中使用该主机名。例如,如果您创建一个名为 postgres 的服务,那么您的 ConfigMap 将如下所示:

apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-configmap
data:
  database_url: jdbc:postgresql://postgres:5432/users

【讨论】:

    【解决方案2】:

    Kubernetes 环境变量声明可以embed the values of other environment variables。这是 Kubernetes 唯一支持的字符串操作,它几乎只适用于 env: 块。

    对于此设置,一旦您从 ConfigMap 检索到数据库主机名,您就可以将其嵌入到更完整的 SPRING_DATASOURCE_URL 环境变量中:

    env:
     - name: DB_ADDRESS
       valueFrom:
         configMapKeyRef:
           name: postgres-configmap
           key: database_url
     - name: SPRING_DATASOURCE_URL
       value: 'jdbc:postgresql://$(DB_ADDRESS):5432/users'
    

    您可以类似地参数化端口(尽管它几乎总是标准端口 5432)和数据库名称。避免将这些设置放在 Spring 配置文件 YAML 文件中,如果任何部署时设置发生更改,您将不得不在其中重新构建应用程序。

    【讨论】:

      猜你喜欢
      • 2012-12-12
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 2014-05-12
      相关资源
      最近更新 更多