使用 Spring Cloud Gateway 实现微服务 API 网关

Posted

技术标签:

【中文标题】使用 Spring Cloud Gateway 实现微服务 API 网关【英文标题】:Micorservice API Gateway Implementation with Spring Cloud Gateway 【发布时间】:2019-07-04 15:10:30 【问题描述】:

我一直在阅读有关在我的微服务架构中实现 API 网关的 Spring Cloud Gateway。我需要阻止我一直用于某些内部操作的某些 URL。但是,我在网关中使用了ignoredServices 和ignorePatterns,就像在Zuul 中一样,但是在Spring 云网关link 中没有这样的东西。我的内部 API 以 /internal/something 开头。

同样,我对服务器、Eureka、歇斯底里和弹簧配置还有其他疑问。下面是我在 Netflix Zuul 中使用的 apigateway.yml。

zuul:
  ignoredServices: '/**/internal/**'
  sensitive-headers: Cookie,Set-Cookie
  routes:
    microservice1:
      service-id: microservice1
    microservice2:
      service-id: microservice2
  host:
    connect-timeout-millis: 10000
    #10 mins socket timeout
    socket-timeout-millis: 600000

management:
  security:
    enabled: false
health:
  config:
    enabled: false

server:
  tomcat:
    #50MB size limit
    max-http-post-size: 5048576
  compression:
    enabled: true
    mime-types: application/json,application/xml,text/html,text/xml,text/plain,application/javascript,text/css

eureka:
  instance:
    prefer-ip-address: true
    lease-renewal-interval-in-seconds: 15
    lease-expiration-duration-in-seconds: 45
    metadata-map:
      management:
        port: $management.port:9080
  client:
    registryFetchIntervalSeconds: 15

hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: false
        isolation:
          strategy: THREAD
          thread:
            timeoutInMilliseconds: 10000

spring:
  http:
    multipart:
      max-file-size: 50MB
      max-request-size: 50MB

我需要帮助才能使用新的 Spring 云网关实现进行转换。

【问题讨论】:

究竟什么是不能转换的? @GVArt 我应该如何忽略使用带有正确错误代码的路由和过滤器的模式? 【参考方案1】:

在路由设置方面,SC Gateway 的工作方式与 SC Zuul 不同 - 它不会根据服务 ID 自动解析路由。只有通过属性或 Java RouteLocator 配置明确定义的路由才会被添加。因此,不要为要忽略的路径添加路由定义。另外,请确保您使用过滤器来删除您不想转发的任何敏感标头,因为与 Zuul 不同,它们将默认传递。

【讨论】:

感谢您提供的信息。我使用 id、URI、谓词和过滤器将请求路由到每个微服务。 我在同一个问题上运行,自从@OlgaMaciaszek 回答以来,一定发生了一些变化。现在可以像 Zuul 通常那样自动添加路线。如果启用了DiscoveryClient,则会为每个发现的服务添加一个新路由。无需手动添加该服务的路由。然后可以使用spring.cloud.gateway.discovery.include-expressions 过滤掉不需要的服务。

以上是关于使用 Spring Cloud Gateway 实现微服务 API 网关的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Gateway初体验

Spring Cloud(18)——gateway

聊聊spring cloud gateway的NettyConfiguration

Spring Cloud Gateway 使用谓词检查头部授权

浅谈Spring Cloud Gateway技术

如何配置 spring-cloud-gateway 以使用 sleuth 记录请求/响应正文