我用k8s来尝个鲜
我用的是minikube-v1.4.0
和istio-v1.3.2
下载安装包的文档
官网安装说明
可见此处,最重要的一点,在下载的安装包中执行命令
kubectl apply -f install/kubernetes/istio-demo.yaml
示例应用
按照官方文档-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