使用 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的NettyConfiguration