首页 > 解决方案 > 向 GKE 上的部署公开数据库

问题描述

我有一个运行 pod 的部署,该 pod 需要访问我在与 kubernetes 集群相同的集群中运行的 postgres 数据库。如何创建一个服务来选择部署以便它可以访问。随着连接超时,我的 pod 不断重启。我在 vpc 子网中创建了防火墙规则以允许内部通信,并修改了 pg_hba.conf 和 postgresql.conf 我的部署定义如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
  labels: 
    name: server
    app: api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: gcr.io/api:v1
          ports:
            - containerPort: 80
          env:
            - name: DB_HOSTNAME
              valueFrom:
                secretKeyRef:
                  name: api-config
                  key: hostname
            - name: DB_USERNAME
              valueFrom:
                secretKeyRef:
                  name: api-config
                  key: username
            - name: DB_NAME
              valueFrom:
                secretKeyRef:
                  name: api-config
                  key: name
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: api-config
                  key: password

这是我公开数据库的服务定义,但我认为我没有选择部署。我已经按照这里的例子。

kind: Service
apiVersion: v1
metadata:
  name: postgres
  label:
spec:
  type: ClusterIP
  ports:
  - port: 5432
    targetPort: 5432
---
kind: Endpoints
apiVersion: v1
metadata:
  name: postgres
subsets:
  - addresses:
      - ip: 10.0.0.50
    ports:
      - port: 5432

标签: kubernetesgoogle-kubernetes-engine

解决方案


您可以使用以下内容将数据库公开给 GKE 上的部署:

$ kubectl expose deployment name-of-db --type=LoadBalancer --port 80 --target-port 8080

推荐阅读