【云原生网关】Higress 从部署到使用详解

目录

二、网关概述

2.1 什么是云原生网关

2.2 常见的云原生网关

2.2.1 Nginx

2.2.2 ApiSix

2.2.3 Kong

2.2.4 Apache Shenyu

2.2.5  Higress

2.2.6 Envoy​​​​​​​

三、higress介绍

3.1 什么是higress

3.2 Higress 定位

3.3 Higress 内核选择

四、Higress搭建过程

4.1 higress常用部署模式

4.2 环境准备

4.3 docker部署higress过程

4.3.1 下载安装脚本

4.3.2 配置安装参数

4.3.3 检查容器

4.3.4 浏览器访问

4.3.5 容器服务说明

五 、Higress控制台介绍

5.1 菜单介绍

5.1.1 服务来源

5.1.2 服务列表

5.1.3 路由配置

5.1.5 域名管理

5.1.6 插件管理

六、 配置路由转发功能

6.1 配置域名映射

6.2 准备一个微服务

6.2.1 添加一个测试接口

6.2.2 上传服务器并启动服务

6.3 Higress控制台配置路由转发过程

6.3.1 增加域名

6.3.2 配置路由策略

6.3.3 效果测试

七、写在文末


随着以k8s为主流的云原生技术的快速发展,越来越多的企业开始在生产实施中以k8s为基座进行容器化部署。于是,以k8s为核心一整套周边的生态组件也得到了很大的发展,它们的组合和联动也逐渐形成了行业内相关的云原生部署和治理解决方案。在构建云原生部署模式下,一个很难绕过不提的话题就是云原生网关。

二、网关概述

网关,顾名思义网络流量的屏障、关口、入口,对大多数服务端开发的同学来说,接触到的网关主要是流量网关和业务网关,流量网关主要提供全局性、与服务端业务无关的配置策略,比如大家熟知的Nginx,而业务网关主要是针对后端微服务而言,网关的配置策略与微服务存在着较为紧密的耦合关系,业务网关也可以简单理解为API网关,比如大家熟悉的springcloud微服务生态中的zuul,gateway。

2.1 什么是云原生网关

云原生网关是一个位于云原生应用程序架构中的重要组件,它充当着应用程序和外部网络之间的桥梁和入口。它的主要功能包括路由请求、负载均衡、安全认证和授权、流量管理和监控等。云原生网关基于可扩展的容器化架构,为云原生应用提供了一种灵活且高效的方式来管理和调整应用的网络流量。

在容器化的云原生大背景下,Kubernetes已经成为基础设施与上层应用的标准接口。在k8s部署模式下,同样面临着对出入k8s流量的运维和治理。

Kubernetes集群天然的内外网络隔离环境,使得外部流量进入Kubernetes集群内部需要通过入口网关,因此Kubernetes主要通过Ingress来规范化入口网关的定义与标准,虽然Ingress标准存在一些如路由表达能力弱等不足之处,社区已经在积极推进Gateway API标准定义来解决,但不可否认的是目前Ingress标准仍然占据主流。

2.2 常见的云原生网关

为弥补k8s自身网关治理能力的弱点,基于k8s强大而灵活的动态扩展能力,依托容器化编排服务能力的优势,各厂商为了适配自身的业务场景,在容器化部署模式下,满足更为丰富的网关治理场景,于是纷纷推出云原生网关,比如apisix,kong,apache shenyu(神鱼)等,这些云原生网关一开始是为了扩展k8s网关的能力缺失而开发的产品,后来随着使用规模扩大,逐步发展成为业内稳定成熟的云原生网关解决方案。

下面列举几种常用的可作为云原生网网关方案的选择产品。

2.2.1 Nginx

  • 轻量级;

  • 部署和运维简单,经历过各类场景的检验比较稳定;

  • 特殊的场景可以借助lua进行定制化;

2.2.2 ApiSix

  • APISIX 支持集群管理和动态加载

  • 支持可视化及API配置数据

  • 支持多语言插件

  • 多服务发现组件

  • 较为丰富的插件体系及开箱即用的能力

使用场景

南北向流量代理;东西向流量代理;api网关;边车

劣势

  • 需要依赖etcd

  • 采用CRD部署时,项目上不一定开放支持

  • 采用adminAPI部署时,要配置接口权限及黑白名单

  • 采用Igress部署时,插件还是需要通过CRD部署

2.2.3 Kong

  • 平台无关,可以裸机或Kubernetes上运行;

  • 配置友好,可以基于管控台配置规则动态生效;

  • 基于OpenResty(Nginx + lua)打造,网关基础能力稳定

  • 使用场景

    • 南北向流量代理;

    • API网关;

劣势

  • 强依赖于Postgres数据库

  • 不提供Console管理台

  • 高级特性(如缓存、ssl动态管理)只在企业版提供

2.2.4 Apache Shenyu

  • 支持协议类型丰富:Apache Dubbo,Spring Cloud,gRPC,Motan,SOFA,TARS,WebSocket,MQTT;

  • 内置各类安全性:签名,OAuth 2.0,JSON Web令牌,WAF插件;

  • 提供动态流量控制,用户菜单权限的可视化后端;

  • 使用场景

    • API网关

劣势

  • 适合作为微服务网关使用,不适合做接入层网关

2.2.5  Higress

  • 南北向流量代理;
  • 东西向流量代理;
  • api网关;
  • 边车

使用场景

  • 深度集成Dubbo、Nacos、Sentinel等微服务技术栈

  • 强依赖于容器环境

  • 二次开发成本高

劣势

  • 深度集成Dubbo、Nacos、Sentinel等微服务技术栈

  • 强依赖于容器环境

  • 二次开发成本高

2.2.6 Envoy

  • 支持xDS规范动态控制

  • 平台无关,可以在裸机和Kubernetes上运行

  • 同时可作为南北向网关及东西向SideCar使用

  • Filter配置支持各种嵌套极其灵活

  • 支持WASM插件扩展

  • 支持动态更新

  • 支持热启动

  • 云原生友好,边缘代理友好

  • 通过插件机制几乎支持了所有已知协议:http、websocket、dubbo、zookeeper、kafka、mysql……

使用场景

  • 南北向流量代理;东西向流量代理;api网关;边车;……

劣势

  • 使用门槛较高

  • 二次开发成本较高

三、higress介绍

3.1 什么是higress

Higress是基于阿里内部的Envoy Gateway实践沉淀、以开源Istio + Envoy为核心构建的下一代云原生网关,实现了流量网关 + 微服务网关 + 安全网关三合一的高集成能力,深度集成Dubbo、Nacos、Sentinel等微服务技术栈,能够帮助用户极大的降低网关的部署及运维成本且能力不打折;在标准上全面支持Ingress与Gateway API,积极拥抱云原生下的标准API规范;同时,Higress Controller也支持Nginx Ingress平滑迁移,帮助用户零成本快速迁移到Higress。

官网地址: https://higress.cn/
文档地址: https://higress.cn/docs/latest/overview/what-is-higress/

3.2 Higress 定位

在虚拟化时期的微服务架构下,业务通常采用流量网关 + 微服务网关的两层架构,流量网关负责南北向流量调度和安全防护,微服务网关负责东西向流量调度和服务治理,而在容器和 K8s 主导的云原生时代,Ingress 成为 K8s 生态的网关标准,赋予了网关新的使命,使得流量网关 + 微服务网关合二为一成为可能。

作为面向南北向的公网网关,使用Waf防护异常流量是很常规的需求,而且随着互联网环境变得越来越复杂,用户对防护的诉求是持续增强的,常规做法是将流量先接入Waf安全网关,过滤后再将流量转发给流量网关,最后到达微服务网关;Higress希望通过内置Waf模块,使得用户的请求链接只经过Higress就可以同时完成Waf防护、流量分发、微服务治理,既可以提升链路RT,也可以降低网关的运维复杂度。因此Higress实现了流量网关 + 微服务网关 + 安全网关三合一的高集成能力。

3.3 Higress 内核选择

在容器化的云原生大背景下,Kubernetes已经成为了基础设施与上层应用的标准接口,Kubernetes集群天然的内外网络隔离环境,使得外部流量进入Kubernetes集群内部需要通过入口网关,因此Kubernetes通过Ingress来规范化入口网关的定义与标准,虽然Ingress标准存在一些如路由表达能力弱等不足之处,社区已经在积极推进Gateway API标准定义来解决,但不可否认的是目前Ingress标准仍然占据主流,CNCF年度报告中也单独统计了Ingress Provider(Ingress标准的实现方统称为Ingress Provider)的使用情况。

从上述统计报告中可以看到虽然目前Nginx Ingress仍然占据K8s Ingress Provider榜首,但Envoy的增长是最快的,已经从2019年的不足20%增长为2020年的37%,且仅在Nginx Ingress之后,增长势头非常迅猛,这说明选择以Envoy为内核是符合云原生发展趋势的;而且随着Service Mesh逐步被大众认可,Istio + Envoy的体系可以同时覆盖Mesh与Ingress领域,实现以一套技术架构调度东西向、南北向全域流量的目标,这对用户来说也是非常有意义的。

四、Higress搭建过程

4.1 higress常用部署模式

higress常用的部署模式包括:

  • 物理机、虚拟机部署;

  • 基于helm云原生部署;

    • Helm 是一个用于自动化管理和发布 Kubernetes 软件的包管理系统。通过 Helm 可以在您的 Kubernetes 集群上快速部署安装 Higress 网关。

  • 基于docker compose独立部署;

    • Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过它,我们可以使用 YAML 文件来脱离 K8s 集群来实现 Higress 网关的独立部署。

4.2 环境准备

这里列举基于docker部署higress的最小化环境

  • 虚拟机,或云服务器,2C4G(至少);

  • 提前安装nacos;

  • docker环境;

  • docker-compose环境;

4.3 docker部署higress过程

4.3.1 下载安装脚本

打开服务器终端,执行以下命令下载 Higress 的安装

curl -fsSL https://higress.io/standalone/get-higress.sh | bash -s --

4.3.2 配置安装参数

打开终端,执行以下docker命令启动higress容器,该命令包括自动启动和使用内置 Nacos

  • 也可以跳过上一步直接执行这一个完整的命令即可;

curl -fsSL https://higress.io/standalone/get-higress.sh | bash -s -- ./higress -a --use-builtin-nacos

安装脚本提供了多个选项来自定义安装过程,以下是关键参数及其说明,您可以根据实际情况选择需要的参数。例如,要进行基本的单机部署,可以考虑以下参数组合:

  • 目标安装目录,默认为 ./higress

  • 若要自动启动 Higress,在命令后添加 -a--auto-run

  • 配置服务 URL,默认情况下,如果不提供外部配置服务,可以考虑使用内置的 Nacos 服务,通过 --use-builtin-nacos 参数启用

启动效果如下:

看到下面的效果,说明Higress所需的容器都已经全部启动

补充说明:

  • 上述启动Higress时使用的是内置的nacos服务,你也可以使用自己搭建的nacos,启动命令如下
curl -fsSL https://higress.io/standalone/get-higress.sh | bash -s -- -c nacos://IP:8848

4.3.3 检查容器

Higress运行时需要多个容器配合,使用docker ps命令检查上一步的容器是否都正常启动

端口说明:

  • 80端口:Higress 暴露,用于 HTTP 协议代理 ;

  • 443端口:Higress 暴露,用于 HTTPS 协议代理 ;

  • 15020端口:Higress 暴露,用于暴露 Prometheus 指标 ;

  • 8080端口:Higress 控制台 ;

4.3.4 浏览器访问

访问IP:8080,初次访问看到下面的效果,需要重置一下登录密码

修改秘密并重新登录进去,看到如下效果

4.3.5 容器服务说明

从上面启动的多个容器来看,Higress的运行是多个服务配合的,各个服务的作用如下:

  • api-server: 基础设施服务,负责模拟 k8s的api server;

  • controller : 控制面服务,负责收集和整合所有配置数据,以及服务信息列表;

  • pilot:负责下发网关路由数据;

  • gateway,数据面服务,负责承载实际的网关请求;

  • console,网关的控制台;

五 、Higress控制台介绍

实际使用的时候, 与Higress控制台打交道会很多,下面对Higress做基本的介绍说明

5.1 菜单介绍

5.1.1 服务来源

表示服务从哪里获取,本次案例服务来源的是nacos注册中心提供的服务

5.1.2 服务列表

展示nacos服务注册中心(或其他来源的服务)里面有哪些服务信息

5.1.3 路由配置

配置服务的路由信息,即微服务在Higress上面进行服务路由配置相关

5.1.5 域名管理

配置域名,实际线上使用的时候,既可以在路由中设置IP,也可以设置域名

5.1.6 插件管理

扩展功能

六、 配置路由转发功能

下面使用Higress提供的控制台配置一个路由转发的服务, 模拟nginx的路由转发功能

6.1 配置域名映射

后面在控制台中需要配置一个域名才能实现路由转发的功能 , 这里使用一个假的域名进行模拟

编辑配置文件,使用,vi /etc/hosts,将下面的配置贴进去

127.0.0.1 zcy.com
IP zcy.com

然后让配置生效,执行下面的命令

/etc/init.d/network restart

在本机上测试一下效果

6.2 准备一个微服务

为了后面测试服务接口能够通过配置的策略进行转发,提前准备一个微服务,该服务需要注册到nacos中

6.2.1 添加一个测试接口

@RestController
@RequestMapping("/test")
public class NacosController {//http:localhost:8085/test/index@GetMapping("/index")public Object getObjectInfo(){Map<String,Object> result = new HashMap<>();result.put("username","jerry");result.put("age","28");return result;}}

测试一下确保本地能够正常调用

并能将服务正常注册到nacos中

6.2.2 上传服务器并启动服务

本地打成jar包之后上传到服务器, 然后启动服务

确保测试的接口也能正常调用

检查Higress服务列表可以看到已经拉取到nacos上的服务注册信息了

6.3 Higress控制台配置路由转发过程

6.3.1 增加域名

如下 , 在域名管理菜单增加一个域名 ,协议选择http ,如果线上使用,请填写真实的域名和协议

6.3.2 配置路由策略

在路由配置那一栏,添加一个路由策略的配置, 参考下面的配置 , 实际可以根据自己的情况在表单中配置

目标服务就选择 nacos上面那个刚刚注册进去的微服务

配置保存之后在列表上就能看到了

6.3.3 效果测试

在服务器上使用下面的命令执行一下,可以看到能够请求到服务接口

curl localhost/test/index -H 'host: zcy.com'

注意:

在linux系统中通过higress网关访问应用的服务接口,注意需要在请求中添加请求头 ,请求头名称 “host”,值 是我们在higress中配置的域名 “zcy.com

七、写在文末

本文通过较大的篇幅详细介绍了云原生网关Higress从搭建到使用的全部过程,关于Higress,官方还提供了更加丰富和完善的功能用于满足日常运维的各种场景,限于篇幅就不再继续了,有兴趣的同学可以继续深入研究,本篇到此结束,感谢观看。本文源码:源码地址

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vscode + EIDE +CortexDebug 调试Stm32(记录)

{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","configurations": [{"cwd": "${workspaceRoot…

阿里面试竟被“DPO微调”吊打...

最近已有不少大厂都在秋招宣讲&#xff0c;也有一些已在 Offer 发放阶段了。 节前&#xff0c;我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行…

一个可以调节笔记本亮度的程序

在我这台笔记本上&#xff0c;当我把显示模式调为读显时发现右下角的亮度不能调了&#xff0c;就像这样 听说时nvidia显卡不适配的问题 咱也不知道呀 于是我就用java写了程序来调节&#xff0c;用了俩个多月&#xff0c;没啥问题的 打开就是这样拉动直接就可以调节 源码 im…

unity中的组件(Component)

在 Unity 中&#xff0c;组件&#xff08;Component&#xff09;是构成 GameObject 功能和行为的基础单元&#xff0c;每个 GameObject都可以附加一个或多个组件&#xff0c;以实现不同的功能 1. Transform 组件 描述&#xff1a;所有 GameObject 默认都有一个 Transform 组件…

C++研发笔记8——C语言程序设计初阶学习笔记6

在第一部分——课前准备的学习中&#xff0c;我就提到了学习C语言的过程中&#xff0c;练习是必不可少的环节&#xff0c;所以本篇笔记我们来进行记录我们学习《C语言程序设计初阶》阶段的第一篇练习文章。 题目一 下面哪个不是C语言内置的数据类型&#xff1a; A.char B.d…

【大数据学习 | kafka】kafuka的基础架构

1. kafka是什么 Kafka是由LinkedIn开发的一个分布式的消息队列。它是一款开源的、轻量级的、分布式、可分区和具有复制备份的&#xff08;Replicated&#xff09;、基于ZooKeeper的协调管理的分布式流平台的功能强大的消息系统。与传统的消息系统相比&#xff0c;KafKa能够很好…

C++基础:三个字符串也能搞大小?

上一篇说了三个整数比较大小&#xff0c;按照顺序输入的&#xff0c;这次我们看看字符串的&#xff0c;顺便把那个简化以下&#xff1a; 题目:这次输入三个字符串。如果用户输入“Stenbeck", “Hemingway”,“Fitzgerald”,输出将是“Fitzgerald&#xff0c;Hemingway&…

OPPO携手比亚迪共同探索手机与汽车互融新时代

10月23日&#xff0c;OPPO与比亚迪宣布签订战略合作协议&#xff0c;双方将共同推进手机与汽车的互融合作&#xff0c;这一合作也标志着两大行业巨头在技术创新和产业融合上迈出了重要一步&#xff0c;为手机与汽车的深度融合探索新的可能。 OPPO创始人兼首席执行官陈明永、OP…

LCD手机屏幕高精度贴合

LCD手机屏幕贴合&#xff0c;作为智能手机生产线上至关重要的一环&#xff0c;其质量直接关乎用户体验与产品竞争力。这一工艺不仅要求屏幕组件间的无缝对接&#xff0c;达到极致的视觉与触觉效果&#xff0c;还需确保在整个生产过程中&#xff0c;从材料准备到最终成品&#x…

<Project-11 Calculator> 计算器 0.3 年龄计算器 age Calculator HTML JS

灵感 给工人发工资是按小时计算的&#xff0c;每次都要上网&#xff0c;我比较喜欢用 Hours Calculator &#xff0c;也喜欢它的其它的功能&#xff0c; 做个类似的。 我以为是 Python&#xff0c;结果在学 javascript 看 HTML&#xff0c;页面的基础还停留在 Frontpage 2000…

MongoDB简单学习

MongoDB 一、基本使用 1.1业务应用场景 传统的关系型数据库&#xff08;如Mysql&#xff09;&#xff0c;在数据库操作的“三高”需求以及对应web2.0的网站需求面前&#xff0c;显得力不从心 三高&#xff1a; High performance - 对数据库高并发读写的要求Huge Storage -…

1U服务器和Hyper-V虚拟机使用记录

记录最近接触服务器和虚拟机的一些使用操作知识 背景&#xff1a;1U服务器上架使用&#xff0c;备份其他服务器vm虚拟机&#xff0c;Hyper-V管理虚拟机使用测试 设备&#xff1a;IBM3550服务器交换机&#xff0c; 移动硬盘&#xff1a;附加存储盘&#xff0c; u盘1&#xff1…

解决JAVA使用@JsonProperty序列化出现字段重复问题(大写开头的字段重复序列化)

文章目录 引言I 解决方案方案1:使用JsonAutoDetect注解方案2:手动编写get方法,JsonProperty注解加到方法上。方案3:首字母改成小写的II 知识扩展:对象默认是怎样被序列化?引言 需求: JSON序列化时,使用@JsonProperty注解,将字段名序列化为首字母大写,兼容前端和第三方…

【C++】进阶:类相关特性的深入探讨

⭐在对C 中类的6个默认成员函数有了初步了解之后&#xff0c;现在我们进行对类相关特性的深入探讨&#xff01; &#x1f525;&#x1f525;&#x1f525;【C】类的默认成员函数&#xff1a;深入剖析与应用&#xff08;上&#xff09; 【C】类的默认成员函数&#xff1a;深入剖…

【从零开始的LeetCode-算法】910. 最小差值 II

给你一个整数数组 nums&#xff0c;和一个整数 k 。 对于每个下标 i&#xff08;0 < i < nums.length&#xff09;&#xff0c;将 nums[i] 变成 nums[i] k 或 nums[i] - k 。 nums 的 分数 是 nums 中最大元素和最小元素的差值。 在更改每个下标对应的值之后&#xf…

论文略读:Not all Layers of LLMs are Necessary during Inference

202404 LLMs的推理阶段非常昂贵 目前实现LLM高效推理的流行方法包括模型剪枝和稀疏模型 但这些方法可能会改变LLM参数&#xff0c;从而冒险损害其泛化能力。这篇论文动态减少激活神经元的数量以加速LLM推理 根据输入实例动态决定推理终止时刻

openjdk17在java方法中创建对象 类加载在C++源码实现步骤

java的testYYM方法中OtherClass类是如何被加载的 ##有请志愿者java实验类 ByteCodeTest、OtherClass import java.lang.reflect.Method;public class ByteCodeTest {private int insert678;public static void main(String[] args) throws Exception {ByteCodeTest byteCodeT…

leetcode动态规划(十三)-目标和

题目 494.目标和 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 &#xff0c;在 1 之前添…

Unity(四十八):Unity与Web双向交互

效果 游戏对象绑定脚本 游戏脚本源码 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Tent : MonoBehaviour {public Camera camera;// Start is called before the first frame updatevoid Start(){}// Update is called once…

鸿蒙网络编程系列36-固定包头可变包体解决TCP粘包问题

1. TCP数据传输粘包简介 在本系列的第6篇文章《鸿蒙网络编程系列6-TCP数据粘包表现及原因分析》中&#xff0c;我们演示了TCP数据粘包的表现&#xff0c;如图所示&#xff1a; 随后解释了粘包背后的可能原因&#xff0c;并给出了解决TCP传输粘包问题的两种思路&#xff0c;第一…