如何定义ports的publish部分,docker和k8s中的substitutes是什么?

How to define publish parts of ports and what are substitutes in docker and k8s?

我是 docker 和 k8s 的新手。端口主题对我来说很难理解...... 基本上,我知道我们为容器分配端口,用于访问容器。

发布端口8080:80127.0.0.1:8080:80有什么区别?

(因为我是 docker 的新手,我的问题可能不准确我会澄清一下 - 我的意思是在使用 Docker run 命令时我使用-p 选项来设置它)。

808080 端口是什么意思? - 我们能否以不同方式定义这些端口?

发布端口与 pod 清单中定义的 k8s 有何关系? 此外,如果我想在 pod 清单中分配与 docker 中完全相同的端口,那么如何将 127.0.0.1:8080:80 与 k8s pod 关联起来?是 containerPorthostPort 属性吗?

What is the difference between publishing port: 8080:80 and 127.0.0.1:8080:80?

区别很好解释here:

  • 127.0.0.1 is the loopback address (also known as localhost).
  • 0.0.0.0 is a non-routable meta-address used to designate an invalid, unknown, or non-applicable target (a ‘no particular address’ place holder). In the context of a route entry, it usually means the default route. In the context of servers, 0.0.0.0 means all IPv4 addresses on the local machine. If a host has two IP addresses, 192.168.1.1 and 10.1.2.1, and a server running on the host listens on 0.0.0.0, it will be reachable at both of those IPs.

如果您 运行 一个 Docker 容器使用此命令:

$ docker run -p 8080:80 --name web nginx

这将映射一个运行宁容器端口 80到主机端口 0.0.0.0:8080:

$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                   NAMES
08a5deaeeae8   nginx     "/docker-entrypoint.…"   26 seconds ago   Up 26 seconds   0.0.0.0:8080->80/tcp, :::8080->80/tcp   web

然后容器端口 80 将可以在端口 8080 上的所有主机的 IP 地址上访问。

如果你想映射 127.0.0.1:8080 你应该使用:

$ docker run -p 127.0.0.1:8080:80 --name web nginx

然后容器端口 80 将只能在主机的环回地址上访问。

您可以在官方 Docker 文档页面 here.

上阅读有关公开端口的更多信息

What mean 8080 and 80 ports? - Can we namely define those ports differently?

您可以选择主机和容器上的任何可用端口。但是,请记住,容器内的某些应用程序配置为使用特定端口。

k8s

默认情况下,Kubernetes 中 pod 中的端口不会在节点和主机的 IP 地址上发布(pods 有自己的 IP 地址)。这有点像在没有 -p 参数的情况下使用 docker 运行

并且 pod 定义没有在主机 IP 地址上发布端口的选项,您需要使用

$ kubectl port-forward pod/mypod 8080:80

命令执行此操作,默认情况下使用 127.0.0.1,但您可以使用 --address 标志指定 0.0.0.0:

$ kubectl port-forward --address 0.0.0.0 pod/mypod 8080:80

您可以在 k8s 官方页面上找到有关端口转发的更多信息 here

而且在 Kubernetes 中有一个更好的选择 - Service - 一种将应用程序 运行ning 在一组 Pods 上公开为网络服务的抽象方法。

关于服务here.

可以查看Kubernetes官方文档