すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ASMサーバーレスゲートウェイを使用して、複数のクラスターにアクセスするための単一のエントリポイントとして機能する

最終更新日:Dec 14, 2024

Service Mesh (ASM) を使用すると、同じ仮想プライベートクラウド (VPC) 内の複数のKubernetesクラスターにアプリケーションサービスをデプロイし、これらのクラスターのインバウンドトラフィックのプロキシとしてサーバーレス入口ゲートウェイを設定できます。 これにより、サービス全体の可用性が向上し、コンピューティングリソースコストが削減されます。

前提条件

  • 2つのContainer Service for Kubernetes (ACK) クラスター、この例ではm1c1とm1c2が同じVPCに作成されます。 詳細については、「ACK専用クラスターの作成」または「ACK管理クラスターの作成」をご参照ください。

    説明

    クラスターを作成するときは、クラスターに高度なセキュリティグループを設定することを推奨します。

  • v1.18.0.139以降のASMインスタンスが作成されます。 この例では、ASMインスタンスmesh1が使用されます。 ASMインスタンスの作成方法の詳細については、「ASMインスタンスの作成」をご参照ください。

ステップ1: 2つのクラスターが互いに通信できることを確認する

デフォルトでは、同じVPC内の2つのクラスターがアドバンストセキュリティグループに関連付けられている場合、互いに通信できます。 1つのクラスターが基本セキュリティグループに関連付けられている場合、または2つのセキュリティグループが相互に通信できない場合は、クラスターのセキュリティグループルールを設定する必要があります。 詳細については、「セキュリティグループルールの追加」をご参照ください。

手順2: ASMインスタンスにクラスターを追加し、サーバーレスingressゲートウェイを作成する

2つのクラスターをASMインスタンスに追加した後、サーバーレスingressゲートウェイを作成します。

  1. 2つのクラスターをASMインスタンスに追加します。 詳細については、「ASMインスタンスへのクラスターの追加」をご参照ください。

  2. 次のYAMLファイルを使用して、サーバーレスingressゲートウェイを作成します。 詳細については、「ingressゲートウェイの作成」をご参照ください。

    展開して、serverless ingressゲートウェイのYAMLファイルを表示します

    apiVersion: istio.alibabacloud.com/v1beta1
    kind: IstioGateway
    metadata:
      annotations:
        asm.alibabacloud.com/managed-by-asm: 'true'
      name: ingressgateway
      namespace: istio-system
    spec:
      gatewayType: ingress
      dnsPolicy: ClusterFirst
      externalTrafficPolicy: Local
      hostNetwork: false
      ports:
        - name: http
          port: 80
          protocol: TCP
          targetPort: 80
        - name: https
          port: 443
          protocol: TCP
          targetPort: 443
      replicaCount: 1
      resources:
        limits:
          cpu: '2'
          memory: 2G
        requests:
          cpu: 200m
          memory: 256Mi
      rollingMaxSurge: 100%
      rollingMaxUnavailable: 25%
      runAsRoot: true
      serviceType: LoadBalancer

ステップ3: Bookinfoアプリケーションを展開する

ASMを使用すると、クラスター全体にアプリケーションをデプロイできます。 Bookinfoアプリケーションのマイクロサービスを2つのクラスターにデプロイできます。

  1. 次の内容を使用して、m1c2クラスターのbookinfo-m1c2.yamlファイルに設定されたリソースを作成します。

    説明

    v3バージョンのレビューマイクロサービスは、評価を赤い星として表示します。

    BookinfoアプリケーションのYAMLファイルを表示

    # Details service
    apiVersion: v1
    kind: Service
    metadata:
      name: details
      labels:
        app: details
        service: details
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: details
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-details
      labels:
        account: details
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: details-v1
      labels:
        app: details
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: details
          version: v1
      template:
        metadata:
          labels:
            app: details
            version: v1
        spec:
          serviceAccountName: bookinfo-details
          containers:
          - name: details
            image: docker.io/istio/examples-bookinfo-details-v1:1.15.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    # Ratings service
    apiVersion: v1
    kind: Service
    metadata:
      name: ratings
      labels:
        app: ratings
        service: ratings
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: ratings
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-ratings
      labels:
        account: ratings
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ratings-v1
      labels:
        app: ratings
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ratings
          version: v1
      template:
        metadata:
          labels:
            app: ratings
            version: v1
        spec:
          serviceAccountName: bookinfo-ratings
          containers:
          - name: ratings
            image: docker.io/istio/examples-bookinfo-ratings-v1:1.15.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    # Reviews service
    apiVersion: v1
    kind: Service
    metadata:
      name: reviews
      labels:
        app: reviews
        service: reviews
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: reviews
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-reviews
      labels:
        account: reviews
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v1
      labels:
        app: reviews
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v1
      template:
        metadata:
          labels:
            app: reviews
            version: v1
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: docker.io/istio/examples-bookinfo-reviews-v1:1.15.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v2
      labels:
        app: reviews
        version: v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v2
      template:
        metadata:
          labels:
            app: reviews
            version: v2
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: docker.io/istio/examples-bookinfo-reviews-v2:1.15.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    # Productpage services
    apiVersion: v1
    kind: Service
    metadata:
      name: productpage
      labels:
        app: productpage
        service: productpage
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: productpage
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-productpage
      labels:
        account: productpage
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: productpage-v1
      labels:
        app: productpage
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: productpage
          version: v1
      template:
        metadata:
          labels:
            app: productpage
            version: v1
        spec:
          serviceAccountName: bookinfo-productpage
          containers:
          - name: productpage
            image: docker.io/istio/examples-bookinfo-productpage-v1:1.15.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
  2. 次のコマンドを実行して、v3バージョンのreviewsマイクロサービスを含まないBookinfoアプリケーションをm1c2クラスターにデプロイします。

    kubectl apply -f bookinfo-m1c2.yaml
  3. 次の内容を使用して、m1c1クラスターのbookinfo-m1c1.yamlファイルに設定されたリソースを作成します。

    YAMLファイルを表示する

    # Reviews service
    apiVersion: v1
    kind: Service
    metadata:
      name: reviews
      labels:
        app: reviews
        service: reviews
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: reviews
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-reviews
      labels:
        account: reviews
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v3
      labels:
        app: reviews
        version: v3
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v3
      template:
        metadata:
          labels:
            app: reviews
            version: v3
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: docker.io/istio/examples-bookinfo-reviews-v3:1.15.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    # Ratings service
    apiVersion: v1
    kind: Service
    metadata:
      name: ratings
      labels:
        app: ratings
        service: ratings
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: ratings
  4. 次のコマンドを実行して、v3バージョンのレビューマイクロサービスと評価マイクロサービスをm1c1クラスターにデプロイします。

    kubectl apply -f bookinfo-m1c1.yaml

ステップ4: 仮想サービスとIstioゲートウェイの追加

  1. ASMインスタンスのデフォルトの名前空間にbookinfoという名前の仮想サービスを作成します。 詳細については、「仮想サービスの管理」をご参照ください。

    展開して仮想サービスのYAMLファイルを表示

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: bookinfo
    spec:
      hosts:
      - "*"
      gateways:
      - bookinfo-gateway
      http:
      - match:
        - uri:
            exact: /productpage
        - uri:
            prefix: /static
        - uri:
            exact: /login
        - uri:
            exact: /logout
        - uri:
            prefix: /api/v1/products
        route:
        - destination:
            host: productpage
            port:
              number: 9080
  2. ASMインスタンスのデフォルトの名前空間にbookinfo-gatewayという名前のIstioゲートウェイを作成します。 詳細については、「Istioゲートウェイの管理」をご参照ください。

    展開してIstioゲートウェイのYAMLファイルを表示する

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: bookinfo-gateway
    spec:
      selector:
        istio: ingressgateway # use istio default controller
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"
  3. ブラウザのアドレスバーに、http:// {serverless ingress gatewayのIPアドレス}/productpageと入力し、ページを複数回更新します。

    レビューマイクロサービスの3つのバージョンにルーティングされるリクエストの比率が1:1:1に近いことがわかります。 v3バージョンのレビューマイクロサービスは、他のマイクロサービスと同じクラスターにデプロイされていなくても、正常に有効になります。

(オプション) ステップ5: リクエストが常にv3バージョンのレビューマイクロサービスにルーティングされるように指定する

宛先ルールと仮想サービスを定義して、Bookinfoアプリケーションのマイクロサービスをデプロイするためのポリシーを設定できます。 次の例では、リクエストが常にv3バージョンのレビューマイクロサービスにルーティングされるように指定しています。

  1. ASMインスタンスのデフォルトの名前空間にreviewsという名前の宛先ルールを作成します。 詳細については、「仮想サービスの管理」をご参照ください。

    展開して、ターゲットルールのYAMLファイルを表示します

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: reviews
    spec:
      host: reviews
      subsets:
      - name: v1
        labels:
          version: v1
      - name: v2
        labels:
          version: v2
      - name: v3
        labels:
          version: v3
  2. ASMインスタンスのデフォルトの名前空間にreviewsという名前の仮想サービスを作成します。 詳細については、「仮想サービスの管理」をご参照ください。

    展開して仮想サービスのYAMLファイルを表示

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
        - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v3
  3. ブラウザのアドレスバーに、http:// {serverless ingress gatewayのIPアドレス}/productpageと入力し、ページを複数回更新します。

    リクエストは常にv3バージョンのレビューマイクロサービスにルーティングされていることがわかります。 この場合、評価は赤い星で表示されます。书评用红星