[英]2 containers using the same port in Kubernetes pod
我有以下相同的问题: 一个 Kubernetes 吊舱中的双 nginx
在我的 Kubernetes Deployment
模板中,我有 2 个使用相同端口 80 的容器。我知道Pod
中的容器实际上位于同一个网络命名空间下,这使得可以使用localhost
或127.0.0.1
访问Pod
中的另一个容器。 这意味着容器不能使用相同的端口。
借助docker run
或docker-compose
很容易实现这一点,第一个容器使用8001:80
,第二个容器使用8002:80
。
在 Kubernetes Pod 中是否有类似或更好的解决方案? 无需将这 2 个容器分成不同的 Pod。
我相信您需要做的是为 pod 中的每个容器指定不同的容器端口。 Kubernetes 允许您在 pod 定义文件中使用此参数指定每个容器公开的端口。 然后,您可以创建指向相同 pod 但不同端口的服务。
基本上我完全同意@David和@Patric 的评论,但我决定在其中添加更多内容,将其扩展为答案。
我有以下相同的问题: 一个 Kubernetes 吊舱中的双 nginx
并且在提到的线程中已经有一个很好的答案来解决这个问题。 从技术角度来看,它为您的特定用例提供了现成的解决方案,但它并不质疑这个想法本身。
在 docker run 或 docker-compose 的帮助下,第一个容器使用 8001:80,第二个容器使用 8002:80,很容易实现这一点。
在Kubernetes中也很容易实现。 只需将两个容器放在不同的 Pod 中,您就不必使用Pods
配置来使其侦听不同于80
的端口。 请注意,您提到的这两个 docker 容器不共享单个网络命名空间,这就是为什么它们都可以侦听映射到主机系统上不同端口( 8001
和8002
)的端口80
的原因。 Kubernetes Pods不是这种情况。 阅读更多关于微服务架构的信息,特别是它是如何在k8s上实现的,你会注意到在一个Pod
中放置几个容器是非常罕见的用例,绝对不应该在像你这样的情况下应用。 应该有充分的理由将 2 个或更多容器放在一个Pod
中。 通常第二个容器与主容器有一些互补的 function。
多容器 Pod 有 3 种设计模式,常用在Kubernetes中:sidecar、ambassador 和 adapter。 很多时候,它们都被简单地称为边车容器。
请注意,在上述所有用例中,在单个Pod
中耦合在一起的 2 个或多个容器具有完全不同的 function 。 即使您在单个Pod
中放置了多个容器(这是最常见的),实际上它也绝不会是同一类型的容器(例如在您的情况下侦听不同端口的两个 nginx 服务器)。 它们应该是互补的,并且应该有充分的理由将它们放在一起,为什么它们应该同时启动和关闭并共享相同的网络命名空间。 Sidecar 容器中运行着一个监控代理,它对主容器有免费的 function,例如 nginx 网络服务器。 您可以在本文中阅读有关容器设计模式的更多信息。
我没有一个非常确定的用例,因为我对 Kubernetes 和集群的概念还很陌生。
因此,如果您对这种架构没有特别的理由,那么绝对不要以这种方式使用 go。
我对集群的初步规划是将系统的所有容器放入一个 pod。 这样我就可以根据需要复制这个 pod。
您不需要单个Pod
来复制它。 您的集群中可以有很多replicaSets
(通常由Deployments
管理),每个副本都负责运行某种Pod
的声明数量的副本。
但根据我现在得到的所有反馈,似乎我走错了方向。
是的,这绝对是错误的方向,但实际上已经说过了。 我只想强调为什么这个方向是错误的。 这种方法完全违背了微服务架构的理念,而这正是Kubernetes的设计目的。 将所有基础设施放在一个巨大的Pod
中并将所有容器紧密绑定在一起是没有意义的。 请记住, Pod
是Kubernetes中最小的可部署单元,当其中一个容器崩溃时,整个Pod
都会崩溃。 您无法手动重启Pod
中的一个容器。
我将审查我的结构并尝试使用你们提供的建议。 谢谢大家! =)
这是一个好主意:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.