标签: netflix-zuul

如何使用netflix在部署期间将所有请求转发到特定版本(相同服务)?

我在不同的主机上运行了4个相同服务的实例.我正在按节点为该服务节点部署新版本.部署时,传入请求会根据负载均衡器转发到任何版本(主机).在netflix中有什么办法可以将所有传入的请求转发到特定版本吗?

有没有通用的方法我们可以定义版本(对于相同的serviceId).如果传入请求在标头中定义了版本,我们可以使用它将请求转发到特定版本.

可能是这样的:

在Zuul代理中,

zuul:
  routes:
    sample:
      path: /sample/{version}/**
      serviceId: sample-service
Run Code Online (Sandbox Code Playgroud)

在样品服务中,

eureka:
  instance:
    appname: sample-service
    metadataMap:
      version: v1
Run Code Online (Sandbox Code Playgroud)

或任何其他机制来实现相同服务的版本控制?

netflix microservices spring-cloud netflix-eureka netflix-zuul

8
推荐指数
1
解决办法
1051
查看次数

从根路径的Zuul路线

我有一些与Eureka一起发现的微服务.他们中的大多数提供了一些API.我有"边缘"服务,称为"网关服务",实际上是Zuul代理.问题是有一个Web应用程序.它由网关服务主持了很长时间,并没有任何问题.但是现在我需要在网关后面的单独服务上托管这个客户端.这不是一个问题.我创建了新服务并将Web应用程序放在那里.但问题是网关服务上的Zuul有下一个配置

zuul:
  ignoredServices: '*'
  prefix: /api
  sensitiveHeaders: Cookie, Set-Cookie
  routes:
    config-service:
      path: /conf/**
      serviceId: config-service
    security-service:
      path: /security/**
      serviceId: security-service
      stripPrefix: false
    request-service:
      path: /requests/**
      stripPrefix: false
Run Code Online (Sandbox Code Playgroud)

我需要这样做,以便用户能够从这样的根路径访问Web应用程序http://app.com/.但是现在我只能通过http://app.com/api/完全不正确的方式访问它.

我的任务是:

  1. 使Web应用程序托管在可从根路径获得的其他服务上.
  2. /api保留所有其他服务的前缀也非常重要.

我试着实施ZuulFilter.但看起来它对根路径没有任何作用,只有当与上述任何路由匹配时才会运行.

我怎样才能做到这一点?

更新:我有一点成功ZuulFilter.我做到了.这是Zuul的配置:

zuul:
  ignoredServices: '*'
  sensitiveHeaders: Cookie, Set-Cookie
  routes:
    api: /api/**
    config-service:
      path: /conf/**
      serviceId: config-service
    security-service:
      path: /security/**
      serviceId: security-service
      stripPrefix: false
    request-service:
      path: /requests/**
      stripPrefix: false
    frontend-host-service:
      path: /**
Run Code Online (Sandbox Code Playgroud)

而且ZuulFilter本身

@Bean
    public ZuulFilter apiPrefixStrip(RouteLocator …
Run Code Online (Sandbox Code Playgroud)

java spring-boot spring-cloud netflix-zuul

8
推荐指数
1
解决办法
6312
查看次数

使用路径中的部件构建URL

使用zuul,是否可以配置路由以使用URL中路径的部分?

这个使用普通正则表达式的元代码配置解释了我想要做的事情.

zuul:
  routes:
    foobar:
      path: /foo/{.*}/bar/{.*}
      url: http://foobar/\2/\1
Run Code Online (Sandbox Code Playgroud)

所以/ foo/123/bar/456将被路由到http:// foobar/456/123

spring-cloud netflix-zuul

8
推荐指数
1
解决办法
330
查看次数

Spring Zuul Gateway Swagger-UI 适用于所有微服务

(对不起,如果我没有任何意义,已经很晚了,我似乎无法找到答案)

我们正在使用带有 netflix zuul 网关的 spring boot 微服务,我们想访问那里的所有端点列表。我们在网关上设置了 swagger-ui,我们可以卷曲微服务的 /v2/api-docs,但我们不知道如何在 swagger-ui 中显示它。

我首先尝试使用这种方法。(我是从 pastebin 链接的,因为它很长,我不知道将它包含在帖子中是否被认为是不好的做法。)
它向我展示了网关的端点,而不是微服务。它还让我从我们的身份验证服务中获取令牌。

然后我尝试了这个,实际上我从我添加的微服务中得到了 401。

@Component
@Primary
@EnableAutoConfiguration
public class SwaggerAggregatorController implements SwaggerResourcesProvider {
    @Override
    public List<SwaggerResource> get() {
        List<SwaggerResource> resources= new ArrayList<>();
        SwaggerResource swaggerResource = new SwaggerResource();
        swaggerResource.setName("ms-name");
        swaggerResource.setLocation("/ms-name/v2/api-docs");
        swaggerResource.setSwaggerVersion("2.0");

        resources.add(swaggerResource);
        return resources;
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用 Postman 中的http://gateway/ms/v2/api-docs使用 Bearer 令牌获取 json 。
我们使用 OAuth2。当然,当我加载 swagger-ui 时,我得到了预期的结果

{"error":"unauthorized","error_description":"Full authentication is required to access this resource"}  
Run Code Online (Sandbox Code Playgroud)

所以我应该向请求添加一个不记名令牌,但我需要从使用 OAuth2 的 auth-service 获取它。我应该如何授权 swagger 以便它可以从其他微服务中获取所有资源?

再次,如果我没有任何意义,我深表歉意。 …

swagger spring-boot spring-security-oauth2 netflix-zuul

8
推荐指数
0
解决办法
3809
查看次数

创建自定义Zuul过滤器

我想为我的Zuul代理实现自定义过滤器.现在,我知道已经有很多谈论的主题在这里,我看了一眼提供,过滤器的实例和Spring云文档,这是我经过好几次去了答案.我试图将一些过滤器内容复制到我的使用,但它没有用.

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

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

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

spring netflix spring-cloud netflix-eureka netflix-zuul

7
推荐指数
1
解决办法
6912
查看次数

在Spring Boot中未经授权的Zuul代理oAuth2

我有一个使用oAuth2保护的微服务,称为国家服务。当我直接向此服务(包括JWT承载令牌)发送请求时,一切正常:

在此处输入图片说明

server:
  port: 8081

spring:
  database:
    driverClassName: org.postgresql.Driver
  datasource:
    url: jdbc:postgresql://localhost:5432/vue-boot-country
    username: postgres
    password: postgres
  jpa:
    hibernate:
      ddl-auto: validate
    database-platform: org.hibernate.dialect.PostgreSQLDialect

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
Run Code Online (Sandbox Code Playgroud)

我也有一个api网关(Zuul代理):

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class VueBootApiGatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(VueBootApiGatewayApplication.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

除了这两个没有其他文件

server:
  port: 8765

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

zuul:
  routes:
    vue-boot-country-service: /api/country/**
  add-proxy-headers: true
Run Code Online (Sandbox Code Playgroud)

我无法将成功的请求发送到代理,我不断收到“未经授权”错误:

在此处输入图片说明

注意:当我从资源服务器中删除oAuth2安全性时,Zuul代理似乎可以正常工作。

有人知道我在这里做错了吗?

proxy spring oauth-2.0 spring-boot netflix-zuul

7
推荐指数
2
解决办法
2109
查看次数

用于访问Spring引导Zuul服务路由的身份验证

我使用Spring boot zuul和eureka服务配置了我的微服务.现在我需要验证所有路由/ REST API调用.我的意思是,对于所有API客户端发送一个accessToken.在zuul服务上,在路由到特定服务之前,我必须使用accessToken调用微服务(auth-service),并且auth-service将检查用户是否存在以便发送accessToken.如果accessToken有效,则只应进行路由.

请帮我用Spring Boot服务实现这个.

谢谢.

spring-mvc spring-boot microservices netflix-eureka netflix-zuul

7
推荐指数
1
解决办法
2406
查看次数

Spring boot - 不支持不必要地替换不存在的任务。直接使用 create() 或 register() 代替

我正在构建一个 Spring Boot 微服务应用程序,但是当我在 intellij idea 中打开时出现此错误。

Unnecessarily replacing a task that does not exist is not supported. Use create() or register() directly instead. You attempted to replace a task named 'ZuulServerApplication.main()', but there is no existing task with that name.
Run Code Online (Sandbox Code Playgroud)

我从Spring Boot Initialzr下载了其他项目,它们没有显示任何错误,但最近我遇到了这个问题。如何解决?

java gradle spring-boot netflix-zuul

7
推荐指数
1
解决办法
2200
查看次数

如何在微服务架构中实现基于角色的安全

我有一个带有 4 个微服务、eureka 服务器和一个集中式 API 网关的 spring-boot 应用程序。

所有外部流量都通过我的 API 网关到达我的微服务。

我的 API 网关 (Zuul) 正在验证和验证 JWT 令牌。

JWT 令牌由我的微服务之一在用户登录后生成(用户微服务),该令牌包含用户 ID 及其角色/权限。

现在,我想对网关以外的微服务中存在的方法实施基于角色的安全性。

我尝试使用,@PreAuthorize但它在网关之外不起作用(显然,为了使其工作,我必须SecurityContextHolder在我的微服务中设置一个 Spring Security 身份验证对象并用权限填充它)。

那么是否有任何解决方案可以实现这种安全性?

在微服务架构中设置安全性的最佳设计是什么?

API 网关级别的身份验证和微服务级别的授权?

在 API 网关级别验证 JWT 后,我是否需要在微服务中使用 spring security 或仅传递角色(将它们附加到请求中),例如创建我自己的注释并使用 Spring AOP 处理授权?

spring-security spring-boot microservices spring-cloud netflix-zuul

7
推荐指数
3
解决办法
3395
查看次数

Spring Boot 和 Zuul 路由

有一个简单的代理:

@EnableZuulProxy
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    @Bean
    public  SimpleFilter simpleFilter(){
        return  new SimpleFilter();
    }

}
Run Code Online (Sandbox Code Playgroud)

前置过滤器:

public class SimpleFilter extends ZuulFilter {

    private static Logger log = LoggerFactory.getLogger(SimpleFilter.class);

    @Override
    public String filterType() {
        return "pre";
    }

    @Override
    public int filterOrder() {
        return 1;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();

        log.info(String.format("%s request to %s", request.getMethod(), …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot netflix-zuul

7
推荐指数
1
解决办法
241
查看次数