Ingress 入口的意思
K8S 的这套框架下,运行在一个个 Pod 中的应用如何对外提供服务呢?
在容器化之前,我们常用 Nginx 作为代理(路由)和负载均衡,在 K8S 中,Nginx 的这个位置被称之为 Ingress。
支持 K8S Ingress 规范,实现对 Ingress 管理和控制的组件,叫做 Ingress Controller。
除了 Nginx,HAProxy 之外,最常听说的相关项目就是 Traefik 和 Envoy 了。
Envoy
Envoy 是美国打车界的千年老二 Lift 公司 2017 年交给 CNCF 基金会托管的代理服务项目。
PS:2018 年毕业,成为 CNCF 旗下第三个正式项目(前两个分别是 K8S 和 Prometheus)。
Cloud-native high-performance edge/middle/service proxy
Envoy 可以作为服务网格的数据面代理,为微服务应用程序提供负载均衡、流量路由、服务发现、健康检查、故障恢复、追踪和监视等功能。它还可以作为边缘网关或 API 网关,提供安全、流量控制、鉴权、协议转换、请求转换、缓存等功能。
特点:
1. 使用 Go 语言开发
2. 支持 HTTP(1,2),gRPC,TCP,WebSocket 协议
3. 高性能,高并发,高吞吐,低延迟,可拓展
4. 拓展性:插件式架构,可自定义过滤器、路由规则、负载均衡算法等
5. CNCF 项目,非常活跃
6. 支持运行数据采集
7. 静态配置(YAML / JSON) + 动态配置(xDS协议,如ADS、EDS、CDS、RDS等,gRPC 通信)
1. Envoy -> 配置服务:建立 gRPC 连接
2. 配置服务 -> Envoy :Discovery 请求,包含资源类型和版本信息
3. Envoy -> 配置服务:本地资源信息
4. 配置服务 -> Envoy :Discovery 响应,最新的资源信息(如集群配置、路由规则、TLS证书等)。
Traefik
Traefik 是一个专为云原生设计的反向代理和负载均衡器,支持 K8S Ingress 规范。
特点:
- 支持多种后端(容器编排和服务注册中心)
- 自动 TLS:生成证书(Let's Encrypt),配置,管理
- 拓展性:插件式架构,认证,授权,缓存,限流等
- 都阳台配置
Ingress Controller
基于 Nginx
- kubernetes/ingress-nginx 官方提供的 Ingress Controller 实现
- nginxinc/kubernetes-ingress
- Kong/kubernetes-ingress-controller
- apache/apisix-ingress-controller
基于 Envoy
- projectcontour/contour
- istio/istio
- emissary-ingress/emissary
- solo-io/gloo
- zalando/skipper
基于 HAProxy
- haproxytech/kubernetes-ingress
- voyagermesh/voyager
- jcmoraisjr/haproxy-ingress
Traefik
- traefik
其他
- flomesh-io/pipy + flomesh-io/fsm