Kubernetes pod 中的 Docker 容器无法通信

Posted

技术标签:

【中文标题】Kubernetes pod 中的 Docker 容器无法通信【英文标题】:Docker Containers in Kubernetes pod not communicating 【发布时间】:2018-10-17 17:35:24 【问题描述】:

我有 2 个 docker 容器,一个正在运行烧瓶服务器,另一个正在运行 Angular 应用程序。当我在本地系统上运行这两个容器时,它们在 localhost 内通信没有问题,但是当我将这些容器推送到 kubernetes pod 中时,我收到连接被拒绝的消息。谁能解释一下我在 Kubernetes 中可能做错了什么?

【问题讨论】:

您需要在同一个 pod 中运行 2 个容器。或者使用正确的主机名而不是 localhost 配置服务。 或者您的意思是,您无法从 pod 外部访问您的应用程序? 你运行了多少个 pod? 我目前有 2 个容器在同一个 pod 中运行。当我在本地系统上运行这两个容器时,本地主机内的通信没有问题。我能够在单个 pod 中打开两个应用程序容器,但没有通信。据我了解,一个 pod 中的容器共享一个 localhost,对吧? 你的部署 yams 文件是什么?看起来这与您如何访问与您如何公开服务/端口有关。 【参考方案1】:

同一个 pod 中的容器共享相同的网络命名空间,因此它们通过 localhost 进行通信应该没有问题,但是在这种情况下,您应该在不同的 pod 上运行它们

当您在不同的 Pod 上运行两个应用程序时,它们需要通过 Pod IP 进行通信,或者您需要通过 ClusterIP、NodePort 或 Loadbalancer 类型的服务公开它们

在这种情况下,您可以在单独的 pod 上运行它们并使用集群 DNS 服务发现。基于 DNS 的服务发现提供了一种灵活且通用的方式来跨集群连接服务。

详情:

Kubernetes service discovery by example

【讨论】:

以上是关于Kubernetes pod 中的 Docker 容器无法通信的主要内容,如果未能解决你的问题,请参考以下文章

从 docker 容器到 kubernetes pod 的端口发布如何工作?

Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - DaemonSet(DS)

Kubernetes之三 k8s中的pod

Kubernetes存储

Kubernetes 学习总结(25)—— Kubernetes 中的 pod 与容器的区别和联系

Kubernetes in Action 3 pod:运行于Kubernetes中的容器