在Kubernetes中,ClusterIP、NodePort和LoadBalancer服务类型有什么区别?

518

问题1 - 我正在阅读文档,但有些措辞让我有点困惑。它说:

ClusterIP: 在群集内部 IP 上公开服务。选择此值将使服务仅可从群集内部访问。这是默认的 ServiceType。

NodePort: 在每个节点的 IP 上公开服务,使用静态端口(NodePort)。自动创建一个 ClusterIP 服务,用于路由到 NodePort 服务。您可以通过请求 <NodeIP>:<NodePort> 来从群集外部联系 NodePort 服务。

LoadBalancer: 使用云提供商的负载均衡器在外部公开服务。自动创建 NodePort 和 ClusterIP 服务,用于路由到外部负载均衡器。

NodePort 服务类型是否仍然使用 ClusterIP,只不过在不同的端口上向外部客户端开放?因此,在这种情况下,<NodeIP>:<NodePort> 是否与 <ClusterIP>:<NodePort> 相同?

或者,NodeIP 实际上是运行 kubectl get nodes 时找到的 IP,而不是用于 ClusterIP 服务类型的虚拟 IP?

问题2 - 此外,在下面链接图片中的图表中:

enter image description here

Client 为什么在 Node 内部?我认为它需要在 ClusterIP 服务类型的情况下在 Cluster 中。

如果为 NodePort 绘制相同的图表,将客户端完全绘制在两个 NodeCluster 之外是否有效,或者我完全错了?


3
这里有一些非常好的解释 - 可惜没有人将Ingress添加为另一个比较点。 - Paul Hodges
1
解释了 Kubernetes 中 NodePort、LoadBalancer 和 Ingress 的使用场景,并提供了详细的图示,包括外部负载均衡器。文章链接:https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0 - Apurva Singh
1
解释了..包括入口和外部负载均衡,以及漂亮的图表:https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0 - undefined
11个回答

1

请不要忘记“新”的服务类型(来自k8s文档):

ExternalName:将服务映射到externalName字段的内容(例如foo.bar.example.com),通过返回其值的CNAME记录来实现。没有设置任何代理。

注意:您需要kube-dns版本1.7或CoreDNS版本0.0.8或更高版本才能使用ExternalName类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接