来自K8s部署文件的Postgres DB URL字符串



我试图从自定义的helm图表到azure上完全管理的Postgres服务联系,然后我必须根据我要部署的应用程序将url连接字符串。

我想问哪个值应该是DATABASE_URL在掌舵图部署?我的情况如下:

  • 我想使用一个外部Azure管理的PostgreSQL,而不是附带的PostgreSQL容器。因此,我修改了DATABASE_URL值,这里给出连接到K8s内的容器,我这样修改:
name: DATABASE_URL
# value: "postgres://{{ .Values.postgresql.postgresqlUsername }}:$(POSTGRESQL_PASSWORD)@{{ .Release.Name }}-postgresql"
value: "postgres://nmbrs@postgresql-nmb-psfc-stag:$(POSTGRESQL_PASSWORD)@postgresql-nmb-psfc-stag.postgres.database.azure.com/postfacto-staging-db"

但是我得到这个错误

/usr/local/lib/ruby/2.7.0/uri/generic.rb:208:in `initialize': the scheme postgres does not accept registry part: nmbrs@postgresql-nmb-psfc-stag:mypassword*@postgresql-nmb-psfc-stag.postgres.database.azure.com (or bad hostname?) (URI::InvalidURIError)

哪一个应该是真正的DATABASE_URL值,如果我想联系到一个完整的Postgres管理的服务?

哪个与这个相等?:

value: "postgres://{{ .Values.postgresql.postgresqlUsername }}:$(POSTGRESQL_PASSWORD)@{{ .Release.Name }}-postgresql"

我是说

postgres//<username>:<my-pg-password>@<WHICH VALUE SHOULD BE HERE?>

{{ .Release.Name }}-postgresql"的值是多少?

为了记录,我的自定义postfacto/deployment/helm/templates/deployment.yaml是这个

我改变了这个

的值
- name: DATABASE_URL
# value: "postgres://{{ .Values.postgresql.postgresqlUsername }}:$(POSTGRESQL_PASSWORD)@{{ .Release.Name }}-postgresql"
# value: "postgres://nmbrs@postgresql-nmb-psfc-stag:$(POSTGRESQL_PASSWORD)@postgresql-nmb-psfc-stag.postgres.database.azure.com:5432/postfacto-staging-db"
value: "postgres://postgresql-nmb-psfc-stag.postgres.database.azure.com/postfacto-staging-db"

我得到了一个不同的错误:

Caused by:
PG::ConnectionBad: FATAL:  Invalid Username specified. Please check the Username and retry connection. The Username should be in <username@hostname> format.
FATAL:  Invalid Username specified. Please check the Username and retry connection. The Username should be in <username@hostname> format.

但不清楚应该如何语法格式,因为这篇文章说:

接下来,对数据库凭证进行编码。格式为DB_ADAPTER://USER:PASSWORD@HOSTNAME/DB_NAME。如果你在127.0.0.1上使用mysql,用户名为"deploy",密码为"secret",并且有一个数据库railsapp,运行

格式是DB_ADAPTER://USER:PASSWORD@HOSTNAME/DB_NAME,它和我在开头使用的是一样的

我认为您的连接字符串的问题是,它的用户名有一个特殊字符@,这可能会破坏连接字符串格式并导致验证错误。

你的价值
- name: DATABASE_URL
value: "postgres://nmbrs@postgresql-nmb-psfc-stag:$(POSTGRESQL_PASSWORD)@postgresql-nmb-psfc-stag.postgres.database.azure.com/postfacto-staging-db"

您可以尝试为用户名部分做一个URL编码,如

- name: DATABASE_URL
value: "postgres://nmbrs%40postgresql-nmb-psfc-stag:$(POSTGRESQL_PASSWORD)@postgresql-nmb-psfc-stag.postgres.database.azure.com/postfacto-staging-db"

从我看到的这个helm图表写得很糟糕,并且糟糕地假设了一些事情,例如DATABASE_URL已经构建为仅正确格式化kubernetes posress helm发布,而不是其他。

我的建议是:

  1. 使用helm template功能来本地渲染模板,而不是通过helm在k8s上安装此图表。
  2. 编辑输出的普通清单,以满足您的需求
  3. 去你的Azure DB,并得到它ConnectionString,这取决于你如何管理你的秘密在k8s,传递它到DATABASE_URL环境
  4. 手动应用舱单

相关内容

  • 没有找到相关文章

最新更新