Istio - TrafficManagement - Timeout

简介: 超时是为了解决长时间或者无限期的等待造成服务不可用,通常需要在代码中植入此类的网络层面的弹性处理逻辑,但通过 Istio 就可以使用 Vitual Sevice来优雅的实现超时的处理。

> 超时是为了解决长时间或者无限期的等待造成服务不可用,通常需要在代码中植入此类的网络层面的弹性处理逻辑,但通过 Istio 就可以使用 Vitual Sevice来优雅的实现超时的处理。


#### 什么场景需要用到超时处理

在生产环境中经常会碰到由于调用方等待下游的响应过长,堆积大量的请求阻塞了自身服务,造成雪崩的情况,通过通过超时处理来避免由于无限期等待造成的故障,进而增强服务的可用性。


#### 通过例子来理解

image.jpeg

nginx 服务设置了超时时间为3秒,如果超出这个时间就不在等待,返回超时错误。

httpd 服务设置了响应时间延迟5秒,任何请求都需要等待5秒后才能返回。

client 通过访问 nginx 服务去反向代理 httpd 服务,由于 httpd 服务需要5秒后才能返回,但nginx 服务只等待3秒,所以客户端会提示超时错误。

apiVersion: apps/v1
kind: Deployment
metadata:  labels:    app: nginx-deployment
  name: nginx-deployment
spec:  replicas: 1  selector:    matchLabels:      app: nginx-deployment
  strategy:    rollingUpdate:      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:    metadata:      labels:        app: nginx-deployment
    spec:      containers:        - image: 'nginx:latest'          name: nginx-deployment
---apiVersion: apps/v1
kind: Deployment
metadata:  labels:    app: httpd-deployment
  name: httpd-deployment
spec:  replicas: 1  selector:    matchLabels:      app: httpd-deployment
  strategy:    rollingUpdate:      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:    metadata:      labels:        app: httpd-deployment
    spec:      containers:        - image: 'httpd:latest'          name: httpd-deployment
---apiVersion: v1
kind: Service
metadata:  name: nginx-service
spec:  selector:    app: nginx-deployment
  type: ClusterIP
  ports:  - name: http
    port: 80    targetPort: 80    protocol: TCP
---apiVersion: v1
kind: Service
metadata:  name: httpd-service
spec:  selector:    app: httpd-deployment
  type: ClusterIP
  ports:  - name: http
    port: 80    targetPort: 80    protocol: TCP
---apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:  name: nginx-vs
spec:  hosts:  - nginx-service
  http:  - route:    - destination:        host: nginx-service
    timeout: 3s
---apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:  name: httpd-vs
spec:  hosts:  - httpd-service
  http:  - fault:      delay:        percentage:          value: 100        fixedDelay: 5s
    route:    - destination:        host: httpd-service
---apiVersion: apps/v1
kind: Deployment
metadata:  labels:    app: client-deployment
  name: client-deployment
spec:  replicas: 1  selector:    matchLabels:      app: client-deployment
  strategy:    rollingUpdate:      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:    metadata:      labels:        app: client-deployment
    spec:      containers:        - image: 'busybox:latest'          name: client-deployment
          command: ["/bin/sh","-c","sleep 3600"]

##### 配置 nginx 反向代理 模拟下游调用

``kubectl exec -it nginx-deployment-56c94b9957-xgw88 -- sh``

tee /etc/nginx/conf.d/default.conf <<-'EOF'server {
    listen 80;
    server_name localhost;
    location / {
        proxy_pass http://httpd-service;
        proxy_http_version 1.1;
    }
}
EOF

执行  ``nginx -t ; nginx -s reload`` 重启服务以生效配置


##### 进入客户端容器测试结果

``kubectl exec -it client-deployment-56c94b9957-xgw88 -- sh``

``while true; do wget -q -O - http://nginx-service; done``

image.jpeg

每隔3秒,由于 nginx 服务的超时时间到了而 httpd 未有响应,则提示返回超时错误。


目录
相关文章
|
运维 监控 负载均衡
Istio 介绍
当下,微服务架构在构建和部署现代应用程序时变得越来越流行。然而,微服务架构的复杂性也随之增加,特别是在涉及到服务间通信、负载均衡、安全性和监控方面。在这个复杂的环境中,Istio成为了一个强大的工具,它可以帮助您管理和控制微服务应用程序的各个方面。本文将详细介绍Istio,并探讨其核心功能和优势。
|
Kubernetes 测试技术 应用服务中间件
Istio简介及基于ACK安装Istio
了解服务网格开源产品Istio,使用阿里云ACK安装Istio过程
1127 2
|
网络协议 应用服务中间件 nginx
玩转Kubernetes TCP Ingress
如何使用Kubernetes的TCP Ingress
19848 0
|
3月前
|
Kubernetes 网络协议 安全
Istio安全-证书管理
Istio安全-证书管理
44 1
Istio安全-证书管理
|
负载均衡 Kubernetes 网络协议
kubernetes--kube-proxy组件深入理解
每台机器上都运行一个kube-proxy服务’它监听API server中service和endpoint的变化情 况,并通过iptables等来为服务配置负载均衡(仅支持TCP和UDP)
409 0
|
Prometheus 负载均衡 Kubernetes
Service Mesh: Istio vs Linkerd
根据CNCF的最新年度调查,很明显,很多人对在他们的项目中使用服务网格表现出了浓厚的兴趣,并且许多人已经在他们的生产中使用它们。近69%的人正在评估Istio,64%的人正在研究Linkerd。Linkerd是市场上第一个服务网格,但是Istio使服务网格更受欢迎。这两个项目都是最前沿的,而且竞争非常激烈,因此选择一个项目是一个艰难的选择。在此博客文章中,我们将了解有关Istio和Linkerd体系结构,其运动部件的更多信息,并比较其产品以帮助您做出明智的决定。
153 0
|
数据采集 Prometheus 监控
ISTIO telemetry V2 介绍
### 背景 ISTIO 早期版本(1.4以前)的架构非常优雅, 模块之间解耦清晰,职责分明。 但现在看来有一定理想化,所有流量通过Mixer,通过Mixer 统一采集和上报所有的遥测数据和服务间访问鉴权,导致一旦规模上来,Mixer 非常容易成为性能瓶颈。 ![image.png](https://ata2-img.cn-hangzhou.oss-pub.aliyun-inc.com/920
1713 0
|
容器
kubernetes的timeout问题
kubernetes+alpine+php特别容易出现访问外网/解析外网地址的时候出现超时的问题.
4483 0
minikube addons enable ingress 报错waiting for app.kubernetes.io/name=ingress-nginx pods: timed out
minikube addons enable ingress 报错waiting for app.kubernetes.io/name=ingress-nginx pods: timed out
|
负载均衡 Kubernetes 监控
[Istio是什么?] 还不知道你就out了,一文40分钟快速理解
这篇文章属于纯理论,所含内容如下,按需阅读: - `Istio概念、服务网格、流量管理、istio架构(Envoy、Sidecar 、Istiod)` - `虚拟服务(VirtualService)、路由规则、目标规则(DestinationRule)` - `网关(Gateway)、网络弹性和测试(超时、重试、熔断器、故障注入)`
381 0
[Istio是什么?] 还不知道你就out了,一文40分钟快速理解