zoukankan      html  css  js  c++  java
  • istio-http流量管理(1)

    参考

    1. 定义目标与规则

    • istio 服务网格中对服务进行了进一步抽象:
      • 可以使用 Pod 标签对具体的服务进程进行分组;
      • 可以定义服务的负载均衡策略;
      • 可以为服务指定 TLS 要求;
      • 可以为服务设置连接池大小。
    • istio 中,同一服务不同组别的后端被称为 子集(Subset) ,也经常被称为 服务版本
    • 在 istio 中,建议为每个网格都设置明确的目标访问规则,在通过 istio 流量控制之后,会选择明确的子集,根据规则或在子集中规定的流量策略来进行访问,这种规则被称为 DestinationRule ,样例如下:
      cat flaskapp-destinationrule.yaml
      apiVersion: networking.istio.io/v1alpha3
      kind: DestinationRule
      metadata:
        name: flaskapp
      spec:
        host: flaskapp.default.svc.cluster.local
        trafficPolicy:
          loadBalancer:
            simple: LEAST_CONN
        subsets:
        - name: v1
          labels:
            version: v1
          trafficPolicy:
            loadBalancer: ROUND_ROBIN
        - name: v2
          labels:
            version: v2
      
      规则需要注意的地方如下:
      • host: 必要字段,代表1个 Service 资源,或1个 ServiceEntry 定义的外部服务。
        • 建议:为防止不同命名空间服务重名,可以使用完全限定名。
      • trafficPolicy: 流量策略,在 DestinationRuleSubset 都可以定义,Subset 中的级别更高。
      • subsets: 该字段使用标签选择器定义不同的子集。

    2. 定义默认路由

    2.1 定义默认路由

    • 建议每个服务都创建1个默认路由,在没有特定的路由规则时,使用默认路由规则访问指定子集,一以此确保服务在默认情况下的行为稳定性,样例如下:
      cat flaskapp-default-vs.yaml 
      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: flaskapp
      spec:
        hosts:
        - flaskapp.default.svc.cluster.local
        http:
        - route:
          - destination:
              host: flaskapp.default.svc.cluster.local
              subset: v1
      
    • VirtualService: istio 流量控制过程中的枢纽,负责对流量进行甄别与转发。
      • 针对主机名工作,但 hosts 字段是一个数组内容,可以针对多个主机名进行工作。
      • 可以为多种协议的流量提供服务,如 httptcptls等。
    • http 的下一级,即具体的路由规则。
      • 支持多条路由。

    2.2 验证

    # 应用目标规则与默认路由
    kubectl apply -f flaskapp-destinationrule.yaml
    kubectl apply -f flaskapp-default-vs.yaml
    
    # 验证,可同步观察 kiali & Jaeger 等
    kubectl exec -it -c sleep $(kubectl get pod -l app=sleep,version=v1 -o jsonpath='{.items..metadata.name}') /bin/bash
    bash-4.4# for i in `seq 100` ; do http --body http://flaskapp.default/env/version ; done
    

    2.3 总结

    在 istio 中部署1个业务应用时,建议:

    • 使用 app 标签表明应用身份;
    • 使用 version 标签表明应用版本;
    • 创建目标规则;
    • 创建默认路由规则,默认路由得配置清单应该成为服务网格环境下的必要部署内容。

    3. 流量拆分与迁移

    3.1 权重

    cat flaskapp-default-vs.yaml 
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: flaskapp
    spec:
      hosts:
      - flaskapp.default.svc.cluster.local
      http:
      - route:
        - destination:
            host: flaskapp.default.svc.cluster.local
            subset: v1
          weight: 70
        - destination:
            host: flaskapp.default.svc.cluster.local
            subset: v2
          weight: 30
          
    # 应用
    kubectl apply -f flaskapp-default-vs.yaml
    
    # 验证,可同步观察 kiali & Jaeger 等
    # 因是权重的原因,验证时样本量需要大一些
    kubectl exec -it -c sleep $(kubectl get pod -l app=sleep,version=v1 -o jsonpath='{.items..metadata.name}') /bin/bash
    bash-4.4# for i in `seq 100` ; do http --body http://flaskapp.default/env/version ; done | awk -F "v1" '{print NF-1}'
    

    注意点:

    • 流量分配是有权重的,且权重总和必须是 100
    • 如果不显示声明权重,则默认值是 100

    3.2 获取 istio 对象

    • kubectl getkubectl api-resources 列出当前集群支持的所有对象类型
    • Kiali --> Istio Config
  • 相关阅读:
    Android学习地址
    Android动画设计源码地址
    chromeWebBrowser之浏览器开发
    win8.1蓝屏解决
    打包应用程序
    win8.1解决鼠标右键反应慢的问题
    Rewrite服务器和robots文件屏蔽动态页面
    第08组 Alpha事后诸葛亮
    第08组 Alpha冲刺(6/6)
    第08组 Alpha冲刺(5/6)
  • 原文地址:https://www.cnblogs.com/netonline/p/12609021.html
Copyright © 2011-2022 走看看