在我的理解中,使用 Istio 而不是 Spring Cloud 的原因可以说是为了:
- 技术栈解耦,Spring Cloud 是属于 Java 技术栈的,在微服务场景下会使用的不同的语言和技术栈去实现特定的服务;
- 减轻开发人员的负担,将限流、重试、熔断、跟踪等从业务代码中剥离,放到部署时动态配置;
但是对于网关来说,除了做到基础的流量控制外,也是包含一定的业务内容的,比如完成用户身份的鉴权功能。而 Istio 作为脱离具体业务的组件,显然(?)无法通过 Istio Gateway 完成用户身份的鉴权,因为用户是无法预先配置的,它的身份模块应该是为了处理其内部的场景——运维层级的。
总的来说,我的问题是:使用 Istio Gateway 替代 Spring Cloud Gateway 组件之后,原来由 Spring Cloud Gateway 组件中处理的用户身份鉴权现在应该如何处理?
是可以取代的,具体参考 istio 的认证授权相关的文档即可,只是需要注意的是在 istio 验证过后需要配置将 JWT 的 Payload 传递到应用层的认证授权微服务即可,这里相当于将认证授权微服务与网关分离了。
istio principal 验证的是 iss/sub,而不是终端用户,需要额外的认证授权中心来验证用户名密码。
iss: 该 JWT 的签发者
sub: 该 JWT 所面向的用户