Kubernetes部署中不同服务之间的通信

时间:2018-11-16 20:32:55

标签: postgresql kubernetes

我是第一次使用Kubernetes(v 1.11.2-gke.18),并且正在尝试让Sentry作为Kubernetes部署运行。所有这些都在Google Cloud中运行。这是Postgres,Redis和Sentry的YAML文件:

postgres.yml for k8s redis.yml for k8s sentry.yml for k8s

Redis和Postgres部分似乎正常运行,但是Sentry失败,因为:could not translate host name "postgres-sentry:5432" to address: Name or service not known

我的问题是:如何使这些服务正常通信?如何使Sentry容器与Postgres和Redis通信?

2 个答案:

答案 0 :(得分:1)

在Kubernetes中,Pod通常可以使用DNS通过服务找到其他Pod。

如果postgres-sentry与哨兵应用程序pod / deployment位于相同的名称空间(看起来像默认名称空间),则您的配置看起来正确。

因此它指出您可能与DNS有关。您可以通过将其装进哨兵应用容器/吊舱并尝试ping postgres-sentry来检查:

$ kubectl exec -it <pod-id-of-your-sentry-app> sh
# ping postgres-sentry

还要检查您是否/etc/resolv.conf看起来像这样:

# cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

最后,检查您的DNS Pod是否正在运行:

$ kubectl -n kube-system get pods | grep dns
coredns-xxxxxxxxxxx-xxxxx                                             1/1     Running   15         116d
coredns-xxxxxxxxxxx-xxxxx                                             1/1     Running   15         116d

答案 1 :(得分:1)

事实证明,在这种情况下,我需要更改SENTRY_REDIS_HOST和SENTRY_POSTGRES_HOST值,使其在env声明中没有端口号。取出这些内容使一切都按预期进行。