繁体   English   中英

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

[英]How does port publishing from a docker container to a kubernetes pod work?

在完成教程入门,第 3 部分:部署到 Kubernetes 时,我偶然发现了清单文件的部署定义中的 Pod 模板。 在 pod 和容器部分中都没有指定端口。

这让我想到了最初的问题:从 docker 容器到 pod 的端口发布如何工作?

下面的引用听起来像 kubernetes 一旦启动就可以洞察正在运行的容器,并从监听 0.0.0.0:PORT 的服务中获取端口,并将其映射到 pod 环境(网络命名空间)中的相同端口。

此处不指定端口不会阻止该端口被暴露。 任何侦听容器内默认“0.0.0.0”地址的端口都可以从网络访问。 资源

如果我的假设朝着正确的方向发展,这对于具有多个容器的 pod 意味着什么? kubernetes 是否只允许具有内部服务侦听不同端口的容器? 或者是否可以将容器内部端口 map 到 pod 环境(网络命名空间)中的不同端口?

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

在此处公开端口可为系统提供有关容器使用的网络连接的附加信息,但主要是信息性的。 资源


更新 2019-10-15

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

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

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

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

如果您对容器使用主机网络模式,则该容器的网络堆栈不会与 Docker 主机隔离 [...] 例如,如果您运行一个绑定到端口 80 的容器并使用主机网络,则该容器的应用程序是在主机的 IP 地址的端口 80 上可用。 资源

在 pod 中运行的容器类似于在连接到网络的节点上运行的进程。 Pod 获取了一个网络地址,所有容器共享同一个网络地址。 他们可以使用localhost相互交谈。

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

因此,从容器到 pod 的端口映射是不可能的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM