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

通過ASM實現(xiàn)TCP應(yīng)用流量遷移

當您需要優(yōu)化網(wǎng)絡(luò)拓撲、擴容應(yīng)用服務(wù)器或調(diào)整業(yè)務(wù)流量時,可以通過ASM的流量管理中心實現(xiàn)TCP應(yīng)用流量的平滑遷移,確保關(guān)鍵業(yè)務(wù)的連續(xù)性和服務(wù)的高可用性。以Istio官方Task TCP-Traffic-Shifting為例,本文介紹如何在一個TCP服務(wù)的兩個版本之間進行流量灰度切換。該Task中的Echo服務(wù)有兩個版本,v1版本響應(yīng)時會在接收到的消息前添加前綴“one”,v2版本會添加“two”,您可以觀察流量轉(zhuǎn)移的效果,并對分流策略進行微調(diào),以滿足具體的業(yè)務(wù)需求和性能目標。

前提條件

步驟一:部署示例應(yīng)用

  1. 部署TCP- Echo應(yīng)用的2個版本。

    1. 登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群

    2. 集群列表頁面,單擊目標集群名稱,然后在左側(cè)導(dǎo)航欄,選擇工作負載 > 無狀態(tài)

    3. 無狀態(tài)頁面上方,選擇目標命名空間,然后單擊右上角的使用YAML創(chuàng)建資源

    4. 設(shè)置示例模板自定義,將下面的YAML粘貼到模板文本框,然后單擊創(chuàng)建

      展開查看YAML

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: tcp-echo-v1
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: tcp-echo
            version: v1
        template:
          metadata:
            labels:
              app: tcp-echo
              version: v1
          spec:
            containers:
            - name: tcp-echo
              image: docker.io/istio/tcp-echo-server:1.1
              imagePullPolicy: IfNotPresent
              args: [ "9000", "one" ]
              ports:
              - containerPort: 9000
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: tcp-echo-v2
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: tcp-echo
            version: v2
        template:
          metadata:
            labels:
              app: tcp-echo
              version: v2
          spec:
            containers:
            - name: tcp-echo
              image: docker.io/istio/tcp-echo-server:1.1
              imagePullPolicy: IfNotPresent
              args: [ "9000", "two" ]
              ports:
              - containerPort: 9000

      無狀態(tài)頁面,可以看到新創(chuàng)建的兩個版本的TCP-Echo應(yīng)用。

  2. 創(chuàng)建一個服務(wù),并將其對外暴露。

    1. 登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群

    2. 集群列表頁面,單擊目標集群名稱,然后在左側(cè)導(dǎo)航欄,選擇網(wǎng)絡(luò) > 服務(wù)

    3. 服務(wù)頁面上方,選擇目標命名空間,然后單擊右上角的創(chuàng)建

    4. 創(chuàng)建服務(wù)對話框,配置服務(wù)的相關(guān)信息,然后單擊確定

      配置項

      說明

      服務(wù)名稱

      配置為tcp-echo

      服務(wù)類型

      選擇服務(wù)類型,即服務(wù)訪問的方式。支持虛擬集群IP節(jié)點端口負載均衡

      說明

      服務(wù)類型選擇虛擬集群IP時,才能設(shè)置實例間發(fā)現(xiàn)服務(wù)(Headless Service)。您可以使用無頭Service與其他服務(wù)發(fā)現(xiàn)機制進行接口,不與Kubernetes的實現(xiàn)捆綁在一起。

      服務(wù)關(guān)聯(lián)

      配置名稱apptcp-echo-v1

      說明

      將從關(guān)聯(lián)的Deployment中提取app這個標簽作為Service的Selector,這決定了Kubernetes service將流量轉(zhuǎn)發(fā)到哪個Deployment。由于tcp-echo-v1和tcp-echo-v2兩個Deployment擁有相同的標簽,即app:tcp-echo,因此可以關(guān)聯(lián)任一Deployment。

      外部流量策略

      支持LocalCluster

      說明

      當您的服務(wù)類型為節(jié)點端口負載均衡時,才能設(shè)置外部流量策略

      端口映射

      本文配置名稱tcp服務(wù)端口容器端口9000協(xié)議TCP

      注解

      為該服務(wù)添加一個注解(annotation),配置負載均衡的參數(shù)。例如,設(shè)置service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:20表示將該服務(wù)的帶寬峰值設(shè)置為20 Mbit/s,控制服務(wù)的流量。關(guān)于參數(shù)的說明,請參見通過Annotation配置傳統(tǒng)型負載均衡CLB

      標簽

      為服務(wù)添加一個標簽,標識該服務(wù)。

      創(chuàng)建成功后,在服務(wù)頁面,可以看到新創(chuàng)建的tcp-echo服務(wù)。

步驟二:設(shè)置路由規(guī)則

通過設(shè)置服務(wù)網(wǎng)格的Istio網(wǎng)關(guān)、虛擬服務(wù)和目標規(guī)則,將流量全部指向tcp-echo服務(wù)的v1版本。

  1. 登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇服務(wù)網(wǎng)格 > 網(wǎng)格管理

  2. 網(wǎng)格管理頁面,找到待配置的實例,單擊實例的名稱或在操作列中單擊管理

  3. 創(chuàng)建服務(wù)網(wǎng)關(guān)。

    1. 在網(wǎng)格詳情頁面左側(cè)導(dǎo)航欄,選擇ASM網(wǎng)關(guān) > 網(wǎng)關(guān)規(guī)則,然后在右側(cè)頁面,單擊使用YAML創(chuàng)建

    2. 創(chuàng)建頁面,命名空間選擇default,選擇任意場景模版,配置以下YAML,然后單擊創(chuàng)建

      apiVersion: networking.istio.io/v1alpha3
      kind: Gateway
      metadata:
        name: tcp-echo-gateway
      spec:
        selector:
          istio: ingressgateway
        servers:
        - port:
            number: 31400
            name: tcp
            protocol: TCP
          hosts:
          - "*"
  4. 創(chuàng)建虛擬服務(wù)。

    1. 在網(wǎng)格詳情頁面左側(cè)導(dǎo)航欄,選擇流量管理中心 > 虛擬服務(wù),然后在右側(cè)頁面,單擊使用YAML創(chuàng)建

    2. 創(chuàng)建頁面,命名空間選擇default,選擇任意場景模版,配置以下YAML,然后單擊創(chuàng)建

      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: tcp-echo
      spec:
        hosts:
        - "*"
        gateways:
        - tcp-echo-gateway
        tcp:
        - match:
          - port: 31400
          route:
          - destination:
              host: tcp-echo
              port:
                number: 9000
              subset: v1
  5. 創(chuàng)建目標規(guī)則。

    1. 在網(wǎng)格詳情頁面左側(cè)導(dǎo)航欄,選擇流量管理中心 > 目標規(guī)則,然后在右側(cè)頁面,單擊使用YAML創(chuàng)建

    2. 創(chuàng)建頁面,命名空間選擇default,選擇任意場景模版,配置以下YAML,然后單擊創(chuàng)建

      apiVersion: networking.istio.io/v1alpha3
      kind: DestinationRule
      metadata:
        name: tcp-echo-destination
      spec:
        host: tcp-echo
        subsets:
        - name: v1
          labels:
            version: v1
        - name: v2
          labels:
            version: v2

步驟三:部署入口網(wǎng)關(guān)

在入口網(wǎng)關(guān)中,添加端口31400,并指向Istio網(wǎng)關(guān)的31400端口。

  1. 登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇服務(wù)網(wǎng)格 > 網(wǎng)格管理

  2. 網(wǎng)格管理頁面,單擊目標實例名稱,然后在左側(cè)導(dǎo)航欄,選擇ASM網(wǎng)關(guān) > 入口網(wǎng)關(guān)

  3. 入口網(wǎng)關(guān)頁面,單擊創(chuàng)建,進行相關(guān)配置,然后單擊創(chuàng)建

    部分配置項說明如下。關(guān)于配置項的更多說明,請參見創(chuàng)建入口網(wǎng)關(guān)

    配置項

    說明

    部署集群

    選擇要部署入口網(wǎng)關(guān)的集群。

    負載均衡CLB類型

    本文選擇公網(wǎng)訪問

    選擇負載均衡

    • 使用已有負載均衡:從已有負載均衡列表中選擇。

    • 新建負載均衡CLB:單擊新建負載均衡CLB,從下拉列表中選擇所需的負載均衡規(guī)格。

    說明

    建議您為每個Kubernetes服務(wù)分配一個CLB。如果多個Kubernetes服務(wù)復(fù)用同一個CLB,存在以下風(fēng)險和限制:

    • 使用已有的CLB會強制覆蓋已有監(jiān)聽,可能會導(dǎo)致您的應(yīng)用不可訪問。

    • Kubernetes通過Service創(chuàng)建的CLB不能復(fù)用,只能復(fù)用您手動在控制臺(或調(diào)用OpenAPI)創(chuàng)建的CLB。

    • 復(fù)用同一個CLB的多個Service不能有相同的前端監(jiān)聽端口,否則會造成端口沖突。

    • 復(fù)用CLB時,監(jiān)聽的名字以及虛擬服務(wù)器組的名字被Kubernetes作為唯一標識符。請勿修改監(jiān)聽和虛擬服務(wù)器組的名字。

    • 不支持跨集群復(fù)用CLB。

    端口映射

    單擊添加端口,配置名稱tcp服務(wù)端口31400

步驟四:檢查部署結(jié)果

通過Kubectl確認tcp-echo服務(wù)的流量指向是否符合預(yù)期。

  1. 通過Kubectl客戶端連接至Kubernetes集群。具體操作,請參見步驟二:選擇集群憑證類型

  2. 執(zhí)行以下命令,獲得服務(wù)的地址與端口。

    $ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    $ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="tcp")].port}')
  3. 使用telnet指令向tcp-echo服務(wù)發(fā)起連接請求。

    $ telnet $INGRESS_HOST $INGRESS_PORT
    Trying xxx.xxx.xxx.xxx...
    Connected to xxx.xxx.xxx.xxx.
    Escape character is '^]'
  4. 輸入任意字符串,按Enter發(fā)送。

    返回的字符串前面帶了“one”,說明tcp-echo服務(wù)已經(jīng)成功部署,且流量全部指向了tcp-echo-v1版本。

步驟五:按比例將流量路由到tcp-echo-v2

此處將20%的流量指向tcp-echo-v2版本,其余80%仍然打到tcp-echo-v1。

  1. 修改ASM實例的虛擬服務(wù)配置。

    1. 在網(wǎng)格詳情頁面左側(cè)導(dǎo)航欄,選擇流量管理中心 > 虛擬服務(wù)

    2. 虛擬服務(wù)頁面,單擊tcp-echo所在操作列中的YAML

    3. 編輯實例頁面的文本框中輸入以下YAML文件內(nèi)容,單擊確定

      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: tcp-echo
      spec:
        hosts:
        - "*"
        gateways:
        - tcp-echo-gateway
        tcp:
        - match:
          - port: 31400
          route:
          - destination:
              host: tcp-echo
              port:
                number: 9000
              subset: v1
            weight: 80
          - destination:
              host: tcp-echo
              port:
                number: 9000
              subset: v2
            weight: 20
  2. 執(zhí)行以下命令,向tcp-echo服務(wù)發(fā)起10次請求。

    $ for i in {1..10}; do \
    docker run -e INGRESS_HOST=$INGRESS_HOST -e INGRESS_PORT=$INGRESS_PORT -it --rm busybox sh -c "(date; sleep 1) | nc $INGRESS_HOST $INGRESS_PORT"; \
    done
    one Mon Nov 12 23:38:45 UTC 2018
    two Mon Nov 12 23:38:47 UTC 2018
    one Mon Nov 12 23:38:50 UTC 2018
    one Mon Nov 12 23:38:52 UTC 2018
    one Mon Nov 12 23:38:55 UTC 2018
    two Mon Nov 12 23:38:57 UTC 2018
    one Mon Nov 12 23:39:00 UTC 2018
    one Mon Nov 12 23:39:02 UTC 2018
    one Mon Nov 12 23:39:05 UTC 2018
    one Mon Nov 12 23:39:07 UTC 2018

    根據(jù)以上請求的分發(fā)情況,可以看到20%的流量指向了tcp-echo-v2。

    說明

    您的測試結(jié)果可能不一定總是10次中有2次打到tcp-echo-v2,但從較長時間范圍的總體比例來看,將接近20%。