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

时间:2019-10-10 16:04:29

标签: docker kubernetes docker-container kubernetes-pod

在学习教程Get Started, Part 3: Deploying to Kubernetes时,我偶然发现了清单文件的部署定义中的Pod模板。在Pod和容器部分中都没有指定端口。

这使我想到了最初的问题:端口发布如何从Docker容器发布到Pod?

下面的引用听起来像kubernetes一旦启动便获得了正在运行的容器的信息,并从侦听0.0.0.0:PORT的服务获取端口并将其映射到pod环境(网络名称空间)中的同一端口。

  

在此处未指定端口不会阻止该端口暴露。任何从容器中的默认“ 0.0.0.0”地址监听的端口都可以从网络访问。 Source

如果我的假设朝着正确的方向发展,这对于具有多个容器的吊舱意味着什么? kubernetes是否只允许带有内部服务的容器在不同端口上侦听?还是可以将容器内部端口映射到Pod环境(网络名称空间)中的其他端口?

根据以下引用,我假设无法从容器到容器映射端口。 的确,在两个具有相同端口的容器中指定两个服务,只是通过紧随其后的映射来更改它们,这并没有太大意义。

  

在此处公开端口可为系统提供有关容器使用的网络连接的其他信息,但主要是参考信息。 Source


更新2019-10-15

如以下引号所述,默认情况下,docker容器不会向外部发布任何端口。

  

默认情况下,创建容器时,它不会将其任何端口发布到外界。要使端口可用于Docker外部的服务或未连接到容器网络的Docker容器,请使用--publish或-p标志。 Source

这意味着kubernetes必须以某种方式配置在容器中运行的docker容器,以便将容器的端口发布到容器中。

关于以下引用,kubernetes是否有可能通过使用-network host 配置运行docker容器?假设pod是kubernetes中的docker主机。

  

如果您对容器使用主机网络模式,则该容器的网络堆栈不会与Docker主机隔离。例如,如果您运行绑定到端口80的容器,并且使用主机网络,容器的应用程序位于主机IP地址上的端口80上。 Source

1 个答案:

答案 0 :(得分:3)

在Pod中运行的容器类似于在连接到网络的节点上运行的进程。 Pod gets具有一个网络地址,并且所有容器都共享相同的网络地址。他们可以使用gcda互相交谈。

在容器中运行的容器可以侦听该地址上的任何端口。如果容器中有多个运行的容器,则它们不能绑定到同一端口,只能绑定其中一个。请注意,不需要发布这些端口。容器可以侦听任何端口,如果客户端连接到容器的该端口,则流量将传递到该端口。

因此,无法从容器到容器映射端口。

暴露的容器/荚端口主要是信息端口,工具使用它们来创建资源。