Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >浅谈Kubernetes Ingress控制器的技术选型

浅谈Kubernetes Ingress控制器的技术选型

原创
作者头像
腾讯云中间件团队
修改于 2020-02-28 11:07:20
修改于 2020-02-28 11:07:20
2.8K0
举报

导语:在Kubernetes的实践、部署中,为了解决 Pod 迁移、Node Pod 端口、域名动态分配等问题,需要开发人员选择合适的 Ingress 解决方案。面对市场上众多Ingress产品,开发者该如何分辨它们的优缺点?又该如何结合自身的技术栈选择合适的技术方案呢?在本文中,腾讯云中间件核心研发工程师厉辉将为你介绍如何进行Kubernates Ingress 控制器的技术选型。(编辑:中间件小Q妹)

名词解释

阅读本文需要熟悉以下基本概念:

  • 集群:是指容器运行所需云资源的集合,包含了若干台云服务器负载均衡器等云资源。
  • 实例(Pod):由相关的一个或多个容器构成一个实例,这些容器共享相同的存储和网络空间。
  • 工作负载(Node):Kubernetes 资源对象,用于管理 Pod 副本的创建、调度以及整个生命周期的自动控制。
  • 服务(Service):由多个相同配置的实例(Pod)和访问这些实例(Pod)的规则组成的微服务。
  • Ingress:Ingress 是用于将外部 HTTP(S)流量路由到服务(Service)的规则集合。Kubernetes 访问现状

△ Kubernetes 的外部访问方式

在 Kubernetes 中,服务跟 Pod IP 主要供服务在集群内访问使用,对于集群外的应用是不可见的。怎么解决这个问题呢?为了让外部的应用能够访问 Kubernetes 集群中的服务,通常解决办法是 NodePort 和 LoadBalancer。

这两种方案其实各自都存在一些缺点:

  • NodePort 的缺点是一个端口只能挂载一个 Service,而且为了更高的可用性,需要额外搭建一个负载均衡
  • LoadBalancer 的缺点则是每个服务都必须要有一个自己的 IP,不论是内网 IP 或者外网 IP。更多情况下,为了保证 LoadBalancer 的能力,一般需要依赖于云服务商。

在Kubernetes的实践、部署中,为了解决像 Pod 迁移、Node Pod 端口、域名动态分配,或者是 Pod 后台地址动态更新这种问题,就产生了 Ingress 解决方案。

Ingress 选型

Nginx Ingress 的缺点

Ingress 是 Kubernetes 中非常重要的外网流量入口。在Kubernetes中所推荐的默认值为Nginx Ingress,为了与后面Nginx 提供的商业版 Ingress 区分开来,我就称它为Kubernetes Ingress。

Kubernetes Ingress,顾名思义基于 Nginx 的平台,Nginx 现在是世界上最流行的 Nginx HTTP Sever,相信大家都对 Nginx 也比较熟悉,这是一个优点。它还有一个优点是 Nginx Ingress 接入 Kubernetes 集群所需的配置非常少,而且有很多文档来指引你如何使用它。这对于大部分刚接触 Kubernetes 的人或者创业公司来说,Nginx Ingress 的确是一个非常好的选择。

但是当 Nginx Ingress 在一些大环境上使用时,就会出现很多问题:

  • 第一个问题:Nginx Ingress用了一些 OpenResty 的特性,但最终配置加载还是依赖于原有的 Nginx config reload。当路由配置非常大时,Nginx reload 会耗时很久,时间长达几秒甚至十几秒,这样就会严重影响业务,甚至造成业务中断。
  • 第二个问题: Nginx Ingress 的插件开发非常困难。如果你认为 Nginx Ingress 本身插件不够用,需要使用一些定制化插件,这个额外的开发任务对程序员来说是十分痛苦的。 因为Nginx Ingress自身的插件能力和可扩展性非常差。Ingress 选型原则既然发现了 Nginx Ingress 有很多问题,那是不是考虑选择其他开源的、更好用的 Ingress?市场上比 Kubernetes Ingress 好用的Ingress起码有十几家,那么如何从这么多 Ingress 中选择适合自己的呢?

Ingress 最终是基于 HTTP 网关的,市面上 HTTP 网关主要有这么几种:Nginx、Golang 原生的网关,以及新崛起的 Envoy 。但是每个开发人员所擅长的技术栈不同,所以适合的 Ingress 也会不一样。

那么问题来了,我们如何选择一个更加好用的 Ingress 呢?或者缩小点范围,熟悉 Nginx 或 OpenResty 的开发人员,应该选择哪一个 Ingress 呢?

下面来介绍一下我对 Ingress 控制器选型的一些经验。

选型原则
选型原则

基本特点

首先我认为Ingress 控制器应该具备以下基本功能,如果连这些功能都没有,那完全可以直接pass。

  • 必须开源的,不开源的无法使用。
  • Kubernetes 中 Pod 变化非常频繁,服务发现非常重要。
  • 现在 HTTPS 已经很普及了,TLS 或者 SSL 的能力也非常重要,比如证书管理的功能。
  • 支持 WebSocket 等常见协议,在某些情况下,可能还需要支持 HTTP2 、QUIC 等协议。基础软件前面有提到,每个人擅长的技术平台不一样,所以选择自己更加熟悉的 HTTP 网关也显得至关重要。比如 Nginx、HAProxy、Envoy 或者是 Golang 原生网关。因为你熟悉它的原理,在使用中可以实现快速落地。

在生产环境上,高性能是一个很重要的特性,但比之更重要的是高可用。这意味着你选择的网关,它的可用性、稳定性一定要非常强,只有这样,服务才能稳定。

功能需求

抛开上述两点,就是公司业务对网关的特殊需求。你选择一个开源产品,最好肯定是开箱能用的。比如你需要 GRPC 协议转换的能力,那当然希望选的网关具备这样的功能。这里简单列一下影响选择的因素:

  • 协议:是否支持 HTTP2、HTTP3;
  • 负载均衡算法:最基本的WRR、一致性哈希负载均衡算法是否能够满足需求,还是需要更加复杂的类似EWMA负载均衡算法。
  • 鉴权限流:仅需要简单的鉴权,或更进阶的鉴权方式。又或者需要集成,能够快速的开发出像腾讯云 IM 的鉴权功能。Kubernetes Ingress除了前面我们提到的存在Nginx reload 耗时长、插件扩展能力差的问题,另外它还存在后端节点调整权重的能力不够灵活的问题。选择 APISIX 作为 Ingress controller相比Kubernetes Ingress,我个人更推荐 APISIX。虽然它在功能上比 Kong 会少很多,但是 APISIX 很好的路由能力、灵活的插件能力,以及本身的高性能,能够弥补在 Ingress 选型上的一些缺点。对于基于 Nginx 或 Openresty 开发的程序员,如果对现在的 Ingress 不满意,我推荐你们去使用 APISIX 作为 Ingress。

如何将 APISIX 作为 Ingress 呢?我们首先要做出一个区分,Ingress 是 Kubernetes 名称的定义或者规则定义,Ingress controller 是将 Kubernetes 集群状态同步到网关的一个组件。但 APISIX 本身只是 API 网关,怎么把 APISIX 实现成 Ingress controller 呢?我们先来简要了解一下如何实现 Ingress。

实现 Ingress,本质上就只有两部分内容:

  • 第一部分:需要将 Kubernetes 集群中的配置、或 Kubernetes 集群中的状态同步到 APISIX 集群。
  • 第二部分:需要将 APISIX中 的一些概念,比如像服务、upstream 等概念定义为 Kubernetes 中的 CRD。

如果实现了第二部分,通过 Kubernetes Ingress 的配置,便可以很快的产生 APISIX。通过 APISIX Ingress controller 就可以产生 APISIX 相关的配置。当前为了快速的将 APISIX 落地为能够支持 Kubernetes 的 Ingress ,我们创建了一个开源项目,叫 Ingress controller。

Ingress controller 架构图
Ingress controller 架构图

上图为Ingress controller 项目的整体架构图。左边部分为 Kubernetes 集群,这里可以导入一些 yaml 文件,对 Kubernetes 的配置进行变更。右边部分则是 APISIX 集群,以及它的控制面和数据面。从架构图中可以看出,APISIX Ingress 充当了 Kubernetes 集群以及 APISIX 集群之间的连接者。它主要负责监听 Kubernetes 集群中节点的变化,将集群中的状态同步到 APISIX 集群。另外,由于Kubernetes 倡导所有组件都要具备高可用的特性,所以在 APISIX Ingress 设计之初,我们通过双节点或多节点的模式来保证 APISIX  Ingress controller 的保障高可用。

总结

各类 Ingress 横向对比
各类 Ingress 横向对比

相对于市面上流行的 Ingress 控制器,我们简单对比来看看 APISIX Ingress 有什么优缺点。上图是外国开发人员针对 Kubernetes Ingress 选型做的一张表格。我在原来表格的基础上,结合自己的理解,将 APISIX Ingress 的功能加入了进来。我们可以看到,最左边的是APISIX,后边就是 Kubernetes Ingress 和 Kong Ingress,后面的 Traefik,就是基于 Golang 的 Ingress。HAproxy 是比较常见的,过去是比较流行的负载均衡器。Istio 和 Ambassador 是国外非常流行的两个Ingress。

接下来我们总结下这些 Ingress各自的优缺点:

  • APISIX Ingress:APISIX Ingress 的优点前面也提到了,它具有非常强大的路由能力、灵活的插件拓展能力,在性能上表现也非常优秀。同时,它的缺点也非常明显,尽管APISIX开源后有非常多的功能,但是缺少落地案例,没有相关的文档指引大家如何使用这些功能。
  • Kubernetes Ingress:即 Kubernetes 推荐默认使用的 Nginx Ingress。它的主要优点为简单、易接入。缺点是Nginx reload耗时长的问题根本无法解决。另外,虽然可用插件很多,但插件扩展能力非常弱。
  • Nginx Ingress:主要优点是在于它完全支持 TCPUDP 协议,但是缺失了鉴权方式、流量调度等其他功能。
  • Kong:其本身就是一个 API 网关,它也算是开创了先河,将 API 网关引入到 Kubernetes 中当 Ingress。另外相对边缘网关,Kong 在鉴权、限流、灰度部署等方面做得非常好。Kong Ingress 还有一个很大的优点:提供了一些 API、服务的定义,可以抽象成 Kubernetes 的 CRD,通过Kubernetes Ingress 配置便可完成同步状态至 Kong 集群。缺点就是部署特别困难,另外在高可用方面,与 APISIX 相比也是相形见绌。
  • Traefik :基于 Golang 的 Ingress,它本身是一个微服务网关,在 Ingress 的场景应用比较多。他的主要平台基于 Golang,自身支持的协议也非常多,总体来说是没有什么缺点。如果大家熟悉 Golang 的话,也推荐一用。
  • HAproxy:是一个久负盛名的负载均衡器。它主要优点是具有非常强大的负载均衡能力,其他方面并不占优势。
  • Istio Ingress 和 Ambassador Ingress 都是基于非常流行的 Envoy。说实话,我认为这两个 Ingress 没有什么缺点,可能唯一的缺点是他们基于 Envoy 平台,大家对这个平台都不是很熟悉,上手门槛会比较高。

综上所述,大家在了解了各个 Ingress 的优劣势后,可以结合自身情况快速选择适合自己的 Ingress。

作者介绍

厉辉,腾讯云中间件API网关核心研发成员,Apache APISIX PPMC。热爱开源,乐于分享,活跃于Apache APISIX社区。


如果你想要了解更多关于云原生相关的技术内容,请扫码关注【腾讯云中间件】公众号~

本文分享来自微信公众号-腾讯云中间件

原文出处及转载信息见文内详细说明,如有侵权,请联系yunjia_community@tencent.com删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Ingress控制器那么多,到底该选哪一个?
在Kubernetes中,service IP和Pod IP主要供集群内部访问使用,对于集群外部是不可见的。
没有故事的陈师傅
2020/12/02
1.1K0
Ingress控制器那么多,到底该选哪一个?
一文读懂云原生网关
本文帮助大家读懂网关的基本概念,云原生网关的功能和规范,对比主流云原生网关产品做选型参考,限于篇幅,后续文章中会详细介绍几款主流网关的实现技术。
CNCF
2022/11/29
4.3K0
一文读懂 Kubernetes Ingress Controller 选型实践
Hello folks,众所周知,Ingress 对于任何成功的 Kubernetes 集群部署拓扑架构都至关重要,尤其是在自建的容器云平台。 Ingress 允许我们在实际的业务场景中能够基于当前的网络环境定义外部(或内部)流量以及其如何路由至集群内的服务。
Luga Lee
2022/06/09
1.8K0
一文读懂 Kubernetes Ingress Controller 选型实践
kubernetes中ingress的种类,以及各种ingress优缺点
在Kubernetes中,有几种Ingress Controller可以选择。以下是其中最常用的几种:
堕落飞鸟
2023/03/30
1.7K0
为什么 APISIX Ingress 是比 Emissary-ingress 更好的选择?
Kubernetes Ingress 是一种 API 对象,用于定义集群外部流量如何路由到集群内部服务的规则。Ingress Controller 通常用于实现 Ingress 资源的相关逻辑,并统一管理这些流量规则。
米开朗基杨
2023/09/13
4730
为什么 APISIX Ingress 是比 Emissary-ingress 更好的选择?
K8S Ingress 之 Apache APISIX 解析
在云原生时代,基于主流的云操作系统 Kubernetes ,其常见的外部流量访问方式主要基于以下 NodePort、LoadBalancer 以及 Ingress 等。
Luga Lee
2021/12/09
3.9K0
K8S Ingress 之 Apache APISIX 解析
CloudBluePrint-Chapter 1.6 : 云上应用技术架构-API网关
在分布式架构中,一个复杂的应用被拆分为多个小而独立的服务,每个服务都运行在自己的进程中,并通过轻量级的机制(如HTTP RESTful API)进行通信。每个服务都围绕一个特定的业务功能进行构建,并可以独立地进行开发、部署和扩展。
行者深蓝
2023/09/07
4400
亲历者复盘:网易的 Envoy 网关选型、开发与改造
采访 | 蔡芳芳 编辑 |王一鹏 发现并应用一个性能卓越的、云原生、能适应至少未来五年架构趋势的 API 网关,现今已经成为基础架构团队的必做命题,否则整个基础设施架构可能是存在某些先天缺陷的,且维护成本相当之高。Envoy 正是在这种背景下走进大众视野,且非常契合各大技术团队的下一代网关“明星选手”。 Google、IBM、微软等跨国巨型企业对 Envoy 的使用已经相当深入,这种信任并非源于简单的,诸如“云原生”、“下一代”之类的噱头概念,而是可从其 TPS 表现获得更直观的印象。早在 2020
深度学习与Python
2023/02/28
8900
亲历者复盘:网易的 Envoy 网关选型、开发与改造
汽车智能计算平台公司「地平线」在 Ingress Controller 的探索和实践
在当前的汽车行业,大多数公司都在向自动驾驶和新能源方向转型,而对于自动驾驶方面,每家企业都投入了大量的资源来完成自动驾驶模型的开发与训练,其中出现了很多明星企业,比如汽车智能计算平台引领者地平线。地平线主要从事汽车智能计算平台的研发,具有领先的深度学习算法和芯片设计能力,致力于通过底层技术赋能,推动汽车产业的创新发展。
米开朗基杨
2022/11/07
5520
汽车智能计算平台公司「地平线」在 Ingress Controller 的探索和实践
kong笔记——认识kong
最近公司打算重构API网关,给定的硬性条件是支持lua脚本,kubernetes可部署,可解析lua,另外需要支持身份认证,IP黑白名单,限流,负载均衡等一些功能,为此,在技术选型上锁定了kong以及APISIX,最终选择了kong。
全栈程序员站长
2022/09/13
1.4K1
APISIX Ingress 控制器的安装及原理
APISIX 是动态、实时、高性能的 API 网关。它提供丰富的流量管理功能,比如负载均衡、动态上游、金丝雀发布、熔断、认证、可观测性等。既可以使用 APISIX API 网关处理传统的南北向流量,也可以使用它处理服务间的东西向流量。同时,它也可被用作 Kubernetes Ingress 控制器。 APISIX Ingress 控制器提供 Helm 安装方式,但是使用原生 YAML 安装,更加有助于理解其原理。
小阑本阑
2023/06/09
1.2K0
APISIX Ingress 控制器的安装及原理
Ingress-Nginx已经淘汰了?还是Apisix太强大!
--https://www.anthropic.com/index/anthropic
希里安
2023/10/30
1.1K0
Ingress-Nginx已经淘汰了?还是Apisix太强大!
云原生时代的流量入口:Envoy Gateway
流量入口代理作为互联网系统的门户组件,具备众多选型:从老牌代理 HAProxy、Nginx,到微服务 API 网关 Kong、Zuul,再到容器化 Ingress 规范与实现,不同选型间功能、性能、可扩展性、适用场景参差不齐。当云原生时代大浪袭来,Envoy 这一 CNCF 毕业数据面组件为更多人所知。那么,优秀“毕业生”Envoy 能否成为云原生时代下流量入口标准组件?
深度学习与Python
2020/08/07
2.2K0
云原生时代的流量入口:Envoy Gateway
Apache APISIX Ingress Controller 正式加入 ASF
云原生时代,Ingress 作为Kubernetes集群中服务的入口,已经被大家所接受。除了Kubernetes默认的NGINX Ingress Controller(基于原生 NGINX)之外, 业界也有不少其他第三方的 Ingress Controller 的实现。Apache APISIX作为国内最快毕业的 Apache 顶级项目,实现了Apache APISIX Ingress Controller,为Kubernetes用户提供了功能更为便捷的 Ingress 实现。
Jintao Zhang
2020/12/14
1.5K0
微服务架构下的核心话题 (三):微服务架构的技术选型
为了实现基于微服务开发的产品,或者说为了将单体应用重构为微服务架构时,将面临着众多技术框架的选择。大公司往往会有专门的部门或团队来负责自主研发自己的框架,以满足产品的需要,但是对于一般的中小型企业,选择合适的开源框架就显得更接地气了。本章将简单介绍微服务中,在技术选型时需要注意哪些原则,一些常用的开源技术框架,希望能够为大家在进行技术选型、调研时提供一些思路方向。
xcbeyond
2020/03/25
6730
微服务架构下的核心话题 (三):微服务架构的技术选型
Ingress 控制器还是 Kubernetes Gateway API?
对这两种解决方案的优势和局限性有清晰的理解,对于制定 Kubernetes 网络策略非常关键。
云云众生s
2024/03/28
2510
Ingress 控制器还是 Kubernetes Gateway API?
详解k8s组件Ingress边缘路由器并落地到微服务 - kubernetes
Ingress 英文翻译 进入;进入权;进食,更准确的讲就是入口,即外部流量进入k8s集群必经之口。这到大门到底有什么作用?我们如何使用Ingress?k8s又是如何进行服务发现的呢?先看一张图:
justmine
2019/02/15
2.4K0
保姆级教程,从概念到实践帮你快速上手 Apache APISIX Ingress
作者:张晋涛,Apache APISIX Committer、Kubernetes Ingress Nginx Reviewer,多个云原生开源项目的贡献者。
Jintao Zhang
2021/10/25
7.5K2
主流云原生微服务API网关成熟度与安全功能对比分析
在整个微服务架构中,API网关充当着非常重要的一环,它不仅要负责外部所有的流量接入,同时还要在网关入口处根据不同类型请求提供流量控制、日志收集、性能分析、速率限制、熔断、重试等细粒度的控制行为。API网关一方面将外部访问与微服务进行了隔离,保障了后台微服务的安全,另一方面也节省了后端服务的开发成本,有益于进行应用层面的扩展。与此同时,API网关也应具备解决外界访问带来的安全问题,例如TLS加密、数据丢失、跨域访问、认证授权、访问控制等。本文尝试分析目前主流的云原生微服务API网关成熟度以及各自具备的安全功能,并比较各自带来的优劣,尤其在安全层面上,开源软件都做了哪些工作,是否全面,若不全面我们又该如何弥补。
绿盟科技研究通讯
2020/01/02
3.1K0
为什么 APISIX Ingress 是比 Traefik 更好的选择?
Apache APISIX Ingress[1] 是一个使用 Apache APISIX 作为数据面的 Kubernetes Ingress controller 实现。
米开朗基杨
2023/01/09
1.2K0
为什么 APISIX Ingress 是比 Traefik 更好的选择?
推荐阅读
相关推荐
Ingress控制器那么多,到底该选哪一个?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档