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

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

2025-06-12 16:43:51作者:邬祺芯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等多种协议,并提供丰富的扩展能力。

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

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
178
262
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
868
514
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
130
183
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
272
311
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
373
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
599
58
GitNextGitNext
基于可以运行在OpenHarmony的git,提供git客户端操作能力
ArkTS
10
3