我试图从自定义的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发布,而不是其他。
我的建议是:
- 使用
helm template
功能来本地渲染模板,而不是通过helm在k8s上安装此图表。 - 编辑输出的普通清单,以满足您的需求
- 去你的Azure DB,并得到它
ConnectionString
,这取决于你如何管理你的秘密在k8s,传递它到DATABASE_URL
环境 - 手动应用舱单