TOC

K8S:Ingress Controller

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 通信)
  8. Envoy -> 配置服务:建立 gRPC 连接
  9. 配置服务 -> Envoy :Discovery 请求,包含资源类型和版本信息
  10. Envoy -> 配置服务:本地资源信息
  11. 配置服务 -> 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