Application Load Balancer (ALB) を使用して gRPC トラフィックを負荷分散し、バックエンドサービス通信用の統一されたイングレスを提供します。ALB は、HTTP/2 を介した gRPC バックエンドサーバーグループとの HTTPS 暗号化フロントエンド接続をサポートしています。
背景情報
gRPC は、高性能なオープンソースのリモートプロシージャコールフレームワークです。インターフェース定義言語 (IDL) として Protocol Buffers (protobuf) を使用し、HTTP/2 を介して通信します。
gRPC は、サービス間のクロス言語通信の問題を解決します。その IDL は、リモートサービスを定義および呼び出すためのコードを自動生成します。バイナリエンコーディングと HTTP/2 の多重化を使用することで、gRPC は高性能、低レイテンシー、効率的なデータ転送を実現します。
gRPC は、マイクロサービスアーキテクチャ、クロス言語通信、および大規模な分散システムに適しています。単項呼び出し、ストリーミングリクエストとレスポンス、および双方向ストリーミングをサポートしています。
gRPC の詳細については、gRPC の公式ドキュメントをご参照ください。
シナリオ
ある企業が、中国 (杭州) リージョンの Virtual Private Cloud (VPC) に gRPC サービスをデプロイします。VPC には、ALB インスタンスと gRPC 対応のサーバーグループがデプロイされています。ALB インスタンスには HTTP/2 対応の HTTPS リスナーが設定され、サーバーグループには gRPC ヘルスチェックが設定されています。
クライアントは、ALB インスタンスを介して VPC にデプロイされた gRPC サービスにアクセスする必要があります。
前提条件
-
ALB インスタンスを作成済みであること。詳細については、「ALB インスタンスの作成と管理」をご参照ください。
-
バックエンドサーバーを準備し、そのサーバーに gRPC サービスをデプロイ済みであること。デプロイガイダンスについては、gRPC の公式ドキュメントをご参照ください。
-
ドメイン名を登録し、必要な ICP 备案 を完了済みであること。詳細については、「Alibaba Cloud ドメイン名の登録」および「ICP 备案プロセス」をご参照ください。
-
SSL 証明書を購入した、またはサードパーティの証明書を証明書管理サービスにアップロード済みであること。証明書はドメイン名に関連付けられている必要があります。証明書の作成方法の詳細については、「商用証明書を使用した Web サービスへの HTTPS アクセスの有効化」をご参照ください。
ステップ 1:サーバーグループの作成
ALB コンソールにログインします。
-
上部のナビゲーションバーで、ALB インスタンスがデプロイされているリージョンを選択します。
-
左側のナビゲーションペインで、 を選択します。
-
サーバーグループ ページで、サーバーグループの作成 をクリックします。
-
サーバーグループの作成 ダイアログボックスで、次のパラメーターを設定し、作成 をクリックします。
このトピックでは、このシナリオに関連するパラメーターのみを説明します。他のパラメーターについては、デフォルト値を使用するか、必要に応じて設定してください。
パラメーター
説明
[サーバーグループタイプ]
サーバーグループタイプを選択します。この例では、サーバー を選択します。
VPC
ALB インスタンスの VPC を選択します。この VPC 内のサーバーのみをサーバーグループに追加できます。
[バックエンドサーバープロトコル]
この例では、[gRPC] を選択します。
[ヘルスチェック]
この機能を有効にします。
[ヘルスチェックの設定]
編集 をクリックし、ヘルスチェック設定を行います。
-
[ヘルスチェックプロトコル]:この例では、[gRPC] を選択します。
-
[ヘルスチェック方法]:この例では、[POST] を選択します。
-
[ヘルスチェックステータスコード]:正常なレスポンスを示すステータスコードを選択します。これは、gRPC サービスから返されるステータスコードと一致する必要があります。この例では、ステータスコードは
12です。
-
-
サーバーグループ ページで、作成したサーバーグループを見つけ、その ID をクリックします。
-
バックエンドサーバー タブをクリックし、バックエンドサーバーの追加 をクリックします。
-
バックエンドサーバーの追加 パネルで、作成した Elastic Compute Service (ECS) インスタンスを選択し、次へ をクリックします。
-
ポート/重み ステップで、各 ECS インスタンスのポートと重みを設定し、OK をクリックします。
説明ECS インスタンスに設定するポートは、gRPC サービスが使用するポートと一致する必要があります。また、インスタンスのセキュリティグループルールで、このポートでのトラフィックが許可されていることを確認する必要があります。
ステップ 2:HTTPS リスナーの設定
-
上部のナビゲーションバーで、インスタンスがデプロイされているリージョンを選択します。
-
左側のナビゲーションペインで、インスタンス をクリックします。
-
インスタンス ページで、管理するインスタンスを見つけ、操作 列の リスナーの作成 をクリックします。
-
リスナーの設定 ページで、次のパラメーターを設定します。他のパラメーターはデフォルト値を使用するか、必要に応じて設定します。その後、次へ をクリックします。
パラメーター
説明
[リスナープロトコルの選択]
[HTTPS] を選択します。
[リスナーポート]
この例では、ポート 443 を使用します。
説明-
サーバーグループのバックエンドプロトコルが gRPC に設定されている場合、リスナープロトコルは HTTPS である必要があります。
-
gRPC は HTTP/2 プロトコル経由で通信します。サーバーグループのバックエンドプロトコルが gRPC に設定されている場合、HTTPS リスナーで HTTP/2.0 を有効にする必要があります。ALB はデフォルトでこの機能を有効にします。HTTP/2 の有効化 機能が有効になっていることを確認し、無効にしないでください。
-
-
SSL 証明書の設定 ページで、次のパラメーターを設定します。他のパラメーターはデフォルト値を使用するか、必要に応じて設定します。その後、次へ をクリックします。
パラメーター
説明
[サーバー証明書]
準備した SSL 証明書を選択します。
-
サーバーグループの選択 ページで、次のパラメーターを設定します。他のパラメーターはデフォルト値を使用するか、必要に応じて設定します。その後、次へ をクリックします。
パラメーター
説明
[サーバーグループ]
作成した gRPC サーバーグループを選択します。
-
設定の確認 ページで、設定を確認します。設定が正しい場合は、送信 をクリックし、リスナーが作成されるまで待ちます。
ステップ 3:DNS 名前解決の設定
本番環境では、独自のドメイン名を使用し、CNAME レコードを作成して ALB インスタンスの DNS 名にポイントします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
インスタンス ページで、ご利用の ALB インスタンスの DNS 名をコピーします。
-
CNAME レコードを追加して、ドメイン名を ALB インスタンスの DNS 名にマッピングします。
説明ドメイン名が Alibaba Cloud に登録されていない場合は、DNS レコードを設定する前に、まず Alibaba Cloud DNS コンソールに追加する必要があります。詳細については、「ドメイン名管理」をご参照ください。ドメイン名が Alibaba Cloud に登録されている場合は、次のステップに進むことができます。
-
Alibaba Cloud DNS コンソールにログインします。
-
権威 DNS 名前解決 ページで、ドメイン名を見つけ、操作 列の 解決設定 をクリックします。
-
解決設定 ページで、Add Record をクリックします。
-
Add Record パネルで、以下のパラメーターを設定して CNAME レコードを作成し、OK をクリックします。
構成
説明
レコードタイプ
ドロップダウンリストから [CNAME] を選択します。
ホストレコード
ドメイン名のプレフィックス。このチュートリアルでは @ を使用します。
説明ルートドメインを使用するには、ホストを
@に設定します。Query Source
[デフォルト] を選択します。
レコード値
コピーした ALB インスタンスの DNS 名を貼り付けます。
TTL
Time to Live (TTL) は、レコードが DNS サーバーにキャッシュされる時間です。このチュートリアルではデフォルト値を使用します。
-
ステップ 4:接続性の検証
上記の手順が完了すると、クライアントは ALB 経由で gRPC サービスにアクセスできるようになります。grpcurl などのツールを使用して接続性をテストします。
Web ブラウザーから gRPC サービスに直接アクセスすることはできません。grpcurl などのツールを使用して接続性をテストすることを推奨します。
クライアントで、grpcurl -insecure -v <ドメイン名>:<リスナーポート> <gRPC サービス名>/<メソッド> コマンドを実行して、ECS インスタンス上の gRPC サービスにアクセスします。
次のようなレスポンスは、クライアントが ALB 経由で gRPC サービスにアクセスできることを示しています。
[root@iZbp1xxx.0Z ~]# grpcurl -insecure -v xxx.com:443 helloworld.Greeter/SayHello
Resolved method descriptor:
rpc SayHello ( .helloworld.HelloRequest ) returns ( .helloworld.HelloReply );
Request metadata to send:
(empty)
Response headers received:
accept-encoding: identity,gzip
content-type: application/grpc
date: Mon, 04 Jul 2022 08:53:01 GMT
grpc-accept-encoding: identity,deflate,gzip
vary: Accept-Encoding
Response contents:
{
"message": "remoteip:47.xxx.xxx.195 x-forwarded-for:47.xxx.xxx.xx5 user-agent:grpcurl/v1.8.0 grpc-go/1.30.0 hostname:iZbp12xxx0kZ server addr:192.168.1.239 "
}
Response trailers received:
(empty)
Sent 0 requests and received 1 response
関連ドキュメント
-
HTTPS リスナーのパラメーターと考慮事項の詳細については、「HTTPS リスナーの追加」をご参照ください。
-
サーバーグループのパラメーターと考慮事項の詳細については、「サーバーグループの作成と管理」をご参照ください。
-
ヘルスチェックのパラメーターと考慮事項の詳細については、「ALB のヘルスチェック」をご参照ください。