2个容器在Kubernetes容器中使用相同的端口

时间:2019-11-05 14:37:49

标签: docker kubernetes

我有以下相同的问题: Dual nginx in one Kubernetes pod

在我的Kubernetes Deployment模板中,我有2个使用相同端口80的容器。 我了解Pod中的容器实际上在同一网络名称空间下,这使得可以使用Podlocalhost访问127.0.0.1中的另一个容器。 这意味着容器不能使用相同的端口。

在第一个容器中使用docker run,在第二个容器中使用docker-compose,在8001:808002:80的帮助下很容易做到这一点。

在Kubernetes Pod中是否有类似或更好的解决方案?无需将这两个容器分成不同的Pod。

2 个答案:

答案 0 :(得分:2)

我相信您需要做的是为广告连播中的每个容器指定一个不同的Container Port。 Kubernetes允许您使用容器定义文件中的此参数指定每个容器公开的端口。然后,您可以创建指向相同容器但不同端口的服务。

答案 1 :(得分:1)

基本上,我完全同意 @David的 @Patric的的评论,但是我决定添加一些其他内容,将其扩展为答案。

  

我遇到以下相同的问题:Dual nginx in one Kubernetes pod

并且在提到的线程中已经有一个很好的答案。从技术的角度来看,它可以为您的特定用例提供现成的解决方案,但是它并没有对想法本身产生疑问。

  

借助docker run或   docker-compose,使用第一个容器的8001:80和8002:80   第二个容器。

Kubernetes 中也很容易实现。只需将两个容器放在不同的Pods中,您将不必使用nginx config进行操作,使其在不同于80的端口上侦听。请注意,您提到的这两个Docker容器不共享单个网络名称空间,这就是它们都可以在端口80上侦听的原因,这些端口映射到主机系统上的不同端口(8001和{{1 }})。 Kubernetes Pods 并非如此。阅读有关微服务架构的更多信息,尤其是如何在 k8s 上实现微服务,您会注意到,在单个8002中放置几个​​容器确实很少见绝对不应该在像您这样的情况下使用。应该有充分的理由将2个或多个容器放在一个Pod中。通常,第二个容器具有与主要容器互补的功能。

3 design patterns for multi-container Pods, commonly used in Kubernetes:小车,大使和适配器。通常,所有这些容器都简称为侧车容器

请注意,在上述所有用例中,在单个Pod中耦合在一起的2个或更多容器具有完全不同的功能。即使您在单个Pod中放置了多个容器(这是最常见的),实际上,它也绝不是相同类型的容器(例如,两个nginx服务器在您的情况下侦听不同的端口)。它们应该是互补的,并且应该有充分的理由将它们放在一起,为什么它们应该同时启动和关闭并共享相同的网络名称空间。在其中运行了监视代理程序的Sidecar容器具有对主容器的补充功能,例如, Nginx Web服务器。您可以在this文章中全面了解有关容器设计模式的更多信息。

  

我没有非常确定的用例,因为我仍然   对于Kubernetes和集群概念来说是非常新的。

因此,如果没有特殊的理由,绝对不要这样。

  

我对集群的最初计划是将我的所有系统容器放入   放入豆荚。这样我就可以复制任意数量的Pod。

您不需要一个Pod来复制它。您的集群中可以有很多Pod(通常由replicaSets管理),每个集群都负责运行已声明的某种Deployments副本的数量。

  

但是根据我现在收到的所有反馈,似乎我要去   方向错误。

是的,这绝对是错误的方向,但实际上已经说过了。我只想强调为什么这个方向是错误的。这种方法完全与微服务体系结构的思想背道而驰,这正是 Kubernetes 设计的目的。将所有基础结构放在一个巨大的Pod中,并将所有容器紧密地绑定在一起是没有意义的。请记住,Pod Kubernetes 中最小的可部署单元,当其中一个容器崩溃时,整个Pod都会崩溃。您无法手动重启Pod中的一个容器。

  

我将检查我的结构并尝试使用   建议大家都提供。谢谢大家! =)

这是个好主意:)