如何使用Helm和Kubernetes从应用程序连接Postgresql?

问题描述 投票:0回答:2

我为在--dev namespace中部署的应用程序如何连接到postgreSQL数据库(该数据库我使用带有--database namespace的头盔独立部署)真的很挣扎。我到目前为止所做的如下。

数据库和myapp部署了不同的名称空间。我只是从一些示例中复制了名称PGHOST,PGPASSWORD,但是我不确定应该在哪里使用该名称,并且在postgreSQL中的某个位置必须与之相同吗?

我还应该注意连接数据库的其他事情吗,或者还有什么不是最佳实践?我应该在jdbc url中添加一个名称空间吗?

在本地,我们使用以下参数连接到数据库,但是通过头盔部署应用程序后应该采用什么方式?我们正在使用sequelize作为客户端库

const connectionString = postgres://${global.config.database_username}:${global.config.database_password}@${global.config.database_host}:${global.config.database_port}/${global.config.database_name};

postgres值

## Specify PGDATABASE
##
DBName: db

部署Postgres之后;

  # of replicas: 3
  service name:  my-postgres-postgresql-helm
  service port:  64000
  database name: db
  database user: admin
  jdbc url:      jdbc:postgresql://my-postgres-postgresql-helm:port

deployment.yaml

        - name: PGHOST
          valueFrom:
            configMapKeyRef:
              name: {{ .Release.Name }}-configmap
              key: jdbc-url
        - name: PGDATABASE
          value: {{ .Values.postgres.database name | quote }}
        - name: PGPASSWORD
          value: "64000"
        - name: POSTGRES_PASSWORD
          valueFrom:
            secretKeyRef:
              name: {{ template "my-mp.name" . }}
              key: POSTGRES_PASSWORD

configmaps.yaml

apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-configmap
    labels:
        app.kubernetes.io/name: {{ include "my-mp.name" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        app.kubernetes.io/managed-by: {{ .Release.Service }}
        helm.sh/chart: {{ include "my-mp.chart" . }}
data:
  jdbc-url: jdbc:postgresql://my-postgres-postgresql-helm..

values.yaml

postgres:
  service name:  my-postgres-postgresql-helm
  service port:  64000
  database name: db
  database user: admin
postgresql kubernetes kubernetes-helm
2个回答
1
投票

这是您关于jdbc网址jdbc网址:jdbc:postgresql://my-postgre的错字吗?您已经提到服务名称为my-postgres-postgresql-helm,因此jdbc url应该类似于:jdbc:postgresql://my-postgres-postgresql-helm.database。注意服务名称后面的.database!由于您的应用程序容器在不同的名称空间中运行,因此应在服务名称的末尾附加名称空间名称。如果它们位于同一名称空间中,则不需要它。

现在,如果不能解决问题,请调试问题,如果您是我,这就是我要做的事情:

  1. 检查是否有任何在名称空间级别增加限制的NetworkPolicies;这仅允许特定名称空间甚至Pod之间的流量,这可能阻止来自应用程序Pod的流量到达postgres Pod。
  2. 确保您的Postgres Pod服务正确无误。也就是说,在描述服务时应将Pod的IP列为端点。如果没有,请检查服务的标签选择器,并确保它使用与postgres pod相同的标签。
  3. 执行到您的Pod中,并检查您的应用程序Pod是否能够通过nslookup使用服务名称即my-postgres-postgresql-helm.database来访问该服务。

如果所有这些测试都是肯定的并且可行,那么很可能是其他一些配置问题。让我知道这是否可以解决您的问题和总帐。


0
投票

如果我理解正确,则数据库和应用程序位于不同的名称空间中,而名称空间的重点是隔离。如果确实需要访问它,则可以使用DNS自动生成的条目servicename.namespace.svc.cluster.local

© www.soinside.com 2019 - 2024. All rights reserved.