当我定义例如在kubernetes中的部署中,有一个包含容器列表的部分,每个容器包含一个端口数组,例如:
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
现在文档here明确表示它不影响连接性:
要从容器公开的端口列表。在这里暴露一个端口给 有关网络连接的系统附加信息 容器使用,但主要是提供信息。没有指定端口 此处不阻止该端口暴露。任何端口 侦听容器内默认的“ 0.0.0.0”地址将是 可从网络访问。无法更新。
现在看来它并没有真正影响任何东西,而只是影响了信息,但这到底意味着什么,用在什么地方?
我发现它的一种用法是,如果port定义了一个名称,则可以使用该名称从服务中引用它。
是该规范还是其他一些用途?
答案 0 :(得分:1)
pod中的容器共享网络名称空间,这意味着IP,路由等内容。端口在容器之间不共享。每个容器都需要具有特定的端口才能公开其服务。
当一个容器暴露两个以上的端口时,它需要使用端口名,因此其他k8s抽象(例如service)可以找到正确的端口。
Kubernetes IP地址位于Pod范围内-Pod中的容器共享其网络名称空间-包括其IP地址。这意味着Pod中的容器可以全部到达彼此在localhost上的端口。这也意味着Pod中的容器必须协调端口使用,但这与VM中的进程没有什么不同。这就是所谓的“每脚IP”模型。kubernetes-network-model
答案 1 :(得分:1)
引用文档时,
要从容器公开的端口列表。在此处公开端口可为系统提供有关容器使用的网络连接的其他信息,但主要是参考信息。在此处未指定端口并不能防止该端口暴露。任何从容器中的默认“ 0.0.0.0”地址监听的端口都可以从网络访问。无法更新。
定义containerPorts
的目的纯粹是为了文档。它仅由其他开发人员用来了解容器侦听的端口。 Kubernetes借鉴了docker的想法,该想法与here的EXPOSE
命令相同。