Spring Cloud Gateway - eventservice.kr · Spring Cloud Gateway Spencer Gibb - @spencerbgibb...
Transcript of Spring Cloud Gateway - eventservice.kr · Spring Cloud Gateway Spencer Gibb - @spencerbgibb...
Spring Cloud Gateway
Spencer Gibb - @spencerbgibb (Original) Ryan Baxter @ryanjbaxterStephane Maldini - @smaldini
Younjin Jeong - @YZCerberos
2
Spencer Gibb
Spring Cloud Gateway
Spring Cloud Gateway
Run on Spring Framework 5+
Spring Cloud Gateway
Run on Spring Boot 2+&
Feature a cloud-native pattern
Spring Cloud Gateway
That cloud-native pattern isAPI Gateway
What is an API Gateway ?
http://microservices.io/patterns/apigateway.html
8
9
10
11
Routing
Security
Monitoring
Canary-ing
Monolith Strangling
Resiliency
Gateway Types
13
Appliance
14
SAAS
15
Web Server
16
Mesh
Proxy Pattern
Sidecar Pattern
22
Developer Oriented
23
Zuul 1
24
Zuul 1Zuul 2
https://medium.com/netflix-techblog/zuul-2-the-netflix-journey-to-asynchronous-non-blocking-
systems-45947377fb5c
https://www.youtube.com/watch?v=2oXqbLhMS_A
Spring Cloud Gateway
27
Built on…
28
29
Project Reactor
30
Project Reactor
32
Non-Blocking
33
Inside the Gateway
34
Inside the Gateway
Predicates
PathHostDate/TimeMethodHeadersQuery ParamsCookiesRead Body….
35
Inside the Gateway
Pre-Filters
HeadersPathRate LimitingCookiesHystrixModify Body…
36
Inside the Gateway
Global Filters
Netty RouterWeb SocketsLoad BalancerMetrics…
37
Inside the Gateway
Post Filters
Set statusHeadersCookies…
38
spring:
cloud:
gateway:
- id: foo_route
uri: lb://foo
predicates:
- Host=**.foo.org
- Path=/headers
- Method=GET
- Header=X-Request-Id, \d+
- Query=foo, ba.
- Query=baz
- Cookie=chocolate, ch.p
- After=1900-01-20T17:42:47.789-07:00[America/Denver]
filters:
- AddRequestHeader=X-Request-Foo, Bar
- AddResponseHeader=X-Response-Foo, Bar
- Hystrix=foo
- SecureHeaders
- RewritePath=/foo/(?<segment>.*), /$\{segment}
Route Configuration: YAML
39
spring:
cloud:
gateway:
- id: foo_route
uri: lb://foo
predicates:
- Host=**.foo.org
- Path=/headers
- Method=GET
- Header=X-Request-Id, \d+
- Query=foo, ba.
- Query=baz
- Cookie=chocolate, ch.p
- After=1900-01-20T17:42:47.789-07:00[America/Denver]
filters:
- AddRequestHeader=X-Request-Foo, Bar
- AddResponseHeader=X-Response-Foo, Bar
- Hystrix=foo
- SecureHeaders
- RewritePath=/foo/(?<segment>.*), /$\{segment}
Route Configuration: YAML
40
Route Configuration: Java@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder,
ThrottleGatewayFilterFactory throttle) {
return builder.routes()
.route(r -> r.host("**.abc.org").and().path("/image/png")
.filters(f -> f.addResponseHeader("X-TestHeader", "foobar"))
.uri("http://httpbin.org:80")
)
.route(r -> r.path("/image/webp")
.filters(f -> f.addResponseHeader("X-AnotherHeader", "baz"))
.uri("http://httpbin.org:80")
)
.route(r -> r.order(-1)
.host("**.throttle.org").and().path("/get")
.filters(f -> f.filter(throttle.apply(1, 1, 10,
TimeUnit.SECONDS)))
.uri("http://httpbin.org:80")
)
.build();
}
41
Custom Filters
public class SetStatusWebFilterFactory implements GatewayFilterFactory {
@Override
public GatewayFilter apply(Config config) {
final HttpStatus status = parse(config.status);
return (exchange, chain) -> chain.filter(exchange)
.doOnComplete(() -> setResponseStatus(exchange, status));
}
}
Demo
Design Ideas
44
Embedded
45
Embedded
Sample Use Case
When latency is essential> no added network hops
46
Embedded
47
Embedded
Sample Use Case
Fine-grained access control for pay-per-use service or fragile backing service
48
Facade
49
Facade
Sample Use Cases
Prevent direct access to apps
Polyglot compatible
50
Facade
51
Facade
Sample Use Cases
Cross-cutting concerns
Present common API to clients
Shield clients from app refactoring (monolith → microservices)
52
Cross-Cutting + App-Specific
53
Cross-Cutting + App-Specific
Sample Use Case
Delegate cross-cutting concerns to a separate common gateway (and a separate dev team!)
What Else Do We Have For Free ?
Remember ?
55
56
Spring Security
57
Micrometer Support
58
Micrometer Support
59
Zipkin Support
https://github.com/spring-cloud/spring-cloud-gateway
https://github.com/spring-cloud-samples/spring-cloud-gateway-sample
http://slides.com/spencer/spring-cloud-gateway
https://github.com/ryanjbaxter/gateway-s1p-2018
Spencer Gibb - @spencerbgibb
Ryan Baxter @ryanjbaxter
Stephane Maldini - @smaldini
Questions?