问题标签 [netflix-zuul]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
685 浏览

netflix-zuul - Netflix Zuul 和功能区路由器

当需要在 web 服务调用之前对后端服务实例进行身份验证时。在使用色带之前,我们一直在使用 Zuul 预过滤器来完成此操作。切换到功能区时,预过滤器现在只能访问服务名称,而不能访问将被调用的后端 URI。这应该如何处理?是否可以使用带状路由器注册预操作?

谢谢你

0 投票
1 回答
911 浏览

spring-boot - 将请求路由到注册为两个不同服务 ID 的同一服务

在我的 Spring Boot 应用程序中,我使用 Eureka 服务器作为发现服务。在我的一个 Discovery 客户端应用程序中,我使用 zuul 代理将请求路由到在 Discovery Server 注册的不同服务。

我有一个资源应用程序负责将数据存储到数据库中。我为这个服务创建了两个实例,注册为两个不同的服务与发现服务。为该服务发布的 api 可以说是 /resources Get、Post 等

客户端应用程序为此资源服务的两个实例发送像 /definitions 和 /locations 这样的请求。

现在我的问题是我想将此 /definitions 映射到 service-id 1/resources 并将位置映射到 /service-id2/resources。

我不确定如何执行此操作,因为当我从客户端应用程序发送 /defnitions 时,它期望 /definitions 在资源应用程序中存在,但事实并非如此。

我正在尝试这样的事情 zuul: routes: locations: path: /locations/** rewrite: /resources/** serviceId: location_service stripPrefix: false definitions: path: /definitions/** rewrite: /resources/** serviceId: definition_service stripPrefix: false

0 投票
1 回答
3968 浏览

oauth-2.0 - Spring Oauth 2 SSO、Zuul 和 OpenAM 集成

简介、要求:

现在我正在用 AngularJS 编写一个与 Spring REST API 对话的单页应用程序。出于安全目的,我想使用 zuul 设置一个反向代理,它代理对 API 的每个请求并验证用户是否经过身份验证。此外,如果用户未通过身份验证,则应将他重定向到 OpenAM 实例(充当 OAuth 2 授权服务器)。如果用户已通过身份验证,则应将请求转发到 API,并在标头中使用 Json Web 令牌 (JWT),其中至少包含用户的 LDAP 组。

简而言之,我想要一个类似于本教程中解决方案的 API 网关:https ://spring.io/blog/2015/02/03/sso-with-oauth2-angular-js-and-spring-安全部分-v

现状

我使用以下配置设置了 Spring Cloud Security 和 Zuul:

Application 类如下所示:

现在,当我转到“示例应用程序”时,我会被转发到 OpenAM 授权登录屏幕。当我输入凭据时,我可以访问“示例应用程序”。网关服务上的控制台日志:

Zuul过滤器读取的Http-Header:

所以有些东西起作用了!我有一个被转发到 REST-API 的访问令牌。

问题

1)这个解决方案并不能真正满足我的要求,因为我不希望 REST API 调用 OpenAM 的令牌端点。我希望将带有必要声明的 JWT 传递给 Header 中的 API。我应该在网关(例如 Zuul 过滤器)中手动创建 JWT,还是有其他解决方案?

2)在上面的解决方案中,当访问令牌过期时,Zuul 不断将我转发到 API。为什么是这样?Spring Oauth2 不检查访问令牌是否过期?我该如何实施?

3) 我还尝试在 application.yml 中配置 tokenInfoUri,但随后出现“405 Method Not Allowed”异常,因为我认为 OpenAM 需要对 tokeninfo-Endpoint 的 GET 请求。我可以以某种方式自定义它吗?我需要覆盖/自定义哪些类来更改请求。

如果您有建议、想法或可能的解决方案,请告诉我!

谢谢!

0 投票
1 回答
7543 浏览

spring - 创建自定义 Zuul 过滤器

我想为我的 Zuul 代理实现自定义过滤器。现在,我知道这里有很多关于这个主题的讨论,我查看了提供的答案,其中包含过滤器示例和 Spring Cloud 文档,我已经阅读了好几次。我试图复制一些过滤器内容以供我使用,但它不起作用。

我有一个 Eureka 服务器,注册了 3 个独立的服务,其中一个是另外两个的前门,从每个服务中收集信息并检索它。

我想要做的是重新路由 Zuul 在流程开始时收到的请求,通过特定服务重定向它们,使用 URL 参数来确定应该针对哪个流程而不是另一个流程。我已经创建了一个带有@Component注释标记的过滤器,实现ZuulFilter. 我不知道如何使重定向起作用,以及使用哪些方法。

所以,问题是:如何使用 URL 参数将传入请求重定向到不同的注册服务?

0 投票
1 回答
1622 浏览

spring-boot - spring boot cloud Zuul Proxy - 代码中的硬编码代理路由引用

我有 Spring Cloud 使用网关(使用 Zuul 代理)代理休息端点(/ui、/admin 作为单独的微服务)的基础知识。我正在关注Dave Syer 的 Spring Boot 博客

这个想法是gateway(Zuul) 将在 8080 上运行,前端应用程序 (UIAdmin) 将只知道gateway并且不知道uiadmin后端 URL。管理应用程序只需联系 ` http://localhost:8080/admin '

设置工作正常,除了前端应用程序(例如admin:)必须将/admin路由硬编码为所有 JS 和 HTML 代码中的前缀。以下2个例子:

以下不起作用(在 admin.js 中)。

但是,以下确实有效:

管理应用程序中存在类似问题:index.html

工作(但不希望):

不起作用:

显然,这种将“/admin”路由硬编码到管理员中所有 HTML 和 JS 代码中的所有 href 链接的做法是不可取的。我该如何克服这个问题(如何在我的管理代码中保留相关引用)?

0 投票
3 回答
13038 浏览

spring-cloud - 用于拒绝请求的 NetflixOSS Zuul 过滤器

我正在尝试在简单的 spring-cloud-Netflix Api 网关(反向代理)中使用 ZuulFilter,以便针对自定义身份验证提供程序(通过 Rest 调用)对请求进行身份验证。

过滤器应该拒绝使用 401 的未经授权的请求,并且不要将这些请求进一步传递给代理服务。

ZuulFilter 甚至可能吗?我没有在 Zuuls api 中找到文档、示例或其他内容。

有什么建议么?

0 投票
0 回答
1852 浏览

ssl - 使用 Zuul 将客户端证书导出到后端

可以使用 Zuul 作为代理/负载均衡器将客户端证书导出/转发到后端服务吗?我终于有了一个使用 https 的带有 spring-cloud 的 zuul 的工作示例,并使用 https 将请求转发到后端的安全服务。现在除了使用https之外,我还需要转发客户端的证书信息。您可以使用SSLOptions +StdEnvVars/+ExportCertData对 Apache 和 Tomcat 执行此操作,它将信息添加到标题中,但我不知道如何使用 Zuul 执行此操作。有谁知道你怎么能做到这一点?

0 投票
1 回答
3615 浏览

spring-cloud - 如何使用 Spring Cloud 和 Netflix OSS 在微服务之间进行路由

在我们使用 Spring Cloud 开发微服务期间,我们开始使用 Zuul 作为从外部到微服务的任何连接的代理,以及任何需要联系另一个微服务的微服务。

一段时间后,我们得出结论,Zuul 被设计为边缘服务(仅代理从外部到微服务的流量),不应该用于微服务间的通信。尤其是 Spring Cloud 推荐使用 eureka 与另一个服务建立直接(潜在的负载平衡)连接的方式,使我们反对在一切之间使用 Zuul。

当然,一切都按预期运行良好(就像使用 Spring Cloud 一样),但我们对如何使用此设置执行某个用例一无所知。

在部署新版本的微服务时,我们希望对旧版本和新版本进行蓝/绿部署。但是,由于微服务之间没有 Zuul,两个独立服务之间的通信将继续使用旧版本,直到它从 eureka 中删除。

我们正在考虑如何实现这一目标。在下面的图片中,我绘制了我认为可能是一个选项。

在图片的第一部分,Zuul 调用 eureka 获取注册中心来创建路由。此外,服务 1 正在调用 eureka 以让注册表路由到服务 2。由于服务 2 在 eureka 注册表中,因此路由成功完成。

在图片的第二部分,部署了服务 2(服务 2.1)的更新。它也向 eureka 注册,这使得服务 1 现在路由到服务 2 和服务 2.1。蓝/绿部署不希望这样做。

在第三部分中,展示了针对此问题的潜在解决方案,并为此目的部署了另一个 eureka 实例。此实例不支持对等,并且不会与第一个 eureka 实例同步。与第一个实例相反,这个实例的唯一目的是促进蓝/绿部署。服务 2.1 向第二个 eureka 实例注册,服务 1 的配置被更改为不是从第一个而是从第二个 eureka 实例获取其注册表。

在此处输入图像描述

我们面临的主要问题是这是否是一个可行的解决方案。拥有 Zuul 路由的灵活性是我们在这种情况下没有的一大优势。我们应该回到通过 Zuul 路由每个服务到服务的调用,还是有另一种更合适的解决方案(可能是某种功能区配置)?还是第二个 eureka 实例是此类部署的最佳解决方案?

任何反馈将不胜感激。

亲切的问候,安德烈亚斯

0 投票
0 回答
1487 浏览

java - Spring OAuth 2 和 OpenAM 集成,每个会话的 ClientContext

目前我正在尝试将 Spring-Security-Oauth2、Zuul、OpenAM 集成为 OAuth2 授权服务器,并将 WCF REST API 集成为资源服务器。最终设置应如下所示:

安全

我阅读了教程,其中解释了如何使用 spring 和 AngularJS 设置 SSO 环境(使用 spring 和 angularJS 的 sso),但是在我的情况下,我想使用 OpenAM 和密码授予流程来验证用户。所以在 Spring Boot 应用程序中,我当前的配置如下所示:

我编写了一个自定义 RemoteTokenService,否则 Spring 无法访问 OpenAM 的 tokeninfo 端点,这需要 GET 请求而不是 Post。此连接现在可以正常工作,因此我可以从 OpenAM 获得有效的访问令牌,并且还可以在 tokeninfo.endpoint 中查询令牌/用户信息。Authentication 对象被创建并存储在 Spring 的安全上下文中。我还可以访问 ZuulFilter 中的身份验证对象。

我现在的问题是,我不得不调整“OAuth2ClientContext”以从 servletRequest 中获取用户凭据并将其放在“AccessTokenRequest”上。否则我将不得不在 ResourceDetails 中对它们进行硬编码,这在我的情况下是不合适的。

结果是,ClientContext(我猜也是 AccessTokenRequest)在系统的所有用户之间共享。我想要的是一个会话范围的客户端上下文,这样我就可以让多个用户登录,并且可以在每个请求上为每个用户访问正确的 SecurityContext。

所以我的问题是,

1)如何使 ClientContext 和 AccessTokenRequest 会话范围?

2) 我需要使用 Spring Session 模块吗?

3) 我需要设置 sessionStrategy

谢谢!

0 投票
1 回答
5804 浏览

spring-cloud - Spring Cloud:为 Zuul 和 Eureka 启用 SSL

我正在尝试为我的 Spring Cloud 应用程序启用 SSL。现在它由几个服务组成,Eureka 和 Zuul(没有 Ribbon 或 Feighn)。我发现很少有关于如何为 Eureka 启用 SSL 的提示,但无法让它工作。在 Zuul 方面,我找不到任何信息,除了这个:Zuul SSL Support,它有效地禁止使用随机端口:(server.port=0)。我的应用程序的 application.yml:

Eureka 服务器 application.yml:

我不确定我需要在 Zuul 的 application.yml 中添加什么来允许 SSL,所以我跳过它。

当我启动 Eureka 和我的应用程序时,我遇到了重复的异常:

我也得到 404 到 curl 命令:

curl -k -i -X 获取https://localhost:8761/eureka

Zuul 无法启动,因为它无法连接到 Eureka。

我很确定我将配置文件放入了错误的 application.yml 文件中(我仍然不知道如何配置 Zuul)。

我想知道是否有任何文档告诉如何在所有 Netflix 组件中启用 SSL。