如何定义ports的publish部分,docker和k8s中的substitutes是什么?
How to define publish parts of ports and what are substitutes in docker and k8s?
我是 docker 和 k8s 的新手。端口主题对我来说很难理解......
基本上,我知道我们为容器分配端口,用于访问容器。
发布端口8080:80
和127.0.0.1:8080:80
有什么区别?
(因为我是 docker 的新手,我的问题可能不准确我会澄清一下 - 我的意思是在使用 Docker run
命令时我使用-p
选项来设置它)。
8080
和 80
端口是什么意思? - 我们能否以不同方式定义这些端口?
发布端口与 pod 清单中定义的 k8s 有何关系?
此外,如果我想在 pod 清单中分配与 docker 中完全相同的端口,那么如何将 127.0.0.1:8080:80
与 k8s pod 关联起来?是 containerPort
和 hostPort
属性吗?
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官方文档
我是 docker 和 k8s 的新手。端口主题对我来说很难理解...... 基本上,我知道我们为容器分配端口,用于访问容器。
发布端口8080:80
和127.0.0.1:8080:80
有什么区别?
(因为我是 docker 的新手,我的问题可能不准确我会澄清一下 - 我的意思是在使用 Docker run
命令时我使用-p
选项来设置它)。
8080
和 80
端口是什么意思? - 我们能否以不同方式定义这些端口?
发布端口与 pod 清单中定义的 k8s 有何关系?
此外,如果我想在 pod 清单中分配与 docker 中完全相同的端口,那么如何将 127.0.0.1:8080:80
与 k8s pod 关联起来?是 containerPort
和 hostPort
属性吗?
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官方文档