我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Kubernetes Ingress控制器的技术选型技巧有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Kubernetes Ingress控制器的技术选型技巧有哪些

小编给大家分享一下Kubernetes Ingress控制器的技术选型技巧有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!


名词解释

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

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


Kubernetes 访问现状

Kubernetes Ingress控制器的技术选型技巧有哪些
 Kubernetes 的外部访问方式

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

这两种方案其实各自都存在一些缺点:
  • NodePort 的缺点是一个端口只能挂载一个 Service,而且为了更高的可用性,需要额外搭建一个负载均衡。
  • LoadBalancer 的缺点则是每个服务都必须要有一个自己的 IP,不论是内网 IP 或者外网 IP。更多情况下,为了保证 LoadBalancer 的能力,一般需要依赖于云服务商。
在Kubernetes的实践、部署中,为了解决像 Pod 迁移、Node Pod 端口、域名动态分配,或者是 Pod 后台地址动态更新这种问题,就产生了 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 控制器选型的一些经验。

Kubernetes Ingress控制器的技术选型技巧有哪些

选型原则

1.基本特点

首先我认为Ingress 控制器应该具备以下基本功能,如果连这些功能都没有,那完全可以直接pass。
  • 必须开源的,不开源的无法使用。
  • Kubernetes 中Pod 变化非常频繁,服务发现非常重要。
  • 现在 HTTPS 已经很普及了,TLS 或者 SSL 的能力也非常重要,比如证书管理的功能。
  • 支持 WebSocket 等常见协议,在某些情况下,可能还需要支持 HTTP2 、QUIC 等协议。

2.基础软件

前面有提到,每个人擅长的技术平台不一样,所以选择自己更加熟悉的 HTTP 网关也显得至关重要。比如 Nginx、HAProxy、Envoy 或者是 Golang 原生网关。因为你熟悉它的原理,在使用中可以实现快速落地。
在生产环境上,高性能是一个很重要的特性,但比之更重要的是高可用。这意味着你选择的网关,它的可用性、稳定性一定要非常强,只有这样,服务才能稳定。

3.功能需求

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

  • 协议:是否支持 HTTP2、HTTP3;
  • 负载均衡算法:最基本的WRR、一致性哈希负载均衡算法是否能够满足需求,还是需要更加复杂的类似EWMA负载均衡算法。
  • 鉴权限流:仅需要简单的鉴权,或更进阶的鉴权方式。又或者需要集成,能够快速的开发出像腾讯云 IM 的鉴权功能。Kubernetes Ingress除了前面我们提到的存在Nginx reload 耗时长、插件扩展能力差的问题,另外它还存在后端节点调整权重的能力不够灵活的问题。
选择 APISIX

相比Kubernetes Ingress,我个人更推荐 APISIX 作为Ingress  controller。虽然它在功能上比 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。
Kubernetes Ingress控制器的技术选型技巧有哪些
ingress controller 架构图
上图为Ingress controller 项目的整体架构图。左边部分为 Kubernetes 集群,这里可以导入一些 yaml 文件,对 Kubernetes 的配置进行变更。右边部分则是 APISIX 集群,以及它的控制面和数据面。从架构图中可以看出,APISIX Ingress 充当了 Kubernetes 集群以及 APISIX 集群之间的连接者。它主要负责监听 Kubernetes 集群中节点的变化,将集群中的状态同步到 APISIX 集群。另外,由于Kubernetes 倡导所有组件都要具备高可用的特性,所以在 APISIX Ingress 设计之初,我们通过双节点或多节点的模式来保证 APISIX  Ingress Controller 的保障高可用。

总结
    Kubernetes 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:主要优点是在于它完全支持 TCP 和 UDP 协议,但是缺失了鉴权方式、流量调度等其他功能。

  • Kong:其本身就是一个 API 网关,它也算是开创了先河,将 API 网关引入到 Kubernetes 中当 Ingress。另外相对边缘网关,Kong 在鉴权、限流、灰度部署等方面做得非常好。Kong Ingress 还有一个很大的优点:提供了一些 API、服务的定义,可以抽象成 Kubernetes 的 CRD,通过K8S Ingress 配置便可完成同步状态至 Kong 集群。缺点就是部署特别困难,另外在高可用方面,与 APISIX 相比也是相形见绌。

  • Traefik :基于 Golang 的 Ingress,它本身是一个微服务网关,在 Ingress 的场景应用比较多。他的主要平台基于 Golang,自身支持的协议也非常多,总体来说是没有什么缺点。如果大家熟悉 Golang 的话,也推荐一用。

  • HAproxy:是一个久负盛名的负载均衡器。它主要优点是具有非常强大的负载均衡能力,其他方面并不占优势。

  • Istio Ingress 和 Ambassador Ingress 都是基于非常流行的 Envoy。说实话,我认为这两个 Ingress 没有什么缺点,可能唯一的缺点是他们基于 Envoy 平台,大家对这个平台都不是很熟悉,上手门槛会比较高。

看完了这篇文章,相信你对“Kubernetes Ingress控制器的技术选型技巧有哪些”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Kubernetes Ingress控制器的技术选型技巧有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Kubernetes Ingress控制器的技术选型技巧有哪些

小编给大家分享一下Kubernetes Ingress控制器的技术选型技巧有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!名词解释阅读本文需要熟悉以下基本概念:集群:是指容器运行所需云资源的集合,包含了若干台云服务器、
2023-06-04

云服务器技术有哪些类型的技术

云服务器(CloudServer):是一种基于云计算技术的服务器,通常用于Web应用程序的构建和托管。云服务器提供可扩展性和灵活性,可以根据用户的需求动态分配计算资源,支持弹性伸缩和自动负载均衡。云主机(CloudStorage):是一种基于云计算技术的服务器,通常用于虚拟化环境,可以提供高性能和高可靠性。云主机可以提供多种云服务,包括数据库、消息队列、Web应用程序等。容器化部署(ContainerDocker化):是一种将应用程序部署...
2023-10-27

云服务器技术有哪些类型的

云服务器是一种虚拟化的云平台,用于为用户提供高性能、高可用性和弹性的基础设施。以下是云服务器技术的几种类型:虚拟服务器:一种云平台,可以在本地部署和远程访问,可以根据需要在不同的云服务器之间迁移。例如,可以在AmazonRackspace、GoogleCloudPhantom等公共云中实现,也可以在其他云平台上实现。云硬盘:一种云存储服务,通过网络连接到云服务器上,可以将用户在本地部署的数
2023-10-26

云服务器技术指标有哪些类型的

云服务器技术指标有很多,以下是常见的一些类型:处理能力:云服务器处理能力主要取决于服务器的处理性能和计算资源的配置,可以根据具体需求和应用场景来评估。存储:云服务器通常提供高速的存储服务,以便用户能够快速地访问大量数据。它们还可以存储大量的数据、应用程序和软件,以支持大量的数据处理和分析。负载均衡:云服务器可以根据用户请求的负载来分配服务器资源,以实现更高的负载均衡性能。它们可以提供多种负载均衡技术,包括基...
2023-10-27

云服务器的关键技术有哪些类型

云服务器(CloudDistributedServer)是一种用于存储和共享数据的服务器,它的主要关键技术包括以下几个类型:多租户技术:每个用户都可以使用自己的虚拟主机或VPS等服务器来存储数据,而不是需要一个独立的计算机或服务器来存储数据。这种模式的优势是可以为每个用户提供更独立的数据空间,同时不会因为数据量较大而导致性能下降。弹性伸缩技术:弹性伸缩技术是一种通过增加计算机数量来提供系统
2023-10-26

云服务器关键技术有哪些类型的

云服务器关键技术主要包括:分布式计算:云服务器通过将多个计算机集合起来,并且通过互联网连接起来,形成一个计算资源池来提供云服务。通过分布式计算,云服务器能够提高系统效率,同时减少系统的负载。高可用性:云服务器通过容错技术来应对各种故障,包括硬件故障、数据库故障等,以确保用户的数据安全。高可用性的云服务器能够提供更加稳定和可靠的服务,提高用户的满意度。弹性扩展:云服务器可以通过动态调整资源的供需平衡,实现资源的...
2023-10-27

云服务器技术协议有哪些类型的

SASS:SASS(SoftwareArchitectureStandard)是一种软件许可协议,用于定义软件组件和软件组件的授权方法。SASS协议是一个标准化的软件许可协议,它允许不同的软件供应商和开发商在其产品中使用相同的许可条款和条件。X270:X270是一种基于Java的云计算平台协议,它允许开发人员使用自己的
云服务器技术协议有哪些类型的
2023-10-28

云服务器技术有哪些类型的应用

IaaS(基础设施即服务):提供基础设施资源的服务,例如服务器、存储、网络等,由云服务提供商为用户提供。PaaS(平台即服务):提供软件开发和应用开发的平台,用户可以使用平台提供的工具、框架和模板构建应用程序。SaaS(软件即服务):将应用程序和服务部署在云端,用户可以根据自己的需求进行订阅或按使用量付费。IoT(物联网):通过互联网连接设备和系统,使它们可以相互通信、协作和处理数据。云服务器可以作为这些IoT设...
2023-10-27

云服务器技术方案有哪些类型的

云服务器是一种基于云计算的技术,可以通过互联网连接到服务器,并提供计算、存储和服务等功能。云服务器主要有以下类型:IaaS(基础设施即服务):指提供通用软件和基础设施,包括硬件、软件、网络、存储、安全等服务的云服务。PaaS(平台即服务):指在云平台上运行软件和服务的软件开发和运行环境,包括应用开发平台、基础设施平台、软件开发工具等。SaaS(软件即服务):指将应用程序部署在云端,用户使用该应用程序来完成特定的任务,而...
2023-10-27

云服务器的关键技术有哪些类型的

云服务器(CloudStorage,CS)是一种虚拟服务器,它通过互联网连接到计算机中的存储和处理资源。因此,云服务器包含许多关键技术,例如:网络连接:云服务器通过互联网连接到客户端和数据中心,通过TCP/IP协议实现互联网访问。数据中心:云服务器通过互联网与其他服务器和云存储实例(例如AWS、Azure、GoogleCloud)连接,以提供高性能、高可用性和可靠性的云计算服务。虚拟化技术:云服务器可以通过虚拟化技术在同一台物理服务器...
2023-10-27

免费动态服务器的选择技巧有哪些

这篇文章将为大家详细讲解有关免费动态服务器的选择技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。为了促进动态IP的推广,各大机构都制定了相应的收费标准,但同时也有不少新团队做了让步,推出各种形式的
2023-06-25

云服务器虚拟化技术有哪些类型的

云服务器虚拟化技术主要包括以下几种类型:裸机虚拟化:将服务器物理机虚拟为一个独立的资源池,每个用户可以在其中独立地访问、管理和使用物理服务器。这种虚拟化技术适用于对系统资源要求较低的场景,如个人电脑和移动设备等。逻辑虚拟化:将多个物理服务器的硬件资源抽象为逻辑资源池,每个用户可以通过一台服务器进行虚拟化,并且可以随时切
云服务器虚拟化技术有哪些类型的
2023-10-28

云服务器选择技巧有哪些方面的问题

可用性:云服务器可以提供24小时不间断的服务,如果发生不可用情况,可以直接关闭服务器而不需要影响业务。可扩展性:云服务器可以根据实际需求进行扩展,可以选择多块硬盘,增加系统的存储和处理能力。可靠性:云服务器可以提供冗余备份功能,即在单个服务器出现故障时,不会影响业务运行。安全性:云服务器可以提供多种安全措施,如防火墙、IDS/IPS等,保证数据的安全性。容量:云服务器可以根据实际需求进行容量选择,可以...
2023-10-27

云服务器选择技巧有哪些方面的内容

服务器类型和配置在选择云服务器时,需要根据自己的应用和需求来选择适合的服务器类型和配置。比如,如果您需要高性能的计算能力,可以选择云服务器中的虚拟服务器。如果您需要更大的存储空间,可以选择云服务器中的存储服务器。此外,云服务器还可以根据您的需求提供SSD磁盘、负载均衡等功能。安全性和稳定性云服务器提供了多种安全保障措施
云服务器选择技巧有哪些方面的内容
2023-10-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录