NodePort、HostPort和集群IP的区别

Posted

技术标签:

【中文标题】NodePort、HostPort和集群IP的区别【英文标题】:Difference between NodePort, HostPort and Cluster IP 【发布时间】:2018-11-15 11:11:53 【问题描述】:

在部署新工作负载时,Rancher 2 在“端口”部分提供了 4 个选项:

节点端口 主机端口 集群 IP 第 4 层负载均衡器

有什么区别?尤其是 NodePort、HostPort 和 Cluster IP 之间?

【问题讨论】:

【参考方案1】:

HostPort(运行 pod 的节点): 类似于 docker,这将在运行 pod 的节点上打开一个端口(这允许您打开主机上的 80 端口)。但是,这很容易设置运行:

除非绝对必要,否则不要为 Pod 指定 hostPort。当您将 Pod 绑定到 hostPort 时,它会限制 Pod 可以调度的位置数量,因为每个组合都必须是唯一的。如果您没有明确指定 hostIP 和协议,Kubernetes 将使用 0.0.0.0 作为默认 hostIP 和 TCP 作为默认协议。 kubernetes.io

NodePort(在每个节点上):仅限于端口 30,000 到 ~33,000 之间的端口。这通常只在与外部负载均衡器结合使用时才有意义(如果您想在端口 80 上发布 Web 应用程序)

如果您明确需要在节点上公开 Pod 的端口,请考虑在使用 hostPort 之前使用 NodePort 服务。 kubernetes.io

集群 IP(仅限内部):正如描述所述,这将打开一个端口,该端口仅可用于在同一集群中运行的内部应用程序。使用此选项的服务可通过内部 cluster-ip 访问。

【讨论】:

【参考方案2】:
Host Port Node Port Cluster IP
When a pod is using a hostPort, a connection to the node’s port is forwarded directly to the pod running on that node With a NodePort service, a connection to the node’s port is forwarded to a randomly selected pod (possibly on another node) Exposes the Service on an internal IP in the cluster. This type makes the Service only reachable from within the cluster.
pods using a hostPort, the node’s port is only bound on nodes that run such pods NodePort services bind the port on all nodes, even on those that don’t run such a pod NA
The hostPort feature is primarily used for exposing system services, which are deployed to every node using DaemonSets NA NA

一般

问:当多个 Pod 在同一个节点上运行 NodePort 时会发生什么?

答:使用NodePort,无论您有一个还是多个节点,端口都可以在每个节点上使用。

【讨论】:

以上是关于NodePort、HostPort和集群IP的区别的主要内容,如果未能解决你的问题,请参考以下文章

ingress-nginx 保姆级别源码阅读

k8s中的端口(port)

理解Kubernetes的NodePort、LoadBalancer和Ingress

k8s 集群端口定义区别

NodePort高可用问题

metalLB和NodePort之间的区别