istio官网截图
我用k8s来尝个鲜
我用的是minikube-v1.4.0和istio-v1.3.2
下载安装包的文档
官网安装说明
可见此处,最重要的一点,在下载的安装包中执行命令
kubectl apply -f install/kubernetes/istio-demo.yaml
示例应用
按照官方文档-Bookinfo 应用部署bookinfo示例应用,应用结构如下图所示:
bookinfo涉及到的几个微服务示例
关键步骤可见此处
kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml)
以及
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
其实,仅有bookinfo.ymal而没有-gateway.yaml时,已经有效果了。
可通过更改service productpage的type,由ClusterIP改为NodePort,此时访问,可见到成功调到了后台的服务。
-gateway.yml很有意思,其实bookinfo中的各service的type为ClusterIP,这也意味着外部不能访问。加上此yml后,可从外部访问了,只是需要通过istio-system下的service istio-ingressgateway
自己来一个试试
之前的bookinfo-gateway.yml中已定义了一个gateway和一个VirtualService。理解的重点,依赖链条VirtualService->Gateway->istio的ingressgateway
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
已有一个service some-tomcat,18080 -> 8080,仿照写一个
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: tomcat
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /test-vs-tomcat-exact
- uri:
prefix: /test-vs-tomcat-prefix
route:
- destination:
host: some-tomcat
port:
number: 18080
对比exact和prefix
| 类型 | url示例 | 被转发 |
|---|---|---|
| exact | /exact | √ |
| exact | /exact-blabla | × |
| prefix | /prefix | √ |
| prefix | /prefix-blabla | √ |
但是,这个不像反向代理,去掉匹配到的前缀,比如,访问/exact,转发到tomcat,路径仍是/exact;访问/prefix-blabla,转发到tomcat,路径仍是/prefix-blabla












网友评论