有三种服务类型可以处理外部流量:ClusterIP、NodePort以及LoadBalancer。还有第4种解决方案:再添加一个抽象层,称为Ingress Controller。如下图所示:

1. ClusterIP:

ClusterIP是Kubernetes中默认的服务类型,它可以让你在集群内部与其他服务进行通信,声明为ClusterIP的服务不应该可以从外部直接可见。

2.NodePort:

因为每个节点有一个固定的IP地址,K8S通过将一个服务声明为NodePort,服务将会暴露节点IP地址,以便你可以从外部访问它。可以在生产环境中使用NodePort,但对于拥有许多服务的大型应用程序来说,手动管理所有不同的IP地址十分麻烦,所以一般不直接使用NodePort来进行外部网络访问。

3.LoadBalancer:

声明一个LoadBalancer类型的服务,就可以使用云提供商的LoadBalancer向外部公开。有了这个解决方案,你不必管理集群中每个节点的所有IP地址,但你将为每个服务配备一个load balancer。缺点是,每个服务都有一个单独的load balancer,你将按照load balancer实例付费。

4.Ingress:

Ingress不是一个服务,而是一个API对象,它可以管理外部对集群服务的访问。它作为反向代理和单一入口点(entry point)进入你的集群,将请求路由到不同的服务。我通常使用NGINX Ingress Controller,它承担了反向代理,同时也作为SSL发挥作用。暴露ingress的最佳生产方案是使用一个load balancer。

借助这一解决方案,你可以使用单个load balancer暴露任意数量的服务,所以你可以让费用保持在最低水平。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐