ISTIO bookinfo 实例 (固定版本、匹配重定向)
对istio dr和vs类型的理解。
dr类型指定别的服务怎样进来。
vs类型指定本服务出去怎么走。
更好的学习istio可以把官方任务里面的实例都做一遍理解。
地址: http://docs.istio.cn/docs/tasks/traffic-management/
最终效果:
所有访问都会从productpage到eviews的v3版本再到ratigs。
访问会一直是这个界面。
kiali查看情况
实现
istio安装查看前面文章
1、部署bookinfo实例。
kubectl apply -f istio-1.6.14/samples/bookinfo/platform/kube/bookinfo.yaml
# 验证
[root@ops kube]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/details-v1-745545f7d-c7q82 2/2 Running 0 7h12m
pod/productpage-v1-58bfbc7c64-lqrqw 2/2 Running 0 7h12m
pod/ratings-v1-649f84d76c-f89f2 2/2 Running 0 5h33m
pod/reviews-v1-57b655849b-x7xdd 2/2 Running 0 7h12m
pod/reviews-v2-685867965b-cjvll 2/2 Running 0 7h12m
pod/reviews-v3-5d6778fd88-j58vr 2/2 Running 0 7h12m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/details ClusterIP 10.97.248.228 <none> 9080/TCP 7h12m
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 121d
service/productpage ClusterIP 10.97.215.247 <none> 9080/TCP 7h12m
service/ratings ClusterIP 10.101.178.164 <none> 9080/TCP 7h12m
service/reviews ClusterIP 10.111.37.79 <none> 9080/TCP 7h12m
2、创建 Gateway 规则
kubectl apply -f istio-1.6.14/samples/bookinfo/networking/bookinfo-gateway.yaml
# 验证
[root@ops]# kubectl get gateway
NAME AGE
bookinfo-gateway 179m
3、执行 details、reviews 的 DestinationRule规则
kubectl apply -f istio-1.6.14/samples/bookinfo/networking/destination-rule-ratings.yaml
kubectl apply -f istio-1.6.14/samples/bookinfo/networking/destination-rule-reviews.yaml
[root@ops networking]# cat destination-rule-reviews.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
trafficPolicy:
loadBalancer:
simple: RANDOM
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v3
labels:
version: v3
# 验证
[root@ops-jenkins-nexus-ansible networking]# kubectl get dr
NAME HOST AGE
ratings ratings 176m
reviews reviews 176m
4、创建 details、reviews、ratings 的 VirtualService规则
details 规则编写
# 做了一个uri重定向。把details链接重定向为reviews 然后再把流量直接转到reviews v3的版本上。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: details
spec:
hosts:
- details
http:
- match:
- uri:
prefix: /details/
rewrite:
uri: /reviews/
route:
- destination:
host: reviews
subset: v3
reviews规则编写
# 进入流量都进入到v3版本
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v3
ratings规则编写
# 可以这写这个,但为了加深印象也直接制定为固定地址。
# 进入流量都进入到v1版本
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ratings
spec:
hosts:
- ratings
http:
- route:
- destination:
host: ratings
subset: v1
验证
[root@ops networking]# kubectl get vs
NAME GATEWAYS HOSTS AGE
bookinfo [bookinfo-gateway] [*] 3h7m
details [details] 151m
ratings [ratings] 177m
reviews [reviews] 178m
5、验证
所有规则创建后 如下图:
访问:
IP:端口/productpage
例:
http://192.168.4.4:11499/productpage
4.4为节点主机、 11499 为 istio-ingressgateway 80 nodeport端口