背景
虽然现在的趋势是将网关和istio融合,但是我个人觉得第一这件事不一定哪年可以落地,第二我一直遵循各司其职的想法,网关就是网关、网格就是网格、可以相互解耦,有一天没有网格了照样可以有网关。
istio+traefik
这里说一下,我的traefik采用的是Kubernetes Gateway API,我之前的文章有写可以参考。
然后我在istio官网的blog中发现了一篇醍醐灌顶的文章,建议你也可以先看一下,不看也行,他的结论我觉得和我上面想的差不多,分开部署,区别就是istio自己实现gateway api所以他的gatewayclass是istio,但是我是用的traefik所以我的gayewayclass 就是traefik。他的网关也并没有做到通过istio的控制平面来管理,说白了和istio还是分开了,所以更加坚定了我前面的结论,解耦。
Getting started with the Kubernetes Gateway API
bookinfo案例
这里我就用bookinfo来说吧,首先你肯定要先部署他的bookinfo案例,这个网上太多了我就不说了,然后你需要在相同的命名空间部署一个gateway
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: Gateway
metadata:
name: traefik-gateway
namespace: istio-test
spec:
gatewayClassName: traefik
listeners:
- name: web
port: 8000
protocol: HTTP
然后我们参考bookinfo的virtual service 写了一个httpRoute,你可以看一下原来的virtual service
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: HTTPRoute
metadata:
name: http-bookinfo
namespace: istio-test
spec:
parentRefs:
- name: traefik-gateway
hostnames:
- test.bookinfo.cn
rules:
- matches:
- path:
type: Exact
value: /productpage
- path:
type: PathPrefix
value: /static
- path:
type: Exact
value: /login
- path:
type: Exact
value: /logout
- path:
type: PathPrefix
value: /app/v1/products
backendRefs:
- name: productpage
port: 9080
weight: 1
成功部署后就可以从dashboard看到
那现在我访问一下顺便看看kiali
很nice
总结
其实我在参考官方blog前也在网上看了几个文章,说实话我没太懂,可能是比较菜,但是我从那几个文章里稍微等看到他们还是在网关那里加了一个sidecar,我觉得可能没什么必要,有可能我说的不对,未来Api gateway和istio融合了我也还是喜欢现在的模式,解耦。