首页 > 其他分享 >Higress 开源一周年:新版本,新标准,新工具,新征程

Higress 开源一周年:新版本,新标准,新工具,新征程

时间:2024-01-25 17:11:07浏览次数:33  
标签:插件 hgctl 征程 Higress 开源 API higress Gateway

作者:Higress 团队

历程回顾

图片

Higress 开源一年时间,一共发布了 18 个 release 版本,收获了 40 多位社区贡献者和 1800+ star,上图是这一年过来达成的一些关键的里程碑。

前面半年通过集成开源生态,打磨开源版本稳定性,并在发布 1.0 GA 版本后,社区又马不停蹄发布了 1.1 和 1.2 两个重要版本,实现了非 K8s 部署,Knative 适配等核心能力。

Higress 1.3 版本已经正式发布,除了增加的新功能,已有能力也在大量社区用户反馈的过程中不断完善改进,这个版本同时标志着 1.x 进入可以大规模生产使用的状态。

新版本:功能速览

自发布 1.2 版本过去了一个多月时间,1.3 版本正式发布,带来两个全新能力:

  • 新标准: 支持最新版本 Gateway API 标准,并且具备从 Ingress 平滑渐进演进,以及对接多种服务发现机制的能力。
  • 新工具: 正式 release 了 hgctl (Higress Crontroller) 这个 "All in one" 的新工具,不仅可以替代 Helm 实现更简易的安装,还提供了 WASM 插件开发工具包,以及网关配置检查等丰富功能。

除了这两个核心功能外,还有一些实用功能:

  1. 提供了 Higress Admin Java SDK,可以统一对接 K8s 和非 K8s 环境,管理域名/路由等配置
  2. 提供了 OIDC 插件,支持对接 Keycloak/Okta 等第三方身份认证系统
  3. Higress Console 的易用性和安全性提升,不再通过路由暴露,支持界面初始化/修改密码

与此同时,Higress 开源社区已经开始准备踏上一段全新的开源征程...

新标准:支持最新版 Gateway API

Gateway API 在 11 月 1 日正式发布了 1.0.0 版本,其中 GatewayClass, Gateway, HTTPRoute 这三个 API 正式宣布 GA,发布了 v1 版本:gateway.networking.k8s.io/v1。

目前 Higress 已经可以支持这些最新版本的 API 配置,只需在安装/升级 Higress 时配置开启 Gateway API:

  • 使用 Helm :通过参数 --set global.enableGatewayAPI=true
  • 使用 hgctl :通过命令行参数或者 install.yaml 中配置 global.enableGatewayAPI=true

首先创建 GatewayClass 资源:

  apiVersion: gateway.networking.k8s.io/v1
  kind: GatewayClass
  metadata:
    name: higress-gateway
  spec:
    controllerName: "higress.io/gateway-controller"

接着在安装 Higress 的命名空间下,创建 Gateway 资源,通过 gatewayClassName 关联上面创建的 GatewayClass 资源,指定由 Higress 来管理此 Gateway 配置,下面为域名同时配置了 HTTP 和 HTTPS 入口,并为 HTTPS 入口配置了证书:

  apiVersion: gateway.networking.k8s.io/v1
  kind: Gateway
  metadata:
    name: higress-gateway
    namespace: higress-system
  spec:
    gatewayClassName: higress-gateway
    listeners:
    - name: foobar
      hostname: "*.foobar.com"
      port: 80
      protocol: HTTP
      allowedRoutes:
        namespaces:
          from: All
    - name: foobar-https
      hostname: "*.foobar.com"
      port: 443
      protocol: HTTPS
      allowedRoutes:
        namespaces:
          from: All
      tls:
        certificateRefs:
        - kind: Secret
          name: wildcard-foobar-com
        mode: Terminate

因为上面 Gateway 通过 allowedRoutes 配置了允许所有命名空间的路由来关联,所以这里在 default 命名空间下创建 HTTPRoute,关联上面创建的 Gateway,即可定义域名下的具体路由:

  apiVersion: gateway.networking.k8s.io/v1
  kind: HTTPRoute
  metadata:
    name: foobar
    namespace: default
  spec:
    parentRefs:
    - name: higress-gateway
      namespace: higress-system
    hostnames: ["www.foobar.com"]
    rules:
    - matches:
      - path:
          type: PathPrefix
          value: /foo
      backendRefs:
      - name: foo-service
        port: 5678

以上就是 Gateway API 的一个简单用法示例,Gateway API 还有很多功能和玩法,后面 Higress 公众号/博客会出一个系列进行系统分享和介绍。

欢迎结合官方 API 文档,并使用 hgctl (获取方式见下文)在自己电脑上安装一个 local-k8s 模式的 Higress,来开启对这一新标准的探索:

  # 一键安装, 交互式命令选择第一种安装模式 local-k8s,将默认安装 Gateway API CRD
  hgctl install

多种服务发现能力

在 Ingress API 标准下,Higress 对接多种服务发现能力是独树一帜的,在 Gateway API 标准下, Higress 仍就保持了这一能力优势:

首先通过 McpBridge 资源(https://higress.cn/zh-cn/docs/user/mcp-bridge),可以定义多种服务发现机制,例如 Nacos/Zookeper/Eureka/Consul 等。

下面创建一个 HTTPRoute 资源,可以同时对接 K8s 服务,和注册到 Nacos 的服务,并实现灰度路由能力:

  apiVersion: gateway.networking.k8s.io/v1
  kind: HTTPRoute
  metadata:
    name: http
    namespace: default
  spec:
    parentRefs:
    - name: higress-gateway
      namespace: higress-system
    rules:
    - matches:
      - path:
          type: PathPrefix
          value: /
      backendRefs:
      - name: service-provider.DEFAULT-GROUP.public.nacos
        group: networking.higress.io
        port: 8080
        weight: 90
      - name: foo-service
        port: 5678
        weight: 10

和 K8s 服务不同的是,这里 group 为 networking.higress.io 的服务并不需要提前创建 CRD 资源,这更符合传统微服务用户的习惯,即服务模型不需要提前创建,是通过服务节点注册自动生成。

Ingress API 和 Gateway API 之间如何选择

有了 Gateway API,是否应该立即抛弃 Ingress API?

只有最合适的,没有最好的。Gateway API 虽然为更多网关能力做了标准化,但 CRD 的种类和复杂度也增加了,相比之下对于大部分简单用例场景,Ingress API 更加简单易用。

对于以下场景,采用 Gateway API 替代 Ingress API 会带来很大帮助:

  1. 大型团队划分了 SRE 角色和业务研发角色,由 SRE 通过 Gateway 资源统一管理站点域名和证书,由业务研发通过 HTTPRoute 资源管理业务路由,实现职责划分,权限收敛
  2. 创建的路由和 Service 有不在一个命名空间的需求,可以借助 ReferenceGrant 资源实现
  3. 有大量证书需要集中式管理,不希望将证书 Secret 同步到 Ingress 所在命名空间,带来安全风险

Gateway API 的另一个好处是对于更多功能的标准化定义,我们建议遇到实际需要再转换到这个新的标准,而不必盲目跟随。

Higress 支持 Gateway API 和 Ingress API 混合使用,Gateway API 下的域名路由将比 Ingress API 优先匹配,和 Ingress 相同资源名称的 HTTPRoute 还会继承 WASM 插件配置,这样用户可以按需采用 Gateway API,平滑地完成从 Ingress API 向 Gateway API 的演进,无需焦虑 API 标准升级过程中产生业务损失。

新工具:AII in one 的 hgctl

替代 Helm 用于安装/升级

在 K8s 下用 Helm 安装/升级组件很方便,但在 Higress 的场景下仍然存在一些问题:

  1. 无法支持非 K8s 场景下的安装/升级
  2. Higress 有很多安装参数,进行升级等操作时不好维护,使用 reuse-values 有一些副作用,且容易误操作
  3. 无法管理 CRD 跟随版本更新,需要手动更新

Higress 借鉴了 istio 的 istioctl,提供了 hgctl 这个命令行工具解决了上述问题,通过以下命令即可安装 hgctl。

  # 下载最新版 Hgctl:
  curl -Ls https://raw.githubusercontent.com/alibaba/higress/main/tools/hack/get-hgctl.sh | VERSION=latest bash

hgctl 集成了三种 Higress 安装模式,并统一了升级/运维操作:

  1. 本地 K8s 环境(例如 kind/k3s)模式
  2. 正式 K8s 环境模式
  3. 不依赖 K8s 的纯 Docker 环境模式

直接执行 hgctl install 命令即可选择任意模式进行安装

安装配置文件将存至 ~/.hgctl/profiles/install.yaml 目录下,查看该文件内容如下:‍‍

  charts:
    higress:
      name: higress
      # 安装文件的 helm repo 地址
      url: https://higress.io/helm-charts
      # 执行 hgctl upgrade 时将自动更新至最新版本
      version: latest
  console:
    # 开启可观测组件
    o11YEnabled: true
    # 控制台实例数
    replicas: 1
  controller:
    # 控制面组件实例数
    replicas: 1
  gateway:
    # 数据面组件实例数
    replicas: 1
  global:
    # 开启 Gateway API
    enableGatewayAPI: true
    # 开启 Istio API
    enableIstioAPI: true
    # 设置监听的 ingress class
    ingressClass: higress
    # 安装模式
    install: local-k8s
    # 安装命名空间
    namespace: higress-system
  # 配置传递给 helm 的 values 参数 
  values: {}
  profile: local-k8s

修改上面文件的内容后,执行 hgctl upgarde 即可实现参数变更生效,如果只想修改参数,不想触发版本升级,可以将 version 参数固定为当前版本。

WASM 插件开发工具包

为了标准化并简化 WASM 插件的开发/编译/测试/发布,Higress 提供了 hgctl plugin 这一子命令,使用方式为:

  1. hgctl plugin init: 初始化 Golang WASM 插件项目,包括三个文件;
  2. 用户编写 WASM 插件逻辑;
  3. hgctl plugin build --output-type files: 构建 WASM 插件,在本地输出构建产物;
  4. hgctl plugin test: 使用 docker compose 在本地测试 WASM 插件,如需修改插件逻辑,则返回第 2 步;
  5. hgctl plugin build --output-type image: 构建 WASM 插件作为 OCI 镜像上传至镜像仓库;
  6. hgctl plugin install: 安装 WASM 插件,可以通过本地的 yaml 文件或插件项目进行安装。

另外,若需要查看已安装的插件,则使用 hgctl plugin ls;若需要操作插件配置,则使用 hgctl plugin config。

通过这个工具,可以在构建 WASM 插件的同时,根据配置代码自动生成插件的配置说明文档,以及包含插件配置约束的元信息文件,这些内容都将和 WASM 文件一起放入 OCI 镜像制品中,通过镜像方式进行版本管理和分发。这一机制是后续 Higress 建设 WASM 插件市场的基石。

其他功能

另外介绍两个实用的子命令:

  1. hgctl dashboard:用于呼出 UI 界面,例如 Higress 控制台,直接通过 hgctl dashboard console 即可打开
  $ hgctl dashboard
  Access to Higress web UIs
  
  Usage:
    hgctl dashboard [flags]
    hgctl dashboard [command]
  
  Aliases:
    dashboard, dash, d
  
  Available Commands:
    console     Open Console web UI
    controller  Open Controller debug web UI
    envoy       Open Envoy admin web UI
    grafana     Open Grafana web UI
    prometheus  Open Prometheus web UI
  1. hgctl gateway-config:用于查看数据面的 envoy 配置,可以快速验证配置是否正确下发
  $ hgctl gateway-config
  Retrieve information about Higress Gateway Configuration.
  
  Usage:
    hgctl gateway-config [command]
  
  Aliases:
    gateway-config, gc
  
  Available Commands:
    all         Retrieves all Envoy xDS resources from the specified Higress Gateway
    bootstrap   Retrieves bootstrap Envoy xDS resources from the specified Higress Gateway
    cluster     Retrieves cluster Envoy xDS resources from the specified Higress Gateway
    endpoint    Retrieves endpoint Envoy xDS resources from the specified Higress Gateway
    listener    Retrieves listener Envoy xDS resources from the specified Higress Gateway
    route       Retrieves route Envoy xDS resources from the specified Higress Gateway

新征程:API Gateway

上面说了 Gateway API,接着我们聊聊 API Gateway

标签:插件,hgctl,征程,Higress,开源,API,higress,Gateway
From: https://www.cnblogs.com/alisystemsoftware/p/17987580

相关文章

  • 自动化测试平台【开源】
    序号名称功能说明界面链接1AutoMeter-API链接2QAWolf浏览器自动化测试工具QAWolf可帮助你以10倍的速度创建、运行和维护端到端的浏览器自动化测试。链接3Mimesis用于Python的高性能虚假数据生成器项目地址:链接安装:pipinstallmimesis......
  • SPA瑜伽普拉提私教线下课程预约课老师员工分销小程序开源版开发
    SPA瑜伽普拉提私教线下课程预约课老师员工分销小程序开源版开发开发功能介绍如下:瑜伽、普拉提、SPA等课程信息展示:展示各种课程的详细信息,包括课程名称、简介、时长、难度等,帮助用户了解课程内容。课程预约:用户可以通过小程序预约课程,选择适合自己的时间和日期,并支付课程费用。预约......
  • 初始 abp 开源框架-通过CMD命令创建项目--到果断放弃ABP
    打开官网:https://abp.io/get-started选则如下配置  根据黑色框内指令,创建项目 指令1dotnettoolinstall-gVolo.Abp.Cli指令2abpnewAcme.BookStore--tiered-csf 放弃理由:  ......
  • miniweb开源的迷你HTTP服务器端软件
    前言全局说明MiniWeb是一个用C语言写成的HTTP服务器端软件,具有资源占用少、响应快速、跨平台(POSIX、*nux、Windows)等优点,支持常用的GET、POST算法及音/视频流媒体应用,可用来构建WEBSITE站点或VOD服务器等。MiniWeb是一个针对嵌入式应用而开发的微型WebServer,它占用资源少,工......
  • 开源治理·聚光灯| 面对“百家争鸣”的许可证,企业如何做出明智选择?
    本文我们将一同探寻那些常见的开源许可证类型,它们各具特色,有的宽容大度,有的则严格苛刻。同时,我们还将讨论企业在面对许可证问题时,应该如何审时度势,做出明智的选择。毕竟,在这个开源的世界里,只有尊重规则,才能走得更远。在开源许可证中“择婿”“好好先生” MIT/X11许可证MIT/X11许......
  • 使用CPU运行大语言模型(LLM),以清华开源大模型ChatGLM3为例:无需显卡!用CPU搞定大模型运行
    教程视频地址:无需显卡!用CPU搞定大模型运行部署!【详细手把手演示】按照上面视频进行安装配置之前需要注意,python编程环境需要大于等于python3.10,否则会运行报错。下载好GitHub上的项目代码后需要运行pipinstall-rrequirements.txt配置好后运行效果:相关资料:【ChatGL......
  • 如何为开源项目和社区做贡献 -- 你应该知道的十件事
    1.前言 大家好,我叫颜国进,现为英特尔边缘计算创新大使、百度飞桨开发者专家。回溯至2021年12月,那时的我,身为机械专业研一新生,仅在C和Python编程语言上有些许基础,对于深度学习的殿堂还只敢在门口窥探,对于OpenCV图像处理以及模型部署等技术更是所知甚少。然而,通过不懈的努力和......
  • 怎么他们都有开源项目经历|手把手教你参与开源
    一、前言大家好,这里是白泽。有一些同学提问,希望在自己的简历上增加一些有含金量的项目经历,最好能够去参与一些开源项目的开发,但由于对一个庞大的开源项目缺乏认知,难以着手。同时也担心自己能力不足,不知道自己写的代码是否会被接纳。这里我总结了遇到的一些问题:如何找到适合我......
  • 二、nextjs API路由如何做好JWT登录鉴权、身份鉴权,joi字段校验,全局处理异常等(c-shoppi
    介绍在这篇文章中,我们将学习如何在C-Shopping电商开源项目中,基于Next.js14,处理所有API路由中添加身份验证和错误处理中间件的思路与实现。这篇文章中的代码片段取自我最近开源项目C-Shopping,完整的项目和文档可在https://github.com/huanghanzhilian/c-shopping地址查看。Next......
  • 二、nextjs API路由如何做好JWT登录鉴权、身份鉴权,joi字段校验,全局处理异常等(c-shoppi
    介绍在这篇文章中,我们将学习如何在C-Shopping电商开源项目中,基于Next.js14,处理所有API路由中添加身份验证和错误处理中间件的思路与实现。这篇文章中的代码片段取自我最近开源项目C-Shopping,完整的项目和文档可在https://github.com/huanghanzhilian/c-shopping地址查看。Next.js......