Istio - crds - Vistrual Service

简介: 虚拟服务(Vistrual Service)是 Istio 重要的资源对象之一,作用是将流量路由到网格中的服务。支持基于权重、http header条件等优先级的路由,比Kuberentes service对于流量的管控更加的丰富,颗粒度更加精细。

> 虚拟服务(Vistrual Service)是 Istio 重要的资源对象之一,作用是将流量路由到网格中的服务。支持基于权重、http header条件等优先级的路由,比Kuberentes service对于流量的管控更加的丰富,颗粒度更加精细。


#### 有了 Kubernetes Service,为什么还需要 Istio Vistrual Service

简单来说,基于 Kubernetes Service,只可以实现简单的流量负载均衡,如果想实现基于HTTP Header,负载百分比等等复杂的流量控制就无从下手了,Istio Vistrual Service在原本 Kubernetes Service 的功能之上,提供了更加丰富的路由控制。


#### 通过例子来理解

有两个Deployment(nginx 及 httpd),通过Service关联到一起,通过访问Service只能做到简单的负载均衡,通过实验发现 nginx 和 httpd 流量各自在 50% 左右。


Deployment & Service

apiVersion: apps/v1
kind: Deployment
metadata:  labels:    app: nginx
  name: nginx-deployment
spec:  replicas: 1  selector:    matchLabels:      app: nginx
  strategy:    rollingUpdate:      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:    metadata:      labels:        app: nginx
        server: web
    spec:      containers:        - image: 'nginx:latest'          name: nginx-deployment
---apiVersion: apps/v1
kind: Deployment
metadata:  labels:    app: httpd
  name: httpd-deployment
spec:  replicas: 1  selector:    matchLabels:      app: httpd
  strategy:    rollingUpdate:      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:    metadata:      labels:        app: httpd
        server: web
    spec:      containers:        - image: 'httpd:latest'          name: httpd-deployment 
---apiVersion: v1
kind: Service
metadata:  name: nginx-service
spec:  ports:  - port: 80    protocol: TCP
    targetPort: 80  selector:    app: nginx
  type: ClusterIP
---apiVersion: v1
kind: Service
metadata:  name: httpd-service
spec:  ports:  - port: 80    protocol: TCP
    targetPort: 80  selector:    app: httpd
  type: ClusterIP
---apiVersion: v1
kind: Service
metadata:  name: web-service
spec:  ports:  - port: 80    protocol: TCP
    targetPort: 80  selector:    server: web
  type: ClusterIP

image.jpeg



如果想实现更加细颗粒度的流量管控,通过引入Istio Vistrual Service 非常简单的就实现复杂的流量管理。


VirtualService 根据 Destination 进行调度,并且设置相关的负载百分比实现精准的控制。


apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:  name: web-vs
spec:  hosts:  - web-service
  http:  - route:    - destination:        host: nginx-service
      weight: 80    - destination:   host: httpd-service
      weight: 20

image.jpeg



通过客户端测试以上的实验,请留意客户端也必须经过 Istio 注入,因为只有客户端被 Istio 注入才可以接收到来自 Pilot 有关 Virtual Service 和 Destination Rule 的配置信息,才可以保证流量接管生效。


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"]

wget -q -O - web-service



####  Vistrual Service 除了权重之外,还有条件匹配

很多场景下,需要针对不同的用户已提供个性化的服务等(提前内测新版本),例如针对地理位置、是否为VIP等等,那就需要对 httpd 流量进行识别匹配。


####

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:  name: web-vs
spec:  hosts:  - web-service
  http:  - match:    - headers:        end-user:          exact: carryyip
      uri:        prefix: "/health"      ignoreUriCase: true    route:      - destination:          host: httpd-service
  - route:    - destination:        host: nginx-service


基于 HttpMatchRequest,路由规则从上到下进行优先级排序,在生产环境中建议使用一个无条件的规则作为最后规则,确保流量始终会匹配到最少一条规则,防止意外情况的方式。


路由规则从 match 关键字开始匹配,可以使用精确 exact 和 前缀 prefix 或者 正则表达式进行不同场景下的匹配。



目录
相关文章
|
存储 Kubernetes 负载均衡
【Kubernetes的Service Mesh发展历程及Istio架构、存储供应使用NFS flexvolume CSI接口】
【Kubernetes的Service Mesh发展历程及Istio架构、存储供应使用NFS flexvolume CSI接口】
222 0
|
Prometheus 负载均衡 Kubernetes
Service Mesh: Istio vs Linkerd
根据CNCF的最新年度调查,很明显,很多人对在他们的项目中使用服务网格表现出了浓厚的兴趣,并且许多人已经在他们的生产中使用它们。近69%的人正在评估Istio,64%的人正在研究Linkerd。Linkerd是市场上第一个服务网格,但是Istio使服务网格更受欢迎。这两个项目都是最前沿的,而且竞争非常激烈,因此选择一个项目是一个艰难的选择。在此博客文章中,我们将了解有关Istio和Linkerd体系结构,其运动部件的更多信息,并比较其产品以帮助您做出明智的决定。
160 0
Service Mesh 的实现,Google 的 Istio
Service Mesh 的实现,Google 的 Istio
98 0
|
负载均衡 Kubernetes 网络协议
Service Mesh对比:Istio与Linkerd
Service Mesh对比:Istio与Linkerd
1097 0
Service Mesh对比:Istio与Linkerd
|
运维 Kubernetes 网络协议
Rainbond 5.5 发布,支持Istio和扩展第三方Service Mesh框架
Rainbond 5.5 版本主要优化扩展性。服务治理模式可以扩展第三方 ServiceMesh 架构,兼容kubernetes 管理命令和第三方管理平台。
Rainbond 5.5 发布,支持Istio和扩展第三方Service Mesh框架
|
Prometheus Kubernetes 监控
Istio在Rainbond Service Mesh体系下的落地实践
在Rainbond中,用户可以对不同的应用设置不同的治理模式,即用户可以通过切换应用的治理模式,来按需治理应用。这样带来的好处便是用户可以不被某一个ServiceMesh框架所绑定,且可以快速试错,能快速找到最适合当前业务的ServiceMesh框架。
Istio在Rainbond Service Mesh体系下的落地实践
Istio - crds - Ingress Gateway
入口网关(Ingress Gateway)是 Istio 重要的资源对象之一,是用于管理网格边缘入站的流量,通过入口网关就可以很轻松的将网格内部的服务暴露到外部提供访问。
221 0
Istio - crds - Ingress Gateway
|
域名解析 网络协议 容器
Istio - crds - Service Entry
服务条目(Service Entry)是 Istio 重要的资源对象之一,作用是将外部的资源注册到 Istio 内部的网格服务中来,以提供网格内对外部资源的更加精细化的控制。
289 0
Istio - crds - Service Entry
|
运维 Kubernetes 负载均衡
Service Mesh 最火项目 Istio 架构解析
本文摘自于由阿里云高级技术专家王夕宁撰写的《Istio 服务网格技术解析与实践》一书,文章从基础概念入手,介绍了什么是服务网格及 Istio,针对 2020 服务网格的三大发展趋势,体系化、全方位地介绍了 Istio 服务网格的相关知识。
8830 1
Service Mesh 最火项目 Istio 架构解析
|
1月前
|
监控 安全 Cloud Native
云原生安全:Istio在微服务架构中的安全策略与实践
【10月更文挑战第26天】随着云计算的发展,云原生架构成为企业数字化转型的关键。微服务作为其核心组件,虽具备灵活性和可扩展性,但也带来安全挑战。Istio作为开源服务网格,通过双向TLS加密、细粒度访问控制和强大的审计监控功能,有效保障微服务间的通信安全,成为云原生安全的重要工具。
45 2