【发布时间】:2021-01-05 11:37:43
【问题描述】:
假设我们有一个 Node 应用程序在 Docker 容器中运行并侦听端口 3000。我们希望公开此应用程序以在浏览器中访问,也在端口 3000 中访问。所以我们像这样进行端口转发:
docker run -p <port>:<targetPort> my-image // for example: 3000:3000
所以 docker 知道要监听哪个端口以及容器内的哪个进程来转发网络。
但是在k8s的NodePort服务中,提供NodePort服务端口和Pod的目标端口就够了,但不提供Pod内部的目标端口,所以我们有随机的外部端口,30,000-32,000(大约)监听外部流量,转发到 NodePort 服务的端口,然后转发到 Pod 的目标端口,但是.. 嘿,我们没有提到 Pod 内部的目标端口。 p>
那么 Pod 对象是如何知道将流量转发给它内部的哪个进程的呢?我们通常假设我们在一个 Pod 中只有一个容器,但如果我们有多个呢?
另请注意,在 Docker 中公开图像的示例中 - 如果我们不提及端口转发,则整个展览将不起作用,因此无法通过浏览器(在容器外)访问它。..
【问题讨论】:
标签: docker kubernetes portforwarding kubernetes-pod