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

基于ASM實現多集群的一站式流量治理

通過ACK One的服務網格功能,您可以實現多集群的一站式應用分發和流量治理。本文介紹如何通過ACK One Fleet實例完成關聯集群之間的應用分發和流量治理。

前提條件

  • ACK One Fleet實例已開啟服務網格。具體操作,請參見開啟服務網格

  • 已添加至少一個關聯集群。具體操作,請參見添加關聯集群

  • 已從ACK One控制臺獲取Fleet實例的KubeConfig,并通過kubectl連接至Fleet實例。

背景信息

本文示例通過使用ACK One Fleet實例的KubeConfig,在多個關聯集群上部署Rollouts應用,同時下發相應的流量治理規則,從而完成多個版本之間的流量切換。關于多集群管理應用分發的更多信息,請參見應用分發

本文示例操作示意如下圖所示。

image
  • 圖中①表示用戶可以部署相應的Kubernetes原生應用到關聯集群,例如Deployment、Service、ConfigMap等。

  • 圖中②表示用戶可以通過ACK One Fleet實例下發流量治理相關的規則到關聯集群,不需要使用服務網格ASM的KubeConfig,目前支持的有:

    • Destinationrules

    • Envoyfilters

    • Gateways

    • Serviceentries

    • Sidecars

    • Virtualservices

    • Workloadentries

    • Workloadgroups

  • 圖中③表示用戶通過訪問網關地址訪問應用,應用最終根據所部署的流量規則呈現相應的結果。

操作步驟

  1. 執行以下命令,在default命名空間開啟自動注入。

    kubectl label namespace default istio-injection=enabled
  2. 創建資源。

    1. 使用以下內容,創建podinfo-meta.yaml文件,包含應用相關的Kubernetes原生資源。

      展開查看podinfo-meta.yaml文件

      apiVersion: v1
      kind: Service
      metadata:
        name: podinfo
        labels:
          app: podinfo
          service: podinfo
      spec:
        selector:
          app: podinfo
        ports:
          - protocol: TCP
            port: 80
            targetPort: 8080
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: podinfo-green
        labels:
          app: podinfo
          version: green
      spec:
        replicas: 4
        minReadySeconds: 5
        revisionHistoryLimit: 5
        progressDeadlineSeconds: 60
        strategy:
          rollingUpdate:
            maxUnavailable: 1
          type: RollingUpdate
        selector:
          matchLabels:
            app: podinfo
            version: green
        template:
          metadata:
            labels:
              app: podinfo
              version: green
          spec:
            containers:
              - name: podinfod
                image: registry.cn-hangzhou.aliyuncs.com/acs/rollouts-demo:green
                imagePullPolicy: IfNotPresent
                ports:
                  - name: http
                    containerPort: 8080
                    protocol: TCP
                readinessProbe:
                  tcpSocket:
                    port: 8080
                  initialDelaySeconds: 5
                  timeoutSeconds: 5
      
      
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: podinfo-blue
        labels:
          app: podinfo
          version: blue
      spec:
        replicas: 4
        minReadySeconds: 5
        revisionHistoryLimit: 5
        progressDeadlineSeconds: 60
        strategy:
          rollingUpdate:
            maxUnavailable: 1
          type: RollingUpdate
        selector:
          matchLabels:
            app: podinfo
            version: blue
        template:
          metadata:
            labels:
              app: podinfo
              version: blue
          spec:
            containers:
              - name: podinfod
                image: registry.cn-hangzhou.aliyuncs.com/acs/rollouts-demo:blue
                imagePullPolicy: IfNotPresent
                ports:
                  - name: http
                    containerPort: 8080
                    protocol: TCP
                readinessProbe:
                  tcpSocket:
                    port: 8080
                  initialDelaySeconds: 5
                  timeoutSeconds: 5
    2. 執行以下命令,在Fleet實例上添加資源。

      kubectl apply -f podinfo-meta.yaml
      
  3. 執行以下命令,獲取Fleet實例已添加的關聯集群信息。

    關于AMC命令行更多信息,請參見AMC命令行幫助

    kubectl amc get managedclusters

    預期輸出:

    Name                                Alias       HubAccepted
    c5f4110f2ad88499583fc76cc568a****   ack-hy-01   true
    c7f78dd3b09a146b8b750b4c1c51d****   ack-hy-02   true
  4. 創建應用。

    1. 使用以下內容,創建podinfo-app.yaml文件,定義開源KubeVela Application podinfo,實現多集群分發。

      使用上一步獲取的關聯集群ID替換如下<clusterid1><clusterid2>

      apiVersion: core.oam.dev/v1beta1
      kind: Application
      metadata:
        name: podinfo
        namespace: default
        annotations:
          app.oam.dev/publishVersion: version1
      spec:
        components:
          - name: podinfo
            type: ref-objects
            properties:
              objects:
                - apiVersion: apps/v1
                  kind: Deployment
                  name: podinfo-blue
                - apiVersion: apps/v1
                  kind: Deployment
                  name: podinfo-green
                - apiVersion: v1
                  kind: Service
                  name: podinfo
        policies:
          - type: topology
            name: podinfo-clusters
            properties:
              clusters: ["<clusterid1>","<clusterid2>"]  # 定義下發的目標集群,如需更新目標集群,可在此字段新增或修改。           
    2. 執行如下命令,在Fleet實例上部署應用podinfo

      kubectl apply -f podinfo-app.yaml
  5. 登錄ASM控制臺,創建服務網格ASM入口網關。具體操作,請參見創建入口網關

  6. 創建Istio網關。

    1. 使用以下內容,創建podinfo-gateway.yaml文件。

      apiVersion: networking.istio.io/v1alpha3
      kind: Gateway
      metadata:
        name: podinfo-gateway
      spec:
        selector:
          istio: ingressgateway
        servers:
        - port:
            number: 80
            name: http
            protocol: HTTP
          hosts:
          - "*"
    2. 執行以下命令,在Fleet實例上部署Istio網關。

      kubectl apply -f podinfo-gateway.yaml
  7. 創建虛擬服務。

    1. 使用以下內容,創建virtual-service-all-blue.yaml文件。

      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: podinfo
      spec:
        hosts:
        - "*"
        gateways:
        - podinfo-gateway
        http:
        - match:
          - uri:
              prefix: /
          route:
          - destination:
              host: podinfo
              subset: blue
              port:
                number: 80
    2. 執行以下命令,在Fleet實例上部署虛擬服務。

      kubectl apply -f virtual-service-all-blue.yaml
  8. 創建目標規則。

    1. 使用以下內容,創建destination-rule-all.yaml文件。

      apiVersion: networking.istio.io/v1alpha3
      kind: DestinationRule
      metadata:
        name: podinfo
      spec:
        host: podinfo
        trafficPolicy:
          outlierDetection:
            baseEjectionTime: 30s
            consecutiveErrors: 7
            interval: 30s
        subsets:
        - name: blue
          labels:
            version: blue
        - name: green
          labels:
            version: green
    2. 執行以下命令,在Fleet實例上部署目標規則。

      kubectl apply -f destination-rule-all.yaml
  9. 執行以下命令,獲取ASM網關地址。

    AMC命令行更多信息,請參見AMC命令行幫助

    kubectl amc get svc -n istio-system -m <關聯集群>

    預期輸出:

    Run on ManagedCluster c5f4110f2ad88499583fc76cc568a**** (ack-hy-01)
    NAME                     TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                      AGE
    istio-ingressgateway     LoadBalancer   10.12.1**.***   47.113.***.***   80:30315/TCP,443:32***/TCP   47h
    Run on ManagedCluster c7f78dd3b09a146b8b750b4c1c51d**** (ack-hy-02)
    NAME                     TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                      AGE
    istio-ingressgateway     LoadBalancer   10.75.9**.***   47.113.***.***   80:32101/TCP,443:30***/TCP   47h                     
  10. 在瀏覽器中訪問http://<網關IP>/。

    使用上一步獲取的EXTERNAL-IP替換<網關IP>,訪問頁面如下所示,此時僅展示blue版本。blue

  11. 創建虛擬服務,分配不同的流量比例。

    1. 使用以下內容,創建virtual-service-green-blue-80-20.yaml文件。

      以下示例中green版本權重為80,blue版本權重為20。

      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: podinfo
      spec:
        hosts:
        - "*"
        gateways:
        - podinfo-gateway
        http:
        - match:
          - uri:
              prefix: /
          route:
          - destination:
              host: podinfo
              subset: green
              port:
                number: 80
            weight: 80
          - destination:
              host: podinfo
              subset: blue
              port:
                number: 80
            weight: 20
    2. 執行以下命令,在Fleet實例上部署虛擬服務。

      kubectl apply -f virtual-service-green-blue-80-20.yaml
  12. 繼續在瀏覽器中訪問http://<網關IP>/。

    可看到應用greenblue的版本會按照80%和20%流量比例呈現。blue-green