从 kubernetes 1.2 版本开始,kubernetes 提供了 Ingress 对象来实现对外暴露服务;到目前为止 kubernetes 总共有三种暴露服务的方式:
- NodePort Service
- LoadBlancer Service
- Ingress
LoadBlancer Service 是 kubernetes 深度结合云平台的一个组件;当使用 LoadBlancer Service 暴露服务时,实际上是通过向底层云平台申请创建一个负载均衡器来向外暴露服务;目前 LoadBlancer Service 支持的云平台已经相对完善,比如国外的 GCE、DigitalOcean,国内的 阿里云,私有云 Openstack 等等,由于 LoadBlancer Service 深度结合了云平台,所以只能在一些云平台上来使用。
访问权 (ing, ingresses) 就是 k8s 中用作反向代理和负载均衡的工具, 避免使用 service 的 NodePort 暴露宿主机过多端口而造成管理混乱的情况。
Ingress 是 1.2 后才出现的,通过 Ingress 用户可以实现使用 nginx 等开源的反向代理负载均衡器实现对外暴露服务,以下详细说一下 Ingress,毕竟 traefik 用的就是 Ingress。
在 service 之前加了一层 ingress, 外部通过路由规则(域名)进行不同服务的访问, 结构如下
ingress -> service -> label selector -> pods
www.app1.com -> app1-service -> app1 selector -> app1 1234
80/443 -> www.app2.com -> app2-service -> app2 selector -> app2 3456
www.app3.com -> app3-service -> app3 selector -> app3 4567
- 模式的优点 增加了 7 层的识别能力,可以根据 http header, path 进行路由转发
- 模式缺点 复杂度提升