首页
/ 使用Solo.io Gloo实现Kubernetes服务路由入门指南

使用Solo.io Gloo实现Kubernetes服务路由入门指南

2025-06-12 23:08:21作者:邬祺芯Juliet

概述

在现代云原生架构中,服务路由是微服务通信的关键环节。Solo.io Gloo作为一款基于Envoy构建的API网关,提供了强大的服务路由能力。本文将带您完成Gloo Gateway的"Hello World"入门实践,通过部署一个宠物商店(Pet Store)示例应用,演示Gloo的核心路由功能。

核心概念

在开始实践前,我们需要了解Gloo Gateway的两个核心概念:

  1. Upstream(上游服务):代表Kubernetes集群中的一个服务端点,类似于Envoy中的cluster概念。Gloo可以自动发现集群中的服务并创建对应的Upstream资源。

  2. Virtual Service(虚拟服务):定义路由规则,指定如何将入站请求路由到特定的Upstream服务。

环境准备

开始前请确保满足以下条件:

  1. 已部署Kubernetes集群
  2. 已安装Gloo Gateway
  3. 已安装kubectl和glooctl命令行工具

启用服务发现功能

Gloo的服务发现功能默认关闭以提高性能。我们需要先启用它:

kubectl patch settings -n gloo-system default \
  --type=merge \
  --patch '{"spec":{"discovery":{"fdsMode":"BLACKLIST","enabled":true}}}'

部署示例应用

我们将使用一个宠物商店应用作为示例:

kubectl apply -f https://raw.githubusercontent.com/solo-io/gloo/main/example/petstore/petstore.yaml

验证应用部署状态:

kubectl -n default get pods
kubectl -n default get svc petstore

检查自动创建的Upstream

Gloo会自动发现Kubernetes服务并创建对应的Upstream:

glooctl get upstreams

重点关注default-petstore-8080这个Upstream,它应该处于"Accepted"状态。

启用函数发现服务(FDS)

宠物商店应用提供了Swagger API文档,我们需要启用FDS来发现这些API端点:

kubectl label namespace default discovery.solo.io/function_discovery=enabled

再次检查Upstream,现在应该能看到具体的REST端点:

glooctl get upstream default-petstore-8080

配置路由规则

现在我们可以创建路由规则了:

glooctl add route \
  --path-exact /all-pets \
  --dest-name default-petstore-8080 \
  --prefix-rewrite /api/pets

这条规则将:

  • 匹配路径为/all-pets的请求
  • 重写路径为/api/pets
  • 转发到default-petstore-8080这个Upstream

验证路由配置

检查Virtual Service状态:

glooctl get virtualservice default

状态应为"Accepted",表示配置已生效。

测试路由

发送测试请求:

curl $(glooctl proxy url --name gateway-proxy)/all-pets

应该能看到返回的宠物列表JSON数据。

工作原理详解

  1. 服务发现机制:Gloo通过Kubernetes API监听服务变化,自动创建Upstream资源。

  2. 函数发现:对于支持OpenAPI/Swagger的服务,Gloo能自动发现API端点并生成对应的转换配置。

  3. 路由匹配:Virtual Service中的matchers定义了请求匹配规则,支持精确匹配、前缀匹配等多种方式。

  4. 路径重写prefixRewrite选项允许在转发前修改请求路径,实现前端友好URL。

常见问题排查

  1. Upstream状态不是Accepted

    • 检查服务是否正常运行
    • 确认服务发现功能已启用
    • 查看Gloo Pod日志排查问题
  2. 路由不生效

    • 确认Virtual Service状态为Accepted
    • 检查路由规则是否匹配测试请求
    • 验证Upstream配置是否正确
  3. 本地测试问题

    • Minikube环境下需要运行minikube tunnel才能获取外部IP

进阶学习方向

完成本教程后,您可以进一步探索:

  1. 更复杂的路由匹配规则
  2. 多种目标服务类型配置
  3. 请求处理与转换功能
  4. 流量管理与负载均衡策略
  5. 安全认证与授权配置

通过这个简单的"Hello World"示例,您已经掌握了Gloo Gateway的基本路由配置方法。Gloo的强大功能远不止于此,它还能处理gRPC、GraphQL等多种协议,并提供丰富的扩展能力。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
149
1.95 K
kernelkernel
deepin linux kernel
C
22
6
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
981
395
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
192
274
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
932
555
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
145
190
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Jupyter Notebook
75
66
openHiTLS-examplesopenHiTLS-examples
本仓将为广大高校开发者提供开源实践和创新开发平台,收集和展示openHiTLS示例代码及创新应用,欢迎大家投稿,让全世界看到您的精巧密码实现设计,也让更多人通过您的优秀成果,理解、喜爱上密码技术。
C
65
519
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.11 K
0