K8s发现和负载均衡-Ingress
K8s发现和负载均衡-Ingress
基于1.25
什么是Ingress
对集群中服务的外部访问进行管理的API对象,典型的访问时间是HTTP
- Ingress:提供了负载均衡、SSL终结和基于名称的虚拟托管
- Ingress公开集群外部到集群内部的HTTP服务和HTTPS路由
- Inress不会随意公开端口和协议
仅仅创建Ingress不会有效果,需要Ingress控制器
IngressSpec
// IngressSpec describes the Ingress the user wishes to exist. |
Ingress控制器
Ingress控制器不随着K8s启动安装
K8s官网支持维护的Ingress控制器
第三方Ingress:
AKS 应用程序网关 Ingress 控制器 是一个配置 Azure 应用程序网关 的 Ingress 控制器。
阿里云 MSE Ingress 是一个 Ingress 控制器,它负责配置阿里云原生网关, 也是 Higress 的商业版本。
Apache APISIX Ingress 控制器 是一个基于 Apache APISIX 网关 的 Ingress 控制器。
Avi Kubernetes Operator 使用 VMware NSX Advanced Load Balancer 提供第 4 到第 7 层的负载均衡。
BFE Ingress 控制器是一个基于 BFE 的 Ingress 控制器。
Cilium Ingress 控制器是一个由 Cilium 出品支持的 Ingress 控制器。
Citrix Ingress 控制器 可以用来与 Citrix Application Delivery Controller 一起使用。
Emissary-Ingress API 网关是一个基于 Envoy 的入口控制器。
Easegress IngressController 是一个基于 Easegress 的 API 网关,可以用作 Ingress 控制器。
F5 BIG-IP 的 用于 Kubernetes 的容器 Ingress 服务 让你能够使用 Ingress 来配置 F5 BIG-IP 虚拟服务器。
FortiADC Ingress 控制器 支持 Kubernetes Ingress 资源,并允许你从 Kubernetes 管理 FortiADC 对象。
HAProxy Ingress 是一个针对 HAProxy 的 Ingress 控制器。
用于 Kubernetes 的 HAProxy Ingress 控制器 也是一个针对 HAProxy 的 Ingress 控制器。
Istio Ingress 是一个基于 Istio 的 Ingress 控制器。
用于 Kubernetes 的 Kong Ingress 控制器 是一个用来驱动 Kong Gateway 的 Ingress 控制器。
Kusk Gateway 是一个基于 Envoy 的、 OpenAPI 驱动的 Ingress 控制器。
用于 Kubernetes 的 NGINX Ingress 控制器 能够与 NGINX 网页服务器(作为代理)一起使用。
ngrok Kubernetes Ingress 控制器 是一个开源控制器,通过使用 ngrok 平台为你的 K8s 服务添加安全的公开访问权限。
OCI Native Ingress Controller 是一个适用于 Oracle Cloud Infrastructure 的 Ingress 控制器,可帮助你管理 OCI 负载均衡。
OpenNJet Ingress Controller 是一个基于 OpenNJet 的 Ingress 控制器。
Pomerium Ingress 控制器 基于 Pomerium,能提供上下文感知的准入策略。
Skipper HTTP 路由器和反向代理可用于服务组装,支持包括 Kubernetes Ingress 这类使用场景,是一个用以构造你自己的定制代理的库。
Traefik Kubernetes Ingress 提供程序 是一个用于 Traefik 代理的 Ingress 控制器。
Tyk Operator 使用自定义资源扩展 Ingress,为之带来 API 管理能力。Tyk Operator 使用开源的 Tyk Gateway & Tyk Cloud 控制面。
Wallarm Ingress Controller 是提供 WAAP(WAF) 和 API 安全功能的 Ingress Controller。
Ingress-Nginx
根据配置的Ingress资源,生成nginx.config文件
- 防止错误,通过
nginx -t
校验通过之后才能实现添加到etcd中 - Ingress-Nginx:使用
lua-nginx-module
模块实现PodIP地址频繁变化但是不需要频繁添加加载到Nginx- 在每个端点更改的时候,Ingress-nginx先获取端点生成配置文件
- 再把对象发送到Lua程序
- Lua程序通过
balancer_by_lua
检测每个请求从哪些个端点选择上游对等点 - 这样会只影响了 nginx的upstream,节省了nginx加载时间
- 由于使用了动态的upstream能力,查看nginx.config无法看到PodIP信息
- 可以通过
curl -s https://127.0.0.1:10246/configuration/backends
查看当前动态生成完整的PodIP信息
- 可以通过