日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用ASM路由級熔斷功能

ASM支持通過編寫VirtualService和DestinationRule等資源,實現(xiàn)微服務的無侵入的流量治理能力,包括流量路由、限流、熔斷、鏡像流量等功能。本文介紹如何使用ASM路由級熔斷功能。

前提條件

  • 已下載本文所需配置文件,具體請參見配置文件

  • 已創(chuàng)建ASM專業(yè)版實例,且版本為v1.13.4及以上。具體操作,請參見創(chuàng)建ASM實例

  • 已添加集群到ASM實例。具體操作,請參見添加集群到ASM實例

  • 已部署入口網(wǎng)關(guān)。具體操作,請參見創(chuàng)建入口網(wǎng)關(guān)

  • 已創(chuàng)建Bookinfo和Nginx服務。具體操作,請參見在ASM實例關(guān)聯(lián)的集群中部署應用

  • 已通過kubectl連接ASM實例。具體操作,請參見通過控制面kubectl訪問Istio資源

  • 已部署網(wǎng)關(guān)規(guī)則。具體操作,請參見管理網(wǎng)關(guān)規(guī)則

    展開查看Gateway YAML

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: bookinfo-gateway
      namespace: default
    spec:
      selector:
        istio: ingressgateway
      servers:
      - hosts:
        - bf2.example.com
        port:
          name: http
          number: 80
          protocol: http
  • 已創(chuàng)建虛擬服務。具體操作,請參見管理虛擬服務

    展開查看VirtualService YAML

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: bookinfo
      namespace: default
    spec:
      gateways:
      - bookinfo-gateway
      hosts:
      - bf2.example.com
      http:
      - match:
        - uri:
            exact: /productpage
        - uri:
            prefix: /static
        - uri:
            exact: /login
        - uri:
            exact: /logout
        - uri:
            prefix: /api/v1/products
        name: productpage-route-name1
        route:
        - destination:
            host: productpage
            port:
              number: 9080
      - match:
        - uri:
            prefix: /httpbin
        name: httpbin-route-name1
        rewrite:
          uri: /
        route:
        - destination:
            host: httpbin.foo.svc.cluster.local
            port:
              number: 80
  • 已安裝流量加壓工具。具體操作,請參見hey

背景信息

ASM支持在流量策略中配置熔斷功能,在網(wǎng)絡訪問超出熔斷配置時能夠拒絕請求。在DestinationRule資源中,TrafficPolicy字段下有以下兩個熔斷配置項:

  • ConnectionPoolSettings:為服務配置連接的數(shù)量。例如控制請求的最大數(shù)量,掛起請求,重試或者超時。

  • OutlierDetection:用于從負載均衡池中剔除不健康的實例。

社區(qū)Istio提供的DestinationRule熔斷配置如下,更多信息,請參見destination-rule

展開查看DestinationRule YAML

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: httpbin
spec:
  host: httpbin
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 1
      http:
        http1MaxPendingRequests: 1
        maxRequestsPerConnection: 1
    outlierDetection:
      consecutive5xxErrors: 1
      interval: 1s
      baseEjectionTime: 3m
      maxEjectionPercent: 100
                

社區(qū)Istio提供的熔斷功能,Envoy通過連接池實現(xiàn)對上游集群的限流熔斷,通過周期性的動態(tài)異常檢測來確定上游集群中的某些主機是否異常。如果發(fā)現(xiàn)異常,則將該主機從連接池中隔離出去。這本質(zhì)上是針對上游主機整體的熔斷。有以下兩個缺點:

  • 僅支持服務級別熔斷,不支持某個API進行限流熔斷。

  • 在路由規(guī)則后起作用,無法做到流量分發(fā)之前進行限流熔斷。

基于以上問題,ASM在數(shù)據(jù)面Envoy側(cè)進行了Filter鏈的擴展,通過com.aliyun.break filter支持路由級熔斷能力,控制面通過 ASMCircuitBreaker進行用戶側(cè)的透出。

本文以Bookinfo和Httpbin為例模擬慢請求和錯誤請求。其中,Bookinfo部署在default命名空間,Httpbin服務部署在foo命名空間,ingressgateway網(wǎng)關(guān)部署在istio-system命名空間,Httpbin單獨部署在foo命名空間的測試后端服務,目的是為了驗證熔斷的開啟范圍。場景示例

適用場景

ASM路由級熔斷功能適用于ASM網(wǎng)關(guān),支持HTTP和GRPC協(xié)議。您可以在ASMCircuitBreaker YAML文件中添加istioGateway相關(guān)配置,本文以/httpbin對應路由名稱為httpbin-route-name1配置熔斷規(guī)則為例進行說明。

apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMCircuitBreaker
metadata:
  name: ingressgateway
  namespace: istio-system
spec:
  workloadSelector:
    labels:
      app: istio-ingressgateway
  isGateway: true
  configs:
    - match:
        vhost:
          name: "bf2.example.com"
          port: 80
          route:
            name_match: nginx-route-name1
      breaker_config:
        slow_request_rt: 0.1s
        break_duration: 90s
        window_size: 10s
        max_slow_requests: 10
        min_request_amount: 3
        error_percent:
          value: 60
        custom_response:
          header_to_add:
            x-envoy-circuitbreak: "true"
          body: "hello, break!"
          status_code: 499

部分字段說明如下。關(guān)于ASMCircuitBreaker字段的詳細說明,請參見ASMCircuitBreaker CRD說明

字段

說明

isGateway: true

作用于網(wǎng)關(guān)。isGateway默認為false

value: 60

當請求響應的錯誤比例超過60%(最少請求3次時),觸發(fā)熔斷。

max_slow_requests: 10

當慢請求次數(shù)超過10次時,觸發(fā)熔斷。

說明

慢請求是指請求響應時間RT(Reaction time)超出slow_request_rt定義的請求。

break_duration: 90s

每次熔斷的時長定義為90s。

配置并驗證熔斷規(guī)則

本文對bf2.example.com:80這個VirtualHost下的某條路由進行限流配置,路由名稱為httpbin-route-name1

  1. 使用以下內(nèi)容,創(chuàng)建asmcircuitbreaker-test-gw.yaml文件。

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: ASMCircuitBreaker
    metadata:
      name: ingressgateway
      namespace: istio-system
    spec:
      workloadSelector:
        labels:
          app: istio-ingressgateway
      isGateway: true
      configs:
        - match:
            vhost:
              name: "bf2.example.com"
              port: 80
              route:
                name_match: httpbin-route-name1
          breaker_config:
            slow_request_rt: 0.1s
            break_duration: 90s
            window_size: 10s
            max_slow_requests: 10
            min_request_amount: 3
            error_percent:
              value: 60
            custom_response:
              header_to_add:
                x-envoy-overload: "true"
              body: "hello, break!"
              status_code: 499
  2. 執(zhí)行以下命令,創(chuàng)建ASMCircuitBreaker。

    kubectl apply -f asmcircuitbreaker-test-gw.yaml
  3. 執(zhí)行以下命令,模擬請求響應1s延遲或Httpbin響應500錯誤(連續(xù)請求10次左右)。

    • 模擬請求響應1s延遲:

      curl -H 'host: bf2.example.com'  http://${ASM_GATEWAY_IP}/httpbin/delay/1 -v
    • 模擬Httpbin響應500錯誤:

      curl -H 'host: bf2.example.com'  http://${ASM_GATEWAY_IP}/httpbin/status/500 -v

    預期輸出:

    < HTTP/1.1 499 Unknown
    < Content-Length: 12
    < Content-Type: text/plain
    < x-envoy-overload: true
    < Date: Thu, 13 Jan 2022 03:03:09 GMT
    < Server: istio-envoy
    <
    Hello,Break!

    由預期輸出得到,返回Hello,Break!,說明請求被熔斷。

  4. 執(zhí)行以下命令,訪問Bookinfo服務的/productpage接口。

    curl -H 'host: bf2.example.com'  http://${ASM_GATEWAY_IP}/productpage -v

    在Productpage頁面返回HTTP 200響應,說明請求未被熔斷。

相關(guān)文檔

ASMCircuitBreaker CRD說明