【发布时间】:2018-08-25 15:17:46
【问题描述】:
我有一个运行 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
这是我公开数据库的服务定义,但我认为我没有选择部署。我已经按照here的例子做了。
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
【问题讨论】:
-
对不起,我不确定我是否理解。您的数据库在集群内部,您想从外部访问它吗?还是反过来(数据库在集群之外)?
-
它在 kubernetes 集群之外,但在同一个 vpc 中,但我想从集群内访问它
-
你是尝试连接ip还是服务名?你能告诉我们你的连接字符串吗?另外,你可以使用外部ip连接到数据库吗?
-
user=postgres 密码=password dbname=test host=postgres.c.kube-cluster.internal;我正在使用 gcp 实例名称,这会正确解析为内部 IP
-
@driftavalii,我已经查看了Exp. 上的所有场景,它似乎与问题不符。您能否确认 Postgres 数据库确实在集群之外还是在集群内?通常应使用ClusterIP service 公开数据库部署以启用内部通信。
标签: kubernetes google-kubernetes-engine