Kubernetes Ingress

Kubernetes关于服务的暴露主要是通过NodePort方式,通过绑定node主机的某个端口,然后进行pod的请求转发和负载均衡,但这种方式下缺陷是

  • Service可能有很多个,如果每个都绑定一个node主机端口的话,主机需要开放外围一堆的端口进行服务调用,管理混乱
  • 无法应用很多公司要求的防火墙规则

理想的方式是通过一个外部的负载均衡器,绑定固定的端口,比如80,然后根据域名或者服务名向后面的Service ip转发,Nginx很好的解决了这个需求,但问题是如果有新的服务加入,如何去修改Nginx的配置,并且加载这些配置? Kubernetes给出的方案就是Ingress;

 

Ingress包含了两大主件Ingress Controller和Ingress.

  • Ingress 解决的是新的服务加入后,域名和服务的对应问题,基本上是一个ingress的对象,通过yaml进行创建和更新进行加载。
  • Ingress Controoler 通过watch与 Kubernetes API 交互,动态的去感知集群中 Ingress 规则变化,然后读取他,按照他自己模板生成一段 Nginx 配置,再写到 Nginx Pod 里,最后 reload 一下。

目前Kubenetes只支持和维护GCE和Nginx Controller。使用Ingress后,外部访问的流量就不再经过Service,而是从Ingress Controller直接到Pod。

 

Ingress Controller中包含三个组件:

  • Nginx
  • Ingress Controller
  • Ingress

 

 

 

参考文档: 

http://blog.51cto.com/newfly/2060587

https://mritd.me/2017/03/04/how-to-use-nginx-ingress/

https://www.cnblogs.com/ericnie/p/6965091.html

 

posted @ 2018-05-04 00:52  Vincen_shen  阅读(332)  评论(0编辑  收藏  举报