Alibaba Cloud Service Mesh は、データプレーンで Terway ネットワークプラグインを使用する Container Service for Kubernetes (ACK) クラスターの Application Load Balancer (ALB) と統合します。この統合により、サービスガバナンスが簡素化され、サービス間の安全な認証済み通信が保証され、メッシュの可観測性が提供され、開発と運用保守のワークロードが削減されます。このトピックでは、ASM Service Mesh と ALB を統合する方法について説明します。
前提条件
-
ACK クラスターが ASM インスタンスに追加されており、ASM インスタンスと ACK クラスターが次の要件を満たしていること:
-
ASM インスタンス:Enterprise Edition。
-
ACK クラスター:
-
ネットワークプラグインタイプが Terway であること。
-
Cloud Controller Manager (CCM) コンポーネントのバージョンが v1.9.3.313-g748f81e-aliyun 以降であること。詳細については、「Cloud Controller Manager」をご参照ください。
-
ALB Ingress Controller コンポーネントがインストールされていること。詳細については、「コンポーネントの管理」をご参照ください。
-
-
-
デフォルトの名前空間で自動サイドカープロキシ注入が有効になっていること。詳細については、「自動インジェクションの有効化」をご参照ください。
-
イングレスゲートウェイが作成されており、CLB instance type パラメーターが Private Access に、Service Port が [80] に設定されていること。詳細については、「イングレスゲートウェイの作成」をご参照ください。
ステップ 1:サンプルアプリケーションのデプロイ
データプレーンクラスターで次のコマンドを実行して、Bookinfo サンプルアプリケーションをデプロイします。詳細については、「ASM インスタンスに関連付けられたクラスターにアプリケーションをデプロイする」をご参照ください。
kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/bookinfo/platform/kube/bookinfo.yaml
ステップ 2:Istio リソースの作成
テスト目的で Gateway リソースと VirtualService を作成します。
-
Gateway リソースを作成します。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
Gateway ページで、Create をクリックします。
[基本情報] セクションで、[名前空間] に `default` を選択し、[名前] に `bookinfo-gateway` と入力します。[ゲートウェイに適用] セクションで、キーが `istio`、値が `ingressgateway` のラベルを追加します。[サービス] セクションで、[名前] に `http`、[ポート] に `80` と入力し、[プロトコル] に [HTTP] を選択します。その後、[作成] をクリックします。
-
Gateway リソースの YAML ファイルを確認するには、Preview をクリックします。構成が正しいことを確認したら、OK をクリックします。次に、Create ページの下部にある Create をクリックします。
-
-
VirtualService を作成し、ルーティングを設定します。
-
ASM インスタンスの詳細ページで、左側のナビゲーションウィンドウから を選択します。
-
VirtualService ページで、Create をクリックして bookinfo-gateway の仮想サービスを設定します。
[名前空間] を [default] に、[名前] を [bookinfo] に設定します。[すべてのサイドカーに適用] スイッチをオフにし、ゲートウェイルールに [bookinfo-gateway] を追加します。[HTTP ルート] セクションで、次の一致ルールを追加します:URI 完全一致 `/productpage`、URI プレフィックス一致 `/static`、URI 完全一致 `/login`、URI 完全一致 `/logout`、および URI プレフィックス一致 `/api/v1/products`。ルート宛先サービス名を [productpage] に、ポートを [9080] に設定します。その後、[作成] をクリックします。
-
Create ページの下部で、Preview をクリックして YAML ファイルを表示します。構成が正しいことを確認したら、Submit をクリックします。次に、Create ページの下部で、Create をクリックします。
-
ステップ 3:AlbConfig オブジェクトの作成
シナリオ 1:既存の ALB インスタンスの統合
-
ALB コンソールにログインし、ALB インスタンス ID を取得します。
-
次の内容で alb-demo.yaml という名前のファイルを作成します。
`config.id` をご利用の ALB インスタンス ID に置き換えます。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: default spec: config: id: alb-xxxxx forceOverride: false -
次のコマンドを実行して AlbConfig オブジェクトを作成します。
kubectl apply -f alb-demo.yaml
シナリオ 2:新しい ALB インスタンスの統合
-
次の内容で alb-demo.yaml という名前のファイルを作成します。詳細については、「ALB Ingress を使用してサービスを公開する」をご参照ください。
この例では、alb-demo という名前の ALB インスタンスが自動的に作成されます。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: default spec: config: name: alb-demo addressType: Internet zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** - vSwitchId: vsw-uf6nun9tql5t8nh15****パラメーター
説明
spec.config.nameALB インスタンスの名前。
addressType(必須) ロードバランサーのアドレスタイプ。有効な値:
-
Internet (デフォルト):ロードバランサーはパブリック IP アドレスを持ちます。DNS レコードはパブリック IP アドレスに解決され、ロードバランサーはインターネット経由でアクセスできます。
-
Intranet:ロードバランサーはプライベート IP アドレスのみを持ちます。DNS レコードはプライベート IP アドレスに解決され、ロードバランサーはそれがデプロイされている VPC 内からのみアクセスできます。
zoneMappings(必須) ALB Ingress の vSwitch ID。異なるアベイラビリティゾーンにある少なくとも 2 つの vSwitch ID を指定する必要があります。指定された vSwitch は、ALB がサポートするアベイラビリティゾーンにある必要があります。サポートされているリージョンとアベイラビリティゾーンについては、「ALB がサポートするリージョンとゾーン」をご参照ください。vSwitch の作成方法については、「vSwitch の作成と管理」をご参照ください。
-
-
次のコマンドを実行して AlbConfig オブジェクトを作成します。
kubectl apply -f alb-demo.yaml
ステップ 4:IngressClass リソースの作成
-
alb.yaml という名前のファイルを作成し、次の内容をコピーします。
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: default scope: Cluster -
次のコマンドを実行して IngressClass リソースを作成します。
kubectl apply -f alb.yaml期待される出力:
ingressclass.networking.k8s.io/alb created
ステップ 5:Ingress リソースの作成
ASM イングレスゲートウェイのサービスは istio-system 名前空間で実行されます。データプレーンクラスター (ACK クラスター) の同じ istio-system 名前空間に Ingress リソースを作成する必要があります。ポートは、ASM イングレスゲートウェイ用に構成したポート 80 と一致している必要があります。
-
asm-gateway-ingress.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: asm-gateway-ingress namespace: istio-system spec: ingressClassName: alb rules: - http: paths: - backend: service: name: istio-ingressgateway port: number: 80 path: /* pathType: ImplementationSpecific -
次のコマンドを実行して Ingress リソースを作成します。
kubectl apply -f asm-gateway-ingress.yaml
ステップ 6:アクセスのテスト
-
次のコマンドを実行して Ingress アドレスを取得します。
kubectl get ing -n istio-system期待される出力:
NAME CLASS HOSTS ADDRESS PORTS AGE asm-gateway-ingress alb * alb-xxxx.xxxx.alb.aliyuncs.com 80 18hIngress アドレスは
alb-xxxx.xxxx.alb.aliyuncs.comです。 -
ASM イングレスゲートウェイにアクセスします。
-
方法 1:前のステップで取得した Ingress インスタンスのアドレスを使用して ASM ゲートウェイにアクセスします:
http://alb-xxxx.xxxx.alb.aliyuncs.com/productpage。 -
方法 2:ALB コンソールにログインし、ALB インスタンスのパブリック IP アドレスまたはそれにバインドされたドメイン名を使用して ASM ゲートウェイにアクセスします。ALB コンソールのインスタンス詳細ページで、alb-demo ALB インスタンスの基本情報を表示します。下部のアベイラビリティゾーンセクションで、各アベイラビリティゾーンの EIP (Elastic IP Address) を確認できます。
-