无法将NodeJs应用程序与在Minikube中运行的Postgres连接

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

我开始掌舵以进行Kubernetes的部署,并且在将Nodejs应用程序与postgres DB连接时陷入困境。我正在使用头盔进行向K8的部署。

下面是我要申请的YAML文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ template "service-chart.fullname" . }}-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: {{ template "service-chart.fullname" . }}-converstionrate
  template:
    metadata:
      labels:
        app: {{ template "service-chart.fullname" . }}-converstionrate
    spec:
      containers:
        - name: {{ template "service-chart.fullname" . }}-converstionrate
          image: <application_image>
          env:
            - name: DB_URL
              value: postgres://{{ template "postgres.fullname" . }}.default.svc.cluster.local:5432/{{ .Values.DbName }}

---

kind: Service
apiVersion: v1
metadata:
  name: {{ template "service-chart.fullname" . }}-service
spec:
  type: NodePort
  selector:
    app: {{ template "service-chart.fullname" . }}-converstionrate
  ports:
    - port: 8080
      targetPort: 3000

下面是我使用postgres依赖项的需求文件

dependencies:
  - name: postgresql
    version: "8.1.2"
    repository: "https://kubernetes-charts.storage.googleapis.com/"

下面是我尝试连接到数据库的应用程序代码:-

if (config.use_env_variable) {
  // sequelize = new Sequelize(process.env[config.use_env_variable], config);
  sequelize = new Sequelize(
    process.env.POSTGRES_HOST,
    process.env.POSTGRES_USER,
    process.env.POSTGRES_PASSWORD,
    pocess.env.POSTGRES_DIALECT
  );
} else {
  sequelize = new Sequelize(
    config.database,
    config.username,
    config.password,
    config
  );
}

我无法理解的是,如何连接到数据库,而上述是我无法做到的??任何人都可以在这里帮助我吗?

我是掌舵的新手,因此无法弄清楚。我研究了很多博客,但是有些不清楚如何完成。由于数据库正在一个POD中运行,而节点应用程序在另一个POD中运行,那么如何将其连接在一起?如何设置要使用的Yaml中DB的env变量?

FYI ---我现在正在使用minikube进行部署。

应用程序代码可用:-在https://github.com/Vishesh30/Node-express-Postgress-helm

谢谢,Vishesh。

postgresql kubernetes kubernetes-helm
1个回答
0
投票

正如@David Maze提到的,您需要将变量名从DB_URL固定为POSTGRES_HOST,但我还能看到其他一些内容。

我试图为您重现场景,并且为我提供了以下作品:

您需要从YAML文件中修复服务dns:

postgres://{{ template "postgres.fullname" . }}.default.svc.cluster.local:5432/{{ .Values.DbName }}

to

postgres://{{ template "postgresql.fullname" . }}-postgresql.default.svc.cluster.local:5432/{{ .Values.DbName }}

[之后,您需要将数据库的主机名,数据库用户名和密码传递给您的应用程序,您可以按照Helm documentaion中的说明,将其覆盖PostgreSQL默认变量(因为它是应用程序的子图),然后注入您使用环境变量进行容器。

有很多变量,请参见此处。

将此值添加到您values.yaml中以覆盖PostgreSQL默认值:

postgresql:
  postgresqlUsername: dbuser 
  postgresqlPassword: secret # just for example

您可以创建一个秘密文件来存储密码:

service-chart / templates / secrets.yaml

apiVersion: v1
kind: Secret
metadata:
  name: dbconnection
type: Opaque
stringData:
  POSTGRES_PASSWORD: {{ .Values.postgresql.postgresqlPassword }

如果您不想将密码保留在文件中,也许可以在部署之前尝试一些自动化过程>重写您的文件。您可以阅读有关机密here.]的更多信息>

现在在deployment.yaml中添加变量,将从POSTGRES_USERNAME文件中获取values.yaml,并将值添加到POSTGRES_PASSWORD

          env:
            - name: POSTGRES_HOST 
              value: postgres://{{ template "postgresql.fullname" . }}-postgresql.default.svc.cluster.local:5432/{{ .Values.DbName }}
            - name: POSTGRES_USERNAME
              value: {{ .Values.postgresql.postgresqlUsername }}
            - name: POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: dbconnection
                  key: POSTGRES_PASSWORD

部署后,您可以检查容器的环境变量。

我真的希望它能对您有所帮助!

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