【鲲苍提效】服务治理-服务网关路由能力

125 阅读4分钟

汉得鲲苍基础架构管理平台的核心目标是为企业的异构系统提供简单高效的一站式统一闭环管理能力,包括统一资源(集群、主机、存储等)管理、统一应用及部署管理、统一监控管理、统一服务治理,帮助企业实现更快、更好、更全面的异构系统管理。

接下来我们将会提供一系列推文,介绍鲲苍平台的使用,帮助您快速了解本平台,给您更好的使用体验。

本文为系列推文的第十讲,将介绍如何通过鲲苍实现服务网关丰富的路由转发规则能力。

服务网关的定义

服务网关作为分布式系统集群内部所有服务的单一访问入口,用于统一接入、管理及控制从外部流入集群内部的所有访问流量,充当了客户端和集群内部所有服务之间的统一门户,主要负责安全控制、路由转发、流量治理、监控及日志等功能。集群内部服务可以更聚焦于业务,加速创新,而安全管控等通用切面逻辑交由入口网关统一实现。

服务网关的功能

安全管控: 对客户端请求进行统一认证及授权控制,确保只有合法用户才能访问特定服务,有助于保护系统免受未经授权的访问。同时,支持SSL卸载等其他特性。

路由转发: 将来自不同客户端的请求按照不同策略路由到相应的后端服务实例;通过负载均衡机制,实现流量均衡转发、服务实例资源高效利用;通过超时重试等机制,确保后端服务实例发生故障时保持弹性****;同时,也可以实现A/B测试、流量镜像等其他不同的路由场景。

流量治理: 统一实施流量控制策略,有效防止后端服务过载或雪崩效应;同时,也可以实现故障注入、动态操作请求头/响应头等其他场景。

监控及日志: 监控请求及流量情况,统一记录日志,有助于实时监控请求性能及状态,快速识别潜在问题。

虽然服务网关的功能丰富多彩,但本文将重点介绍服务入口网关在路由策略方面的功能及其应用场景。

◆ 已经与平台建立连接的K8S集群(可参见系列推文第一讲

◆ 该集群下已创建可用的容器环境(如果仅用于资源管理,可创建空环境)

应用基础组件上架,平台已内置服务网关生态组件——istio-httpbin、istio-ingress-gateway。

当应用上架后,可以使用该应用进行部署;也可以根据自身需求,将预定义组件复制为自定义组件进行改造后再上架部署。

前置准备

部署httpbin应用

部署基础组件选择 istio-httpbin 组件进行部署,各字段填写如下:

◆  服务端口:8000

设置环境变量

export INGRESS_HOST=172.xx.xx.xxx (实际部署地址)

export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}') 

export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -ojsonpath='{.spec.ports[?(@.name=="https")].nodePort}') 

export TCP_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="tcp")].nodePort}')

实战一:基于请求头路由

部署服务网关路由规则

部署基础组件选择 istio-ingress-gateway 组件进行部署,各字段填写如下:

◆  域名:httpbin.example.com

◆  端⼝(⽹关端⼝):80

◆  ⽬标服务名称:httpbin-demo-httpbin

◆  ⽬标服务端⼝:8000

◆  Uri匹配: prefix - /status

◆  Headers: user - exact - allen

◆  含义:当请求路径中包含/status前缀时,且包含了user=allen请求头时,流量才会正确转发到系统中httpbin-demo-httpbin:8000服务中

验证过程

未携带请求头

不设置请求头,404状态码表示没有正确路由返回。

携带错误请求头

设置错误请求头“user=bob”,404状态码表示没有正确路由返回。

携带正确请求头

设置正确请求头“user=allen”, 因为路由设置为/status/500, 故下图中500状态码表示数据成功返回。

实战二:基于JWT claims路由

JWT 与服务网关的关系

JWT (JSON Web Token)可以作为服务网关的一种安全认证和授权机制,帮助确保用户的身份验证、权限管理和数据安全。通过结合使用 JWT 和服务网关,可以建立一个更加安全、高效和可管理的分布式应用架构。

部署服务网关路由规则

部署基础组件选择 istio-ingress-gateway 组件进行部署,各字段填写如下:

◆  域名:httpbin.example.com

◆  端⼝(⽹关端⼝):80

◆  ⽬标服务名称:httpbin-demo-httpbin

◆  ⽬标服务端⼝:8000

◆  Uri匹配: prefix - /headers

◆  issuer: testing@secure.istio.io

◆  jwksUri(实际部署地址): 172.xx.xx.xx:8080/jwks.json

◆  Headers: @request.auth.claims.groups - exact - group1

◆  含义:请求需要包含正确的JWT Token,且JWT claims中必须包含groups=group1才可以正确路由

验证过程

没有 JWT-404

不设置 JWT,404状态码表示没有正确路由返回。也可以创建授权策略来显式拒绝没有携带 JWT Token 的请求,以此返回状态码403。

无效 JWT-401

设置无效 JWT,401状态码表示请求 JWT 验证失败。

有效 JWT 但不包含 groups:groups1

设置有效JWT,但JWT不包含 groups:groups1,404状态码表示没有正确路由返回。

有效 JWT 且包含 groups: group1 claim

设置有效 JWT,且包含 groups:groups1,200状态码表示可以成功访问。

实战三:基于Cookie路由

Cookie 与服务网关的关系

Cookie 在服务网关中的使用可以帮助管理用户会话、实现认证授权、提供个性化体验等,从而增强应用功能以及提升用户友好性。

部署服务网关路由规则

部署基础组件选择 istio-ingress-gateway 组件进行部署,各字段填写如下:

◆  域名:httpbin.example.com

◆  端口:80

◆  ⽬标服务名称:httpbin-demo-httpbin

◆  ⽬标服务端⼝:8000

◆  Uri匹配: prefix - /headers

◆  Headers: cookie - regex -(^|.; )user=allen($|; .)

◆  含义:只有Cookie中包含user=allen才会正确路由

验证过程

未携带 Cookie

不设置 Cookie,404状态码表示没有正确路由返回。

携带错误 Cookie

设置错误 Cookie“user=bob”,404状态码表示没有正确路由返回。

携带正确 Cookie

设置正确 Cookie“user=allen”,200状态码表示可以成功访问。

想了解平台更多功能?请关注后续一系列推文~

欢迎在评论区留言,与我们一起探讨服务网关在您业务中的应用潜力~

联系我们:

· 如果您想了解鲲苍 META FOUNDATION 更详细的功能介绍和产品信息,请登录开放平台查阅我们的产品文档

· 如果您有疑问,可以通过开放平台进行工单反馈,问题分类请选择【产品/汉得基础架构管理平台】

相关产品咨询或更多信息了解,欢迎联系我们。

邮箱: openhand@vip.hand-china.com