如何使用helm和kubernetes从应用程序连接postgresql?

如何使用helm和kubernetes从应用程序连接postgresql?,postgresql,kubernetes,kubernetes-helm,Postgresql,Kubernetes,Kubernetes Helm,对于部署在--dev namespace中的应用程序如何连接到我使用helm和--database namespace独立部署的postgreSQL数据库,我真的很纠结。到目前为止,我所做的如下 数据库和myapp部署了不同的命名空间。我只是从一些示例中复制了名称PGHOST,PGPASSWORD,但我不确定应该在何处使用此名称,并且在postgreSQL中是否必须使用相同的名称 我是否应该注意连接数据库的其他事项,或者是否存在任何不是最佳做法的事项?我应该向JDBCURL添加名称空间吗 在本地

对于部署在
--dev namespace
中的应用程序如何连接到我使用helm和
--database namespace
独立部署的postgreSQL数据库,我真的很纠结。到目前为止,我所做的如下

数据库和myapp部署了不同的命名空间。我只是从一些示例中复制了名称
PGHOST,PGPASSWORD
,但我不确定应该在何处使用此名称,并且在postgreSQL中是否必须使用相同的名称

我是否应该注意连接数据库的其他事项,或者是否存在任何不是最佳做法的事项?我应该向JDBCURL添加名称空间吗

在本地,我们使用以下参数连接到数据库,但在通过helm部署应用程序后,应该采用什么方式?我们使用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之后; 部署.yaml configmaps.yaml 价值观
如果我理解正确,那么数据库和应用程序在不同的名称空间中,名称空间的重点是隔离。
如果您确实需要访问它,您可以使用DNS自动生成的条目servicename.namespace.svc.cluster.local

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

这是您关于jdbc url的问题中的一个输入错误吗jdbc url:
jdbc:postgresql://my-postgre
?您已经提到,服务名称是
mypostgrespostgresqlhelm
,因此JDBCURL应该类似于:
jdbc:postgresql://my-postgres-postgresql-helm.database
。注意服务名称后面附加的
.database
!由于您的应用程序pod运行在不同的命名空间中,因此应该在服务名称的末尾追加命名空间名称。如果它们在同一名称空间中,您就不需要它了

现在,如果这不能解决问题,为了调试问题,如果我是你,我会这样做:

  • 检查是否存在在命名空间级别添加限制的网络策略;这意味着只允许特定名称空间之间的通信,甚至pod之间的通信,这可能会阻止来自应用程序pod的通信到达postgres pod
  • 确保您为postgres pod提供的服务是正确的。也就是说,描述服务时应将Pod的IP列为端点。如果没有,请检查服务的标签选择器,并确保它使用与postgres pod相同的标签
  • 执行到pod中,并检查应用程序pod是否能够使用服务名称(即
    my postgres postgresql helm.database
    )通过nslookup访问服务

  • 如果所有这些测试都是肯定的并且正常工作,那么很可能是其他一些配置问题。让我知道这是否解决了您的问题和GL。

    这是您关于jdbc url的问题中的输入错误吗jdbc url:
    jdbc:postgresql://my-postgre
    ?您已经提到,服务名称是
    mypostgrespostgresqlhelm
    ,因此JDBCURL应该类似于:
    jdbc:postgresql://my-postgres-postgresql-helm.database
    。注意服务名称后面附加的
    .database
    !由于您的应用程序pod运行在不同的命名空间中,因此应该在服务名称的末尾追加命名空间名称。如果它们在同一名称空间中,您就不需要它了

    现在,如果这不能解决问题,为了调试问题,如果我是你,我会这样做:

  • 检查是否存在在命名空间级别添加限制的网络策略;这意味着只允许特定名称空间之间的通信,甚至pod之间的通信,这可能会阻止来自应用程序pod的通信到达postgres pod
  • 确保您为postgres pod提供的服务是正确的。也就是说,描述服务时应将Pod的IP列为端点。如果没有,请检查服务的标签选择器,并确保它使用与postgres pod相同的标签
  • 执行到pod中,并检查应用程序pod是否能够使用服务名称(即
    my postgres postgresql helm.database
    )通过nslookup访问服务

  • 如果所有这些测试都是肯定的并且正常工作,那么很可能是其他一些配置问题。让我知道这是否解决了您的问题和总账。

    是的,这是一个打字错误。。那么,唯一需要在JDBCURL末尾添加名称空间的事情是什么?实际上,我的问题也是为了澄清我的配置是否一切正常。你有一个postgres pod在端口上接收流量,还有一个服务公开该pod。您的应用程序在其配置中使用服务的主机名(servicename.namespacename)来访问postgres pod。一般来说,这看起来是一个正确的配置。检查名称空间名称,让我知道它是否解决了问题。所以我的困惑是,在应用程序中,ı应该在哪里进行这些更改?在职.yaml?我的postgres postgresql helm数据库。所以,最重要的是,你的应用程序从配置图中获取值时,必须是这样的;postgres数据库的主机名。因此,只需更新configmap,使其具有
    my postgres postgresql helm.数据库
    ,一切都会正常运行,这也是正确的做法。感谢您的回复Amudhan。。实际上,根据您的回答,在postgres values.yaml中指定一个规则,如下入口:-from:-podSelector:matchLabels:app:db。是否应该添加这个标签deployment.yaml和其他yaml或deployment.yaml就足够了?是的,这是一个输入错误。。那么,唯一需要在JDBCURL末尾添加名称空间的事情是什么?实际上,我的问题也是为了澄清我的配置是否一切正常。你有一个postgres pod在端口上接收流量,还有一个服务公开该pod。您的应用程序正在使用t
    ## Specify PGDATABASE
    ##
    DBName: db
    
      # 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
    
            - 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
    
    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..
    
    postgres:
      service name:  my-postgres-postgresql-helm
      service port:  64000
      database name: db
      database user: admin