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

通過ASM入口網關訪問網格內gRPC服務

您可以通過ASM入口網關安全地訪問網格內的gRPC服務,實現對gRPC服務的精確訪問控制,提升服務治理能力,保障服務間通信的安全性。本文介紹如何通過入口網關訪問網格內gRPC服務,并在gRPC的兩個版本之間進行流量切換。

前提條件

步驟一:部署示例應用

部署名為istio-grpc-server-v1和istio-grpc-server-v2的示例應用。

  1. 登錄容器服務管理控制臺,在左側導航欄選擇集群。

  2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇工作負載 > 無狀態。

  3. 無狀態頁面上方,選擇目標命名空間,然后在右上角單擊使用YAML創建資源

    說明

    當前選中的命名空間應當已標注自動注入Sidecar,即包含istio-injection=enabled標簽。具體操作,請參見啟用自動注入。

  4. 創建頁面,選擇自定義示例模板,配置以下YAML,然后單擊創建。

    展開查看YAML

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: grpc-helloworld-py-v1
      labels:
        app: grpc-helloworld-py
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: grpc-helloworld-py
          version: v1
      template:
        metadata:
          labels:
            app: grpc-helloworld-py
            version: v1
        spec:
          containers:
            - name: grpc-helloworld-py
              image: registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/istio-grpc-server:grpc-helloworld-py-v1.0
              imagePullPolicy: Always
              env:
                - name: podname
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: metadata.name
              ports:
                - containerPort: 50051
                  name: grpc-port
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: grpc-helloworld-py-v2
      labels:
        app: grpc-helloworld-py
        version: v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: grpc-helloworld-py
          version: v2
      template:
        metadata:
          labels:
            app: grpc-helloworld-py
            version: v2
        spec:
          containers:
            - name: grpc-helloworld-py
              image: registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/istio-grpc-server:grpc-helloworld-py-v1.0
              imagePullPolicy: Always
              env:
                - name: podname
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: metadata.name
              ports:
                - containerPort: 50051
                  name: grpc-port
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: grpc-helloworld-py
      labels:
        app: grpc-helloworld-py
    spec:
      ports:
        - port: 50051
          name: grpc-port
      selector:
        app: grpc-helloworld-py

步驟二:設置服務網格ASM的路由規則

設置服務網格的服務網關、虛擬服務和目標規則,將流量全部指向istio-grpc-server-v1。

  1. 登錄ASM控制臺,在左側導航欄,選擇服務網格 > 網格管理。

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

  3. 創建網關規則。

    1. 在網格詳情頁面左側導航欄,選擇ASM網關 > 網關規則,然后在右側頁面,單擊使用YAML創建。

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

      apiVersion: networking.istio.io/v1beta1
      kind: Gateway
      metadata:
        name: grpc-gateway
      spec:
        selector:
          istio: ingressgateway
        servers:
        - port:
            number: 8080
            name: grpc
            protocol: GRPC
          hosts:
          - "*"
  4. 創建目標規則。

    1. 在網格詳情頁面左側導航欄,選擇流量管理中心 > 目標規則,然后在右側頁面,單擊使用YAML創建。

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

      apiVersion: networking.istio.io/v1beta1
      kind: DestinationRule
      metadata:
        name: dr-istio-grpc-server
      spec:
        host: grpc-helloworld-py
        trafficPolicy:
          loadBalancer:
            simple: ROUND_ROBIN
        subsets:
          - name: v1
            labels:
              version: "v1"
          - name: v2
            labels:
              version: "v2"    
  5. 創建虛擬服務。

    1. 在網格詳情頁面左側導航欄,選擇流量管理中心 > 虛擬服務,然后在右側頁面,單擊使用YAML創建

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

      展開查看YAML

      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: grpc-vs
      spec:
        hosts:
        - "*"
        gateways:
        - grpc-gateway
        http:
          - match:
              - port: 8080
            route:
              - destination:
                  host: grpc-helloworld-py
                  port:
                    number: 50051
                  subset: v1
                weight: 100
              - destination:
                  host: grpc-helloworld-py
                  port:
                    number: 50051
                  subset: v2
                weight: 0        

步驟三:部署新入口網關或復用已有入口網關

在入口網關中,如果不存在8080端口,需要添加8080端口。

新建入口網關

  1. 登錄ASM控制臺,在左側導航欄,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇ASM網關 > 入口網關

  3. 入口網關頁面,單擊創建,配置相關信息,然后單擊創建

    部分配置項說明如下。關于配置項的更多信息,請參見入口網關配置項說明。

    配置項

    說明

    部署集群

    選擇要部署入口網關的集群。

    負載均衡CLB類型

    此處指定負載均衡的類型為公網訪問。

    負載均衡

    選擇負載均衡。

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

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

    說明

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

    • 使用已有的CLB會強制覆蓋已有監聽,可能會導致您的應用不可訪問。

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

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

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

    • 不支持跨集群復用CLB。

    端口映射

    設置協議TCP,服務端口8080

在已有入口網關添加8080端口

  1. 登錄ASM控制臺,在左側導航欄,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇ASM網關 > 入口網關

  3. 入口網關頁面,單擊目標網關名稱,在網關詳情頁面的基本選項區域,單擊端口配置右側的Dingtalk_20230104170049.jpg圖標,在端口映射對話框,單擊添加端口,設置協議TCP服務端口8080,然后單擊確認。

步驟四:運行gRPC客戶端

  1. grpcurl是一個命令行工具,用于與gRPC服務進行交互。它提供了一種簡單的方式來測試和調試gRPC服務,以及查看服務的定義和元數據。具體如何下載安裝可以參考https://github.com/fullstorydev/grpcurl。運行如下命令:

    grpcurl -d '{"name": "Jack"}' -plaintext {入口網關IP地址}:8080 helloworld.Greeter/SayHello
  2. 返回以下結果,可以看到所有的請求都指向了v1。

     "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"
     "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"
     "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"
     "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"
     "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"     

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

將40%的流量指向v2,其余60%的流量仍然指向v1。

  1. 登錄ASM控制臺,在左側導航欄,選擇服務網格 > 網格管理。

  2. 網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇流量管理中心 > 虛擬服務。

  3. 虛擬服務頁面,在grpc-vs虛擬服務右側的操作列下,單擊查看YAML。

  4. 編輯對話框,更新以下YAML內容,單擊確定。

    ....
          route:
            - destination:
                host: grpc-helloworld-py
                port:
                  number: 50051
                subset: v1
              weight: 60
            - destination:
                host: grpc-helloworld-py
                port:
                  number: 50051
                subset: v2
              weight: 40
  5. 繼續使用grpcurl執行以下命令,訪問網格內的gRPC服務。

    grpcurl -d '{"name": "Jack"}' -plaintext {入口網關IP地址}:8080 helloworld.Greeter/SayHello

    返回以下結果,可以看到40%的流量指向了v2。

    說明

    您的測試結果不一定總是100次中有40次指向v2,但從總體比例來看,將接近40%。

    "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"
    "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"
    "message": "Hello, Jack! I'm from grpc-helloworld-py-v2-7f56b49b7f-9vvr7!"
    "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"
    "message": "Hello, Jack! I'm from grpc-helloworld-py-v2-7f56b49b7f-9vvr7!"
    "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"
    "message": "Hello, Jack! I'm from grpc-helloworld-py-v2-7f56b49b7f-9vvr7!"
    "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"
    "message": "Hello, Jack! I'm from grpc-helloworld-py-v2-7f56b49b7f-9vvr7!"
    "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"