API网关之Hango

news2024/11/27 22:28:54

Hango 是基于云原生和服务网格技术的开源 API 网关,专为现代分布式系统设计,提供高效、安全、可扩展的流量管理解决方案。Hango 网关是基于 Envoy Proxy 构建的,能够处理复杂的微服务架构中流量控制、服务治理和安全需求。Hango 强调与 Kubernetes 等云原生生态系统的深度集成,支持灵活的架构和流量治理功能。以下是对 Hango 的详细介绍:

1. 核心功能

Hango 网关在流量管理、安全、性能和可扩展性方面提供了全面的解决方案,主要功能包括:

流量管理
  • 动态路由:Hango 通过灵活的路由规则实现流量在不同服务之间的分发,可以基于 HTTP 方法、路径、头信息、权重等进行路由。
  • 负载均衡:支持多种负载均衡策略,如轮询、随机、最少连接等,确保流量能够均匀地分布到后端服务。
  • 服务发现:与 Kubernetes 和服务网格等平台集成,自动发现服务,动态调整路由规则。
  • 故障处理:支持超时、重试、断路器等机制,帮助提高系统的鲁棒性和容错能力。
安全管理
  • 身份认证与授权:支持 OAuth、JWT 等认证机制,以及基于角色的访问控制(RBAC),确保 API 访问的安全性。
  • 数据加密:支持 TLS/SSL 加密,确保数据在传输中的安全性。
  • 速率限制:提供速率限制功能,防止流量突发对后端服务的冲击,保障服务的稳定性。
  • 防火墙:可以设置 IP 白名单和黑名单,防止恶意请求对系统的攻击。
性能与可扩展性
  • 高性能:由于基于 Envoy Proxy,Hango 具有高性能的请求处理能力,支持高并发环境下的低延迟请求转发。
  • 弹性伸缩:与 Kubernetes 深度集成,能够根据流量负载动态调整资源,确保系统的稳定性和高可用性。
  • 插件扩展:支持插件机制,可以通过自定义插件实现特定功能,方便企业定制流量控制逻辑。

2. 架构

Hango 的架构主要由以下几个组件组成:

  • Envoy Proxy:Hango 的核心数据平面组件,负责处理流量的转发、负载均衡、安全管理等。
  • 控制平面:用于管理和配置 Envoy Proxy,包括路由规则、认证策略、安全策略等。
  • 插件系统:允许开发者在标准功能之外扩展网关能力,通过 Lua 或 WASM 等技术加载和运行自定义插件。
  • 监控与可视化:Hango 提供完善的监控机制,可以与 Prometheus、Grafana 等监控系统集成,提供流量、健康状态、请求延迟等指标的实时监控。

3. 与 Kubernetes 的集成

作为云原生 API 网关,Hango 与 Kubernetes 进行深度集成,提供了一系列功能来简化在 Kubernetes 中的部署与管理:

  • 服务发现与自动化路由:Hango 能够自动发现 Kubernetes 集群中的服务,并根据服务注册的变化自动更新路由规则。
  • Ingress Controller:Hango 可以作为 Kubernetes 的 Ingress Controller,管理外部流量的入口,并将流量引导至 Kubernetes 集群中的内部服务。
  • 服务网格支持:与服务网格系统(如 Istio 或 Linkerd)兼容,Hango 可以作为流量的边缘网关,配合服务网格实现跨集群或多租户环境下的流量管理。

4. 使用场景

Hango 广泛适用于分布式系统中的以下场景:

  • 微服务架构中的 API 管理:Hango 可以作为企业 API 网关,管理微服务之间的流量,提供服务的注册、发现、认证等功能。
  • 多租户与跨集群流量管理:在复杂的分布式系统中,Hango 提供强大的流量管理能力,能够轻松应对多租户系统或跨集群的流量控制。
  • 企业级安全需求:通过集成身份认证、数据加密、速率限制等功能,Hango 可以确保企业系统的安全性。
  • 混合云与多云架构:Hango 支持跨云架构的流量管理,使得企业可以在多个云环境中无缝管理流量。

5. 生态与扩展

Hango 在开源社区和云原生生态中有良好的支持,具备以下扩展能力:

  • 与 Envoy 生态的兼容:作为基于 Envoy 构建的网关,Hango 可以直接利用 Envoy 的插件和扩展机制。
  • 与 Prometheus、Grafana 等监控系统集成:提供流量监控和性能分析,帮助开发者实时掌握系统的健康状态。
  • 与 DevOps 工具的集成:Hango 支持与 CI/CD 工具的无缝集成,方便自动化部署和版本管理。

6. Hango 的优势

  • 高性能:基于 Envoy,Hango 提供了低延迟、高吞吐量的流量管理能力,特别适用于高并发场景。
  • 灵活性:支持自定义路由规则、认证策略、插件扩展等功能,能够灵活适应不同的业务需求。
  • 安全性:内置多种认证、加密和访问控制机制,保障 API 和服务的安全性。
  • 易于集成:与 Kubernetes、Prometheus、Grafana 等主流云原生技术无缝集成,适合现代云原生架构。

7. Hango 的安装与使用

Hango 网关的安装和使用主要依赖 Kubernetes 环境,结合 Helm 包管理工具来进行快速部署。以下是 Hango 的安装步骤和使用指南。

1. 安装前准备

先决条件:
  • Kubernetes 集群:确保已经部署了一个 Kubernetes 集群(建议 v1.19 及以上版本)。
  • Helm:Helm 是 Kubernetes 的包管理工具,用于安装 Hango。确保已经安装 Helm(建议 v3 版本)。 安装 Helm:
    curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
    
  • Kubectl:用于管理 Kubernetes 集群的命令行工具。

2. Hango 安装步骤

1. 添加 Hango Helm 仓库

首先,您需要将 Hango 的 Helm 仓库添加到 Helm 包管理工具中。

helm repo add hango https://hango-io.github.io/charts/
helm repo update
2. 安装 Hango

使用 Helm 安装 Hango。在安装时,可以指定自定义配置,默认配置可以满足基础的安装需求。

helm install hango-gateway hango/hango-gateway --namespace hango-system --create-namespace

在该命令中:

  • hango-gateway 是你为 Hango 实例指定的名称。
  • hango/hango-gateway 是 Helm 仓库的路径。
  • --namespace hango-system 指定 Hango 安装的命名空间,并且会自动创建命名空间。

安装成功后,您可以使用以下命令查看 Hango 的状态:

kubectl get pods -n hango-system

如果看到所有的 Pod 都处于 Running 状态,说明 Hango 已经成功安装并启动。

3. 配置 Hango 的入口服务

Hango 网关的入口服务用于管理外部流量的访问。默认情况下,Hango 会创建一个 LoadBalancer 类型的服务。如果在云环境下,您可以使用云提供商的负载均衡器访问 Hango。

查看入口服务的地址:

kubectl get svc -n hango-system

找到 hango-gateway 服务,查看其外部 IP 地址或域名。外部客户端可以通过这个地址访问 Hango 管理的 API。

3. 使用 Hango

1. 创建服务和路由

在安装并启动 Hango 后,您可以开始配置服务和路由规则,管理流量的路由和负载均衡。

创建服务

首先,定义一个后端服务,通过 Kubernetes 的 Service 对象暴露应用程序。假设您有一个后端应用 app-service,它运行在 default 命名空间下。

创建服务的 YAML 文件:

apiVersion: v1
kind: Service
metadata:
  name: app-service
  namespace: default
spec:
  ports:
    - port: 80
      targetPort: 8080
      protocol: TCP
  selector:
    app: app

应用这个 YAML 文件:

kubectl apply -f app-service.yaml
创建路由

接下来,您可以为后端服务创建一个路由,以便通过 Hango 网关访问这个服务。

创建路由的 YAML 文件:

apiVersion: gateway.hango.io/v1
kind: Route
metadata:
  name: app-route
  namespace: hango-system
spec:
  host: example.com
  paths:
    - path: /
      service:
        name: app-service
        port: 80

应用这个 YAML 文件:

kubectl apply -f app-route.yaml

在这个例子中,您创建了一个路由 app-route,将所有 example.com 的流量转发到后端服务 app-service

2. 访问服务

根据配置的路由,外部用户可以通过网关的外部 IP 或域名访问 example.com 以访问后端服务 app-service。您可以更新本地的 /etc/hosts 文件,指向 Hango 网关的 IP 地址,来测试访问:

sudo echo "<gateway_external_ip> example.com" >> /etc/hosts

然后,您可以通过浏览器或 curl 进行访问:

curl http://example.com

4. 监控和管理

Hango 提供了完善的监控和管理功能,能够与主流的监控系统(如 Prometheus 和 Grafana)集成。

1. 监控 Hango 网关

Hango 可以自动将指标数据导出到 Prometheus,您只需在安装时启用监控功能:

helm install hango-gateway hango/hango-gateway --namespace hango-system --set prometheus.enabled=true

配置好 Prometheus 后,您可以通过 Grafana 来可视化流量、延迟、请求成功率等关键指标。

2. 通过 Hango 控制台管理

Hango 还提供了控制台 UI 来简化网关的管理工作。您可以通过控制台创建路由、配置服务、管理插件等。通过访问 http://<gateway_external_ip>:<ui_port>(通常为端口 9000),可以访问 Hango 的控制台界面。

5. 常见问题

1. 无法访问网关外部服务
  • 确保 Kubernetes 集群的网络配置允许外部访问。
  • 检查 Hango 的 Service 是否暴露了外部 IP 地址或负载均衡器。
2. 路由不生效
  • 检查路由配置中的 host 是否与请求的域名匹配。
  • 确保后端服务已正确配置并在 Kubernetes 集群中运行。
3. 性能问题
  • 确保 Hango 的资源分配适当,可以根据负载情况调整 Kubernetes 中的 Pod 副本数或资源限制。
  • 使用 Hango 的监控功能分析性能瓶颈,优化路由规则或负载均衡策略。

结论

Hango 是一个功能强大、性能优越的开源 API 网关,特别适合微服务架构、Kubernetes 生态中的流量管理需求。其与 Envoy Proxy 的深度集成,使其在高并发环境下表现出色,并且具备良好的扩展性和灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2204364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java | Leetcode Java题解之第472题连接词

题目&#xff1a; 题解&#xff1a; class Solution {Trie trie new Trie();public List<String> findAllConcatenatedWordsInADict(String[] words) {List<String> ans new ArrayList<String>();Arrays.sort(words, (a, b) -> a.length() - b.length(…

大模型1-本地部署实现交互问答

任务 在本地部署大模型&#xff0c;调用大模型进行对话。 添加库&#xff1a; 1、Transformer Transformers 是由 Hugging Face 开发的一个开源库&#xff0c;广泛应用于自然语言处理&#xff08;NLP&#xff09;任务。其主要功能是简化了对大型预训练语言模型的加载和使用…

神经网络整体架构

文章目录 1.输入层Input2.卷积层Conv3.激活函数层(一)Sigmoid 函数(二)Tanh 函数(三)修正线性单元ReLU(四)Leaky ReLU函数(带泄露的Relu)(五)参数化ReLU 4.池化层POOL5.全连接层FC6.输出层Output 用全连接神经网络处理大尺寸图像具有三个明显的缺点&#xff1a; ①将图像展开为…

从加载到对话:使用 Transformers 本地运行量化 LLM 大模型(GPTQ AWQ)

&#xff08;无需显卡&#xff09;使用 Transformers 在本地加载具有 70 亿参数的 LLM 大语言模型&#xff0c;通过这篇文章你将学会用代码创建属于自己的 GPT。 LLM 的加载、微调和应用涉及多个方面&#xff0c;今天我们先聚焦于加载&#xff0c;本文的难点仅在于正确安装和知…

SQL第16课挑战题

1. 美国各州的缩写应始终用大写。更新所有美国地址&#xff0c;包括供应商状态&#xff08;Vendors表中的vend_state)和顾客状态&#xff08;customers表中的cust_state),使它们均为大写。 2. 第15课挑战题1要求将自己添加到customers表中&#xff0c;现在删除自己&#xff0c;…

活动预告丨第二十八期 “CCF 开源高校行”暨“木兰技术开放日”活动走进北京大学...

点击蓝字 关注我们 CCF Opensource Development Committee 开源高校行 北京大学站 在数字化转型的浪潮中&#xff0c;开源软件人才的培养是信息技术创新发展的重要根基&#xff0c;高校学子作为我国开源生态的源头活水备受重视。10月9日下午15:00-17:10 “CCF 开源高校行”暨“…

【VScode】如何使用详细步骤【笔记】、配置 C / C ++【笔记】

2024 - 10 - 10 - 笔记 - 24 作者(Author)&#xff1a;郑龙浩(仟濹) 该笔记写于 2024-07-02 摘抄到博客上的时间是 2024-10-10 VScode配置 C / C 笔记 我是看了下方链接的视频后为了方便后期复习做的笔记: B站某UP主的视频如下&#xff1a; VScode配置C/C开发环境&#xff…

科研绘图系列:R语言绘制SCI文章图2

文章目录 介绍加载R包导入数据图a图b图d系统信息介绍 文章提供了绘制图a,图b和图d的数据和代码 加载R包 library(ggplot2) library(dplyr) library(readxl) library(ggpmisc)导入数据 数据可从以下链接下载(画图所需要的所有数据): 百度网盘下载链接: https://pan.baid…

S14 瑞士轮胜者组 TES 2:0 击败 DK 晋级淘汰赛

电子竞技的赛场上&#xff0c;总有一些瞬间&#xff0c;让所有的质疑和嘲笑变得苍白无力。 今天&#xff0c;滔搏战队用自己的行动&#xff0c;再次证明了这一点。 他们不仅翻越了挡在面前的高山&#xff0c;更让世界听到了他们的故事。 这支曾被低估的队伍&#xff0c;在夏季…

使用Pytorch+Numpy+Matplotlib实现手写字体分类和图像显示

文章目录 1.引用2.内置图片数据集加载3.处理为batch类型4.设置运行设备5.查看数据6.绘图查看数据图片(1)不显示图片标签(2)打印图片标签(3)图片显示标签 7.定义卷积函数8.卷积实例化、损失函数、优化器9.训练和测试损失、正确率(1)训练(2)测试(3)循环(4)损失和正确率曲线(5)输出…

绘图技巧 | 矩形树状图(Treemap)绘图技巧分享~~

今天这篇推文&#xff0c;小编还是像往常一样交给大家绘图技巧&#xff0c;今天的主角就是-*树形矩阵图(Treemap)*。绘制树形图使用R或者Python都是可以绘制的&#xff0c;今天我们还是使用R进行绘制(Python绘制结果为交互式&#xff0c;后面统一介绍相应的库)。在R中有专门的包…

Java项目-----图形验证码登陆实现

原理: 验证码在前端显示,但是是在后端生成, 将生成的验证码存入redis,待登录时,前端提交验证码,与后端生成的验证码比较. 详细解释: 图形验证码的原理(如下图代码).前端发起获取验证码的请求后, 1 后端接收请求,生成一个键key(随机的键) 然后生成一个验证码作为map的valu…

npm运行时出现npm ERR! builtins is not a function报错!

项目场景&#xff1a; 项目运行时什么都没动都没改突然运行不起来了&#xff0c;报错 TypeError: builtins is not a function 代码什么都没动&#xff0c;不是代码问题&#xff0c;排查后只有可能是node和npm的问题&#xff0c;所以卸载掉node重装重启 解决方案&#xff1a; …

Python:赋值的本质其实是引用

相关阅读 Pythonhttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 在Python编程中&#xff0c;我们经常会遇到各种赋值操作&#xff0c;无论是简单的变量赋值&#xff0c;还是复杂的数据结构操作。表面上看&#xff0c;赋值就是把一个值…

数字工厂管理系统如何优化生产流程

在当今快速变化的制造业环境中&#xff0c;提高生产效率、降低成本并确保产品质量是企业持续发展的关键。数字工厂管理系统作为智能制造的重要组成部分&#xff0c;正逐渐成为优化生产流程、推动产业升级的重要工具。本文将探讨数字工厂管理系统如何通过智能化、自动化和数据分…

目标检测中的损失函数

损失函数是用来衡量模型与数据的匹配程度的&#xff0c;也是模型权重更新的基础。计算损失产生模型权重的梯度&#xff0c;随后通过反向传播算法&#xff0c;模型权重得以更新进而更好地适应数据。一般情况下&#xff0c;目标损失函数包含两部分损失&#xff0c;一个是目标框分…

基于单片机的穿戴式泳池遇险紧急呼救系统的设计

本计基于单片机的穿戴式泳池遇险紧急呼救系统装置。该装置采用STC12C5A60S2单片机与心率检测模块MAX30102的一体化脉冲血氧分析仪和心率监测器&#xff0c;对人体的心跳进行了实时检测。该装置由发送端和接收端两部分组成&#xff0c;中间由LORA无线通信模块进行数据传输&#…

使用Pytorch写简单线性回归

文章目录 Pytorch一、Pytorch 介绍二、概念三、应用于简单线性回归 1.代码框架2.引用3.继续模型(1)要定义一个模型&#xff0c;需要继承nn.Module&#xff1a;(2)如果函数的参数不具体指定&#xff0c;那么就需要在__init__函数中添加未指定的变量&#xff1a; 2.定义数据3.实例…

掌握未来技能:亚马逊云科技推出生成式 AI 认证计划!

目录 前言 生成式 AI 的力量 1. 内容创造的无限可能 2. 数据增强和个性化 3. 提高生产力 4. 教育和研究的辅助工具 5. 突破语言障碍 关于亚马逊云科技生成式 AI 认证 1. 认证目标 2. 认证内容 3. 认证优势 如何获得认证 1. 在线学习 2. 实践考试 3.AWS Certifie…

连肝了多天学习MySQL索引与性能优化,详细总结一下索引的使用与数据库优化

文章目录 索引是什么&#xff1f;索引的作用初步认识索引索引的类型按照数据结构分类BTREE索引 哈希索引 按功能逻辑进行分类唯一索引普通索引主键索引全文索引 按照字段的个数进行划分单列索引多列&#xff08;组合&#xff0c;联合&#xff09;索引 小结索引的设计原则数据准…