总目录索引:istio从入门到放弃系列

1、介绍

    网络弹性也称为运维弹性,是指网络在遇到灾难事件时快速恢复和继续运行的能力。灾难事件的范畴很广泛,比如长时间停电、网络设备故障、恶意***等。

    Istio 重试机制就是如果调用服务失败,Envoy 代理尝试连接服务的最大次数。而默认情况下,Envoy 代理在失败后并不会尝试重新连接服务,除非我们启动 Istio 重试机制。

2、重试实例

2.1 架构图

网络弹性之重试_第1张图片

   架构说明如下,本实例模拟客户端调用 nginx,nginx 将请求转发给 tomcat。tomcat 通过故障注入而中止对外服务,nginx 设置如果访问 tomcat 失败则会重试 3 次。

2.2 客户端资源

apiVersion: apps/v1
kind: Deployment
metadata:
  name: client
spec:
  replicas: 1
  selector:
    matchLabels:
      app: client
  template:
    metadata:
      labels:
        app: client
    spec:
      containers:
      - name: busybox
        image: busybox
        imagePullPolicy: IfNotPresent
        command: [ "/bin/sh", "-c", "sleep 3600" ]

2.3 服务端资源

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  selector:
    server: nginx
  ports:
  - name: http
    port: 80
    targetPort: 80
    protocol: TCP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    server: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      server: nginx
  template:
    metadata:
      labels:
        server: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14-alpine
        imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-svc
spec:
  selector:
    server: tomcat
  ports:
  - name: http
    port: 8080
    targetPort: 8080
    protocol: TCP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat
  labels:
    server: tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      server: tomcat
  template:
    metadata:
      labels:
        server: tomcat
    spec:
      containers:
      - name: tomcat
        image: docker.io/kubeguide/tomcat-app:v1
        imagePullPolicy: IfNotPresent

2.4 虚拟服务

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: nginx-vs
spec:
  hosts:
  - nginx-svc
  http:
  - route:
    - destination:
        host: nginx-svc
    reties:
      attempts: 3
      perTryTimeout: 10s
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: tomcat-vs
spec:
  hosts:
  - tomcat-svc
  http:
  - fault:
      abort:
        percentage:
          value: 100
        httpStatus: 503
    route:
    - destination:
        host: tomcat-svc

3、istio注入测试

    需要对 client 和 deploy 资源进行 Istio 注入,将 client、nginx、tomcat 都放到网格中。这里使用手工注入 Istio

istioctl kube-inject -f client.yaml |kubectl apply -f -

istioctl kube-inject -f test-nginx.yaml |kubectl apply -f -

注入成功后结果如下

网络弹性之重试_第2张图片

4、修改nginx代理

 kubectl exec -it nginx-579d7f7ff-ggnxs -- sh

vi /etc/nginx/conf.d/default.conf

网络弹性之重试_第3张图片

修改完后从新加载nginx配置

nginx -t
nginx -s reload

5、实例测试

登录客户端访问nginx

kubectl exec -it client-8496866cdf-8k6pv -- sh

wget -q -O - http://nginx-svc

再打开一个控制台输出nginx的日志
网络弹性之重试_第4张图片

网络弹性之重试_第5张图片

参考文章:https://blog.51cto.com/14625168/2498681