本文转自Rancher Labs

在Kubernetes中,Ingress对象定义了一些路由规则,这些规则规定如何将一个客户端请求路由到指定服务,该服务运行在你的集群中。这些规则可以考虑到输入的HTTP消息的独特方面,包括其Host请求头和URL路径,这将允许你在请求中使用数据发现将流量从一个服务发送到另一个服务。那意味着你能够使用Ingress对象来为许多不同的应用程序定义路由。

虽然Ingress对象定义路由,但Ingress Controller是驱动它们的引擎。Ingress Controller是一个位于客户端和服务之间的代理,其作用是正确地传递消息。目前市面上已经有几个项目实现了Ingress Controller规范,每个项目都有其优势。Rancher提供了一个基于NGINX的默认controller,但你并不需要局限于此。Rancher已经和HAProxy达成合作,因此你也可以选择使用HAProxy Ingress Controller。我们倾向于把HAProxy Ingress Controller看作是一个完美的Kubernetes的涡轮增压引擎,能够充分提升Kubernetes的使用效率。

HAProxy Ingress Controller的特性

你可以在Rancher应用商店中找到HAProxy,此外你还可以在HAProxy的官方文档(https://www.haproxy.com/documentation/hapee/latest/installation/rancher/ )中找到HAProxy的安装细节。设置完成之后,HAProxy将会自动监听和实现Ingress规则。此时,你可以选择禁用NGINX Ingress Controller或保持两个Ingress controller都运行并通过名称指定其中一个。

HAProxy的功能特性包括以下内容:

零宕机重载

包括NGINX Ingress Controller在内的许多代理类型,重载都会导致短暂的时间窗口,此时后端服务不可用。在许多情况下,当HAProxy需要刷新其配置时,它可以完全避免重新加载。

它的Runtime API允许完全在内存中实现更改。然而,由于HAProxy的无中断重载,需要重载的更改不会导致停机。这意味着,无论你何时从Ingress规则中添加或删除路径、更新Secret或更改注释都不会对流量产生影响。

增压性能

由于HAProxy对性能的关注,你会发现每秒可处理的请求数会立即受到影响——明显增加。此外,通过弹性二进制树等独特的算法,HAProxy比其他controller使用更少的资源。

可观察性

使用Stats页面、Runtime API和raw configuration,你可以轻松查看配置好的Pod以及相关联的后端和它们的健康状态。默认的Ingress controller会要求你安装krew以查看这一信息。

HAProxy提供大量有关流向你的集群的流量指标。在HAProxy Stats页面上,你将找到用于跟踪请求率、响应时间、活动连接、成功和错误响应以及通过的数据量的统计数据。这篇文章(https://www.haproxy.com/blog/exploring-the-haproxy-stats-page/ )介绍了所有提供的指标,这些指标也是通过Prometheus端点暴露的。

HAProxy会发布详细的日志,其中包含请求时间数据,可以让你精确地指出请求中的慢速,断开代码将显示请求终止的方式和原因,以及显示整个集群中的活跃连接数。

可调整的负载均衡

与其他Ingress Controller相比,HAProxy提供了更多的负载均衡算法,包括轮询法(Round Robin)、最小连接和基于哈希的算法。这种选择很重要,因为不同类型的服务在不同类型的负载分布中表现出色。例如,保持连接时间较长的服务在使用最小连接算法时表现更好,该算法在向服务器发送新客户端之前检查服务器的繁忙程度。你可以在你的Ingress对象中通过添加一个名为haproxy.org/load-balance 的注释来定义,使用均衡文档中列出的值(https://www.haproxy.com/documentation/hapee/latest/onepage/#balance )。

一旦你启用HTTPS,HAProxy就会自动启用端到端的HTTP/2。NGINX在客户端支持HTTP/2,同时HAProxy也支持通过HTTP/2连接到你的pods。此外,HAProxy还支持gRPC服务的端到端streaming。

增强的安全性

诸如白名单IP地址以及强制速率限制等安全功能形成了一个重要的保护层。使用HAProxy,这些功能都能够立刻实现并且你可以使用注释调整它们。当你的集群托管多个服务时,速率限制是至关重要的,因为你一定不会希望一个服务占用所有的带宽。

过载保护队列

HAProxy的连接队列提供了对流量峰值的保护。通过在Kubernetes服务上设置pod-maxconn注释,一组pod会获得最大并发连接数限制,额外的连接数会被排队,从而防止pod超载。

结 论

本文介绍了HAProxy的6个主要特性,可以帮助你更清晰地了解HAProxy Ingress Controller的优势。如果你还想更深入地了解HAProxy,你也可以通过Rancher应用商店轻松部署它,并根据官方文档(https://www.haproxy.com/documentation )的指引进行尝试才能对其有更深入的了解和体会,也能帮助你选出合适自己的Ingress Controller。

一文了解HAProxy主要特性的更多相关文章

  1. HAProxy安装文档

    HAProxy安装文档 [toc][TOC] 一.环境说明 系统环境:CentOS Linux release 7.2.1511 (Core) 系统内核:3.10.0-327.el7.x86_64 软 ...

  2. HAproxy负载均衡

    HAproxy 简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用于那些负载特大的web站点,这 ...

  3. HAProxy从零开始到掌握

    转自:https://www.jianshu.com/p/c9f6d55288c0 目录: HAProxy是什么 HAProxy的核心能力和关键特性 HAProxy的安装和运行 使用HAProxy搭建 ...

  4. Kubernetes基于haproxy实现ingress服务暴露

    HAproxy Ingress控制器 HAproxy Ingress简介 HAProxy Ingress watches in the k8s cluster and how it builds HA ...

  5. OSCHina技术导向:开源企业ERP系统Opentaps

    opentaps Open Source ERP + CRM 基于 Apache OFBiz (The Open For Business Project ) 构建, 是一款设计良好, 逐渐流行起来的 ...

  6. docker swarm英文文档学习-3-开始

    https://docs.docker.com/engine/swarm/swarm-tutorial/ 1)Getting started with swarm mode 本教程向你介绍Docker ...

  7. python(13)- 文件处理应用Ⅱ:增删改查

    用户选择1,增加功能: 用户输入www.oldboy2.org和server 11111 weight 2222 maxconn 3333后, 在www.oldboy2.org下增加一条server信 ...

  8. Haproxy-4层和7层代理负载实战

    目录 HAProxy是什么 HAProxy的核心能力和关键特性 HAProxy的核心功能 HAProxy的关键特性 HAProxy的安装和运行 安装 运行 添加日志 使用HAProxy搭建L7负载均衡 ...

  9. Elasticsearch 开箱指南

    内容概要 ES 基础介绍,重点是其中的核心概念. 基础 API 实践操作. 1. 基础介绍 Elasticsearch (ES) 是一个数据库,提供了分布式的.准实时搜索和分析. 基于 Apache ...

随机推荐

  1. mysql数据库-mysql数据定义语言DDL (Data Definition Language)归类(六)

    0x01 创建数据库并指定字符集和排序规则 -- 三种实例写法 create database temptab2 character set utf8 collate utf8_general_ci; ...

  2. Php-webdriver 的安装与使用教程

    Php-webdriver 是 Facebook 开发的基于 PHP 语言实现的 Selenium WebDriver 客户端组件,可以用它来操作浏览器.常见的操作包括:自动化测试.采集数据等. 安装 ...

  3. mui消息弹出确认框

    var btnArray = ['以后再说', '前往添加']; mui.confirm('你需要即时添加员工才可正常使用', '添加员工', btnArray, function(e) { if ( ...

  4. 【百度前端学院 Day4】背景边框列表链接和更复杂的选择器

    1. 背景 背景指的是元素内容.内边距和边界下层的区域(可用background-clip修改) background-color  背景色 background-image  背景图片(url) b ...

  5. jQuery实现打飞机游戏

    玩法介绍:不同样式的飞机出来其它飞机会暂停飞行且处于无敌状态,子弹对它无效,你操纵的飞机不能碰到任何飞机,发出的子弹可以攻击正在飞行的飞机,每击落一架飞机会记录分数,你操纵的飞机碰到其它飞机即为游戏结 ...

  6. 撒花,推荐一下我怒肝的 GitHub

    缘起 之前一直有很多小伙伴们找我,让我聊一聊如何学习 Java ,我都直接回复了一个思维导图,后来想一想觉得回答不是很认真,我的初衷是想让小伙伴们根据思维导图中的知识点,采取各个击破 的原则,哪里不会 ...

  7. Dubbo——服务发布原理

    引言 在使用Dubbo的时候你一定会好奇它是怎么实现RPC的,而要了解它的调用过程,必然需要先了解其服务发布/订阅的过程,本篇将详细讨论Dubbo的发布过程. 源码分析 发布服务 新学Dubbo大都会 ...

  8. 一文搞懂:Adaboost及手推算法案例

    boosting Boosting 算法的特点在于:将表现一般的弱分类器通过组合变成更好的模型.代表自然就是我们的随即森林了. GBDT和Adaboost是boost算法中比较常见的两种,这里主要讲解 ...

  9. RockeMQ安装与入门

    淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,淘宝开发团队认为存储部分可以进一步优化,2011年初,Linkin开源 ...

  10. ThinkPHP5使用PHPExcel实现数据导出功能

    1.将PHPExcel类库文件夹放入extend目录下 2.导出功能实现 public function download(){ if(request()->isPost()){ $val = ...