简体   繁体   English

将 docker 中的 Postgres 数据库连接到 Kubernetes 中的应用程序

[英]connect Postgres database in docker to app in Kubernetes

I'm new with Kubernetes and I try to understand how to connect Postgres database which is outside from Kubernetes (exactly in docker with ip address 172.17.0.2 and port 5432) to my webapp in Kubernetes. I'm new with Kubernetes and I try to understand how to connect Postgres database which is outside from Kubernetes (exactly in docker with ip address 172.17.0.2 and port 5432) to my webapp in Kubernetes.

I try connect database through env variable PS_DATABASE_URL in Deployment section.我尝试通过部署部分中的环境变量PS_DATABASE_URL连接数据库。

But it cannot find mentioned url for postgres.但它找不到提到的 url 用于 postgres。 How it need to be done correctly?需要如何正确完成?

webapp.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-deployment
  labels:
    app: webapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: dmitriy83/flask_kuber
        ports:
        - containerPort: 5000
        env:
          - name: PS_DATABASE_URL
            value: postgresql://postgres:password@172.17.0.2:5432/db
---
apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  type: NodePort
  selector:
    app: webapp
  ports:
    - protocol: TCP
      port: 5000
      targetPort: 5000
      nodePort: 30100

I figured it out.我想到了。 it depends from cloud provider.它取决于云提供商。 For this example i use amazon cloud and to connect database on amazon (this is external service).对于这个例子,我使用亚马逊云并连接亚马逊上的数据库(这是外部服务)。 So we must define it in yaml file like an external service.所以我们必须像外部服务一样在 yaml 文件中定义它。

postgres_external.yaml

kind: Service
apiVersion: v1
metadata:
  name: postgres
spec:
  type: ExternalName
  externalName: db.cdmhjidhpqyu.us-east-2.rds.amazonaws.com

to connect to external service you need to link to it on deployment.要连接到外部服务,您需要在部署时链接到它。

webapp.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-deployment
  labels:
    app: webapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: dmitriy83/flask_kuber
        ports:
        - containerPort: 5000
        env:
          - name: PS_DATABASE_URL
            value: postgresql://<username>:<password>@postgres:5432/db
---
apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  type: NodePort
  selector:
    app: webapp
  ports:
    - protocol: TCP
      port: 5000
      targetPort: 5000
      nodePort: 30100

Please note in webapp.yaml, env section value value: postgresql://<username>:<password>@postgres:5432/db contains postgres - this is name of our external service which we define in postgres_external.yaml Please note in webapp.yaml, env section value value: postgresql://<username>:<password>@postgres:5432/db contains postgres - this is name of our external service which we define in postgres_external.yaml

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM