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

Alibaba Cloud Service Mesh:ASM 上の Knative を使用してサーバーレスアプリケーションをデプロイする

最終更新日:May 31, 2025

Service Mesh (ASM) は、コンテナサービス Kubernetes 版 (ACK) クラスタまたは ACK Serverless クラスタにデプロイされた Knative Serving コンポーネントの機能と緊密に統合されており、さまざまなクラスタ環境でのサーバーレスアプリケーションのデプロイと管理を簡素化します。ASM 上の Knative は、コンテナベースのアプリケーション、特に自動スケーリングとオンデマンド課金が必要な場合に、迅速に構築、デプロイ、および管理するための一体型のソリューションを提供します。このソリューションは、サーバーレスアプリケーションを迅速にデプロイおよびスケーリングするのに役立ち、開発効率とサービスの弾力性を向上させます。このトピックでは、ASM 上の Knative を使用して Knative サービスをデプロイする方法について説明します。

前提条件

  • バージョン 1.16.3.50 以降の ASM インスタンスが作成され、ACK または ACK Serverless クラスタ がインスタンスに追加されています。詳細については、「ASM インスタンスの作成」および「ASM インスタンスへのクラスタの追加」をご参照ください。

    重要
    • ASM インスタンスを作成する際に、Allow data plane cluster KubeAPI to access Istio CR[リソース構成] セクションで選択されていることを確認してください。このチェックボックスはデフォルトで選択されています。これは、データプレーン上のクラスタの Kubernetes API を使用して Istio リソースにアクセスできることを示します。

    • ACK または ACK Serverless クラスタ の API サーバーへのアクセスが有効になっており、クイックアクセスがサポートされています。

    • ASM インスタンスと ACK または ACK Serverless クラスタ は、同じリージョンの同じ仮想プライベートクラウド (VPC) 内にあり、同じ vSwitch を使用する必要があります。

  • クラスタのイングレスゲートウェイが作成されています。次の例では、ASM イングレスゲートウェイが使用されています。詳細については、「イングレスゲートウェイの作成」をご参照ください。

    説明
    • V1.21.6.84 以降の ASM インスタンスでは、イングレスゲートウェイを手動で作成する必要はありません。

    • ASM ゲートウェイを使用すると、異なる Knative リビジョンへのトラフィック分割、Google Remote Procedure Call (gRPC) サービスへのアクセス、タイムアウトと再試行設定の構成、Transport Layer Security (TLS) 証明書のマウント、外部認証と承認の実行を行うことができます。詳細については、「ASM ゲートウェイの概要」をご参照ください。

ステップ 1: Knative をインストールする

バージョンが 1.18.2.104 より前の ASM インスタンスの場合

  1. ACK または ACK Serverless クラスタに Knative Serving コンポーネントをデプロイします。[kourier] パラメータに [ゲートウェイ] を選択します。

    • ACK クラスタに Knative をデプロイする方法の詳細については、「Knative のデプロイ」をご参照ください。

    • ACK Serverless クラスタに Knative をデプロイする方法の詳細については、「Knative のデプロイ」をご参照ください。

      重要

      Knative Serving コンポーネントがインストールされたら、[コンポーネント] タブをクリックします。[アドオンコンポーネント] セクションで、[kourier] コンポーネントをアンインストールします。

  2. ASM コンソール にログオンします。左側のナビゲーションウィンドウで、[サービスメッシュ] > [メッシュ管理] を選択します。

  3. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、[エコシステム] > [ASM 上の Knative] を選択します。

  4. [ASM 上の Knative] ページで、[ASM 上の Knative を有効にする] をクリックします。

バージョンが 1.18.2.104 から 1.21.6.83 の ASM インスタンスの場合

  1. ASM コンソール にログオンします。左側のナビゲーションウィンドウで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、[エコシステム] > [ASM 上の Knative] を選択します。

  3. [ASM 上の Knative] ページで、ビジネス要件に基づいて Knative バージョンを選択し、[ASM 上の Knative を有効にする] をクリックします。

  4. ACK または ACK Serverless クラスタに Knative をデプロイします。[ASM] パラメータに [ゲートウェイ] を選択します。

    • ACK クラスタに Knative をデプロイする方法の詳細については、「Knative のデプロイ」をご参照ください。

    • ACK Serverless クラスタに Knative をデプロイする方法の詳細については、「Knative のデプロイ」をご参照ください。

バージョンが 1.21.6.84 以降の ASM インスタンスの場合

重要

ASM インスタンスのバージョンが 1.21.6.84 以降の場合は、ASM コンソールで ASM 上の Knative 機能を有効にする必要はありません。

  1. ACK コンソール にログインします。左側のナビゲーションペインで、[クラスタ] をクリックします。

  2. [クラスタ] ページで、管理するクラスタの名前をクリックします。次に、左側のナビゲーションペインで [アプリケーション] > [knative] を選択します。

  3. [コンポーネント] タブの [knative] ページで、[knative のデプロイ] をクリックします。[ゲートウェイ] セクションで、[ASM] タブをクリックし、[デプロイ] をクリックします。

    Knative がインストールされたら、Knative で ASM を使用できます。

    説明

    Knative がインストールされたことを示すメッセージが表示されたら、Knative サービスのデプロイに進む前に、イングレスゲートウェイが作成され、正しく実行されていることを確認してください。

ステップ 2: Knative サービスをデプロイする

ASM 上の Knative を使用すると、ACK コンソールで、または YAML 構成ファイルを使用して、Knative サービスをデプロイできます。ビジネス要件に基づいてデプロイ方法を選択できます。

方法 1: ACK コンソールで Knative サービスをデプロイする

  1. ACK コンソール にログオンします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターを見つけて名前をクリックします。左側のウィンドウで、[アプリケーション] > [Knative] を選択します。

  3. [knative] ページで、[サービス] タブをクリックします。右上隅にある [サービスの作成] をクリックし、必要なパラメータを設定して、[作成] をクリックします。

    パラメータの詳細については、「Knative アプリケーションをすばやくデプロイする」をご参照ください。

    パラメータ

    説明

    [名前空間]

    サービスが属する名前空間を選択します。

    default

    [サービス名]

    サービスの名前を入力します。

    helloworld-go

    [イメージ名]

    イメージを選択するには、[イメージの選択] をクリックします。[イメージの選択] ダイアログボックスで、イメージを選択し、[OK] をクリックします。プライベートレジストリでイメージを指定できます。イメージアドレスは、domainname/namespace/imagename:tag 形式である必要があります。

    registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go

    [イメージバージョン]

    イメージバージョンを選択するには、[イメージバージョンの選択] をクリックします。[イメージバージョン] ダイアログボックスで、イメージバージョンを選択し、[OK] をクリックします。

    73fbdd56

    [アクセスプロトコル]

    [HTTP][grpc] がサポートされています。

    HTTP

    [コンテナポート]

    公開するコンテナポートを指定します。ポート番号は 1 ~ 65535 の範囲内である必要があります。

    8080

    [環境変数]

    [詳細設定] をクリックします。[環境変数] セクションで、[追加] をクリックして、キーと値のペアで環境変数を設定します。

    [タイプ]: カスタムを選択します。

    [変数キー]: TARGET に設定します。

    [値/valuefrom]: Knative に設定します。

方法 2: YAML 構成ファイルを使用して Knative サービスをデプロイする

  1. 次の内容を helloworld-go.yaml という名前のファイルとして保存します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-go
      annotations:
        knative.k8s.alibabacloud/tls: "false" # TLS を無効にする
    spec:
      template:
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/acs/helloworld-go:160e4dc8 # イメージ名
              ports:
                - containerPort: 8080 # コンテナポート
              env:
                - name: TARGET # 環境変数名
                  value: "Knative" # 環境変数値
    
  2. kubectl を使用して ACK クラスタに接続します。次のコマンドを実行して Knative サービスを作成します。Knative サービスが作成されるまで待ちます。

    kubectl apply -f helloworld-go.yaml
    
  3. 次のコマンドを実行して、Knative サービスのリストを表示します。

    kubectl get ksvc
    

    次のような出力が表示されます。

    NAME            URL                                        LATESTCREATED         LATESTREADY           READY   REASON
    helloworld-go   http://helloworld-go.default.example.com   helloworld-go-00001   helloworld-go-00001   True
    

方法 3: テンプレートを使用して Knative サービスを作成する

  1. ACK コンソール にログインします。左側のナビゲーションペインで、[クラスタ] をクリックします。

  2. [クラスタ] ページで、管理するクラスタの名前をクリックします。次に、左側のナビゲーションペインで [アプリケーション] > [knative] を選択します。

  3. [サービス] タブの [knative] ページで、[名前空間] ドロップダウンリストから [default] を選択し、[テンプレートから作成] をクリックし、次の YAML コンテンツをコードエディターにコピーして、[作成] をクリックして、helloworld-go という名前のサービスを作成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-go
    spec:
      template:
        spec:
          containers:
          - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 # {REGION-ID} をクラスタが存在するリージョンに置き換えます。
            env:
            - name: TARGET
              value: "Knative"
    

ステップ 3: ゲートウェイアドレスを照会する

方法 1: ACK コンソールでゲートウェイアドレスを照会する

  1. ACK コンソール にログオンします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターを見つけて名前をクリックします。左側のウィンドウで、[アプリケーション] > [Knative] を選択します。

  3. [サービス] タブをクリックします。サービスのリストで、ゲートウェイアドレスを照会する Knative サービスの名前をクリックして、Knative サービスの詳細を表示します。[基本情報] セクションで、[ゲートウェイ][デフォルトドメイン] に関する情報を表示および取得できます。

方法 2: ASM コンソールでゲートウェイアドレスを照会する

  1. ASM コンソール にログオンします。左側のナビゲーションウィンドウで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、目的の ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[ASM ゲートウェイ] > [イングレスゲートウェイ] を選択します。

  3. [イングレスゲートウェイ] ページの [サービスアドレス] セクションで、ゲートウェイアドレスを表示して記録します。

ステップ 4: Knative サービスにアクセスする

Knative サービスがデプロイされた後、そのドメイン名をゲートウェイの IP アドレスにポイントして、サービスをゲートウェイに関連付けることができます。これにより、URL を使用して Knative サービスにアクセスできます。

  1. [サービス] ページで、[ゲートウェイ] 列にある helloworld-go サービスのゲートウェイアドレスを取得します。

  2. 次のコマンドを実行して、helloworld-go サービスにアクセスします。

    curl -H "host: helloworld-go.default.example.com" http://39.XX.XX.XX # IP アドレスとドメイン名を実際の値に置き換えます。
    

    期待される出力:

    Hello Knative!
    

    この出力は、サービスアクセスが成功したことを示します。

関連情報

  • Knative サービスのデフォルトのドメイン名は example.com です。ASM 上の Knative では、カスタムドメイン名をデフォルトのドメイン名として使用できます。詳細については、「ASM 上の Knative でカスタムドメイン名を設定する」をご参照ください。

  • ASM ゲートウェイは HTTPS をサポートし、証明書を動的にロードできます。ASM 上の Knative を使用する場合、ASM ゲートウェイを使用して HTTPS 経由で Knative サービスにアクセスできます。詳細については、「ASM ゲートウェイを使用して HTTPS 経由で Knative サービスにアクセスする」をご参照ください。

  • ASM 上の Knative を使用すると、Knative サービスのトラフィック分割に基づいてカナリアリリースを実行できます。Knative サービスを作成すると、Knative は自動的にサービスの最初の Revision を作成します。Knative サービスの構成が変更されるたびに、Knative は新しい Revision を作成し、異なる Revision に配信されるトラフィックの割合を変更して、カナリアリリースを実装します。詳細については、「ASM 上の Knative を使用して、Knative サービスのトラフィック分割に基づいてカナリアリリースを実行する」をご参照ください。

  • Knative Serving は、各 Pod に Queue Proxy コンテナを追加します。Queue Proxy コンテナは、アプリケーションコンテナの同時実行メトリックを Knative Pod Autoscaler (KPA) に送信します。KPA はメトリックを受信した後、同時実行リクエストの数と関連する自動スケーリングアルゴリズムに基づいて、Deployment にプロビジョニングされる Pod の数を自動的に調整します。詳細については、「リクエスト数に基づいて Pod の自動スケーリングを有効にする」をご参照ください。