外部用户如何访问在Kubernetes上运行的服务?

  本文将介绍如何使用NodePort、LoadBalancer、Ingress控制器三种方式将服务公开,供外部用户访问,并探讨三者之间何时使用?如何选择?

发布服务的三种方式:

  • NodePort 服务类型,将应用程序公开到每个节点上的端口上。
  • LoadBalancer 服务类型,创建一个指向Kubernetes服务的外部负载均衡器。
  • Ingress 管理外部访问的API对象,Ingress不会公开任何端口或协议。

NodePort

  如果将service.type设置为NodePort,Kubernetes控制器将从--service-node-port-range(默认值: 30000-32767)范围内分配一个端口,每个节点都将该端口代理到您的服务。虽然这对于大多数TCP或UDP客户端来说可能不是问题,但HTTP或HTTPS流量最终暴露在非标准端口上。但是,NodePort旨在作为高级入口模型(例如,LoadBalancer)的构建块,当您不需要生产环境URL时,它对于开发目的很方便。

LoadBalancer

  LoadBalance服务类型会自动部署一个外部负载均衡器,该外部负载均衡器与特定的IP地址关联,并将外部流量路由到集群中的Kubernetes服务。但不像NodePort,并不是所有的云提供商都支持LoadBalance服务类型。如果您在支持LoadBalancer服务类型的环境中,这可能是路由流量的最安全,最简单的方法。

Ingress

  一个API对象,用于管理对集群中服务的外部访问,通常是HTTP。Ingress可以提供负载均衡、SSL终止和基于名称的虚拟主机。Ingress控制器通常不会消除对外部负载均衡器的需要,只是在负载均衡器后面增加了一个额外的路由和控制层。将HTTP和HTTPS以外的服务公开到Internet时,通常使用Service.Type = NodePort或 Service.Type = LoadBalancer类型的服务。

  我们刚刚介绍了将外部流量路由到Kubernetes集群的三种基本模式,Ingress控制器和Kubernetes服务都需要一个外部负载均衡器,并且如前所述,NodePort是不能直接用于生产的,但是,通常情况下,您的Kubernetes服务还将对入口施加其他要求。例如:

  • 基于内容的路由(例如,基于HTTP方法,请求标头或特定请求的其他属性的路由)
  • 弹性,例如速率限制,超时
  • 支持多种协议,例如WebSockets或gRPC
  • 认证方式

特定于服务的入口管理

  因此,进入策略的问题实际上是选择正确的方式来管理从外部负载均衡器到服务的流量。你有三种选择:

  • 选择一个Ingress控制器,例如 ingress-nginx
  • API Gateway,例如 Ambassador
  • 使用NGINX自定义部署

  假设您不想自己部署,那么如何在入口控制器和API网关之间进行选择?

参考链接:https://blog.getambassador.io/kubernetes-ingress-nodeport-load-balancers-and-ingress-controllers-6e29f1c44f2d

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我还未睡下,脑中反复回旋着两个词-“夜雨”“残花”。 连绵了一天的雨似乎并不愿意就此打住。我听得见雨,像一个小娇娘...
    喜云刘安阅读 1,475评论 0 0
  • 大千世界,芸芸众生,每个人都有自己独特的性格特点。不同人的不同个性,也预示着不同的命运。 中华民族的传统文化历来都...
    张闫岑阅读 6,826评论 2 2
  • 来源于网友:jhjflystar 在高中时,我们前后排就坐。 我们的差距,就像当时的成绩。 我第一,他第七。 之间...
    晨雨滴阅读 7,920评论 0 0
  • 夏日午间街头 行人寥寥 我懒洋洋的走在街上 看爬山虎挂满墙头 看喷泉静静地流 丢掉往日 急匆匆地节奏 缓慢也会让人...
    安然_2018阅读 1,449评论 0 3
  • 晚上去剪了个头发,到江边晃荡了一下,感受到武汉是越来越漂亮。 明天上班。
    伏伏王阅读 1,521评论 0 0