Service Mesh は、Consul サービスレジストリとの統合をサポートしており、マイクロサービスの ASM への移行を支援します。このトピックでは、Consul サービスレジストリを ASM と統合する方法について説明します。
前提条件
-
ご利用の ASM インスタンスは、v1.7.5.31-g28ec7490-aliyun 以降のバージョンである必要があります。
-
Consul がサービスレジストリとしてデプロイされていること。詳細については、「Installing Consul on Kubernetes」をご参照ください。
-
Service Mesh に追加された Kubernetes クラスター内のポッドは、Consul サーバーエンドポイントにアクセスできる必要があります。 たとえば、Consul サーバーが同じ Kubernetes クラスターにインストールされてパブリックエンドポイントを公開している場合や、アクセス可能な内部エンドポイントを提供している場合などです。
-
Web、Web2、および組み込みの Consul サービスを含むサンプルサービスが Consul に登録されている必要があります。詳細については、「Services」をご参照ください。
背景情報
ASM は、Service Mesh 内のサービスが Service Mesh 外のサービスを呼び出せるようにすることでマイクロサービスの ASM への移行を容易にする、Consul サービスレジストリへの接続機能を提供します。ASM は、Service Mesh 内のサービスを Consul サービスレジストリに自動的に登録しません。Service Mesh 外のサービスがサービスメッシュ内のサービスを呼び出せるようにするには、Service Mesh 内のサービスを Consul サービスレジストリに手動で登録する必要があります。
ステップ 1:ASM-se-syncer 設定の取得
-
ASM インスタンス ID を取得します。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[Mesh Management] ページで、[Name/ID] 列からターゲットインスタンスの ID を見つけます。
-
-
クラスターのリージョン ID を取得します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスターリスト] をクリックします。
[クラスターリスト] ページで、ご利用のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[クラスター情報] をクリックします。
-
[基本情報] セクションで、クラスターのリージョンを確認します。たとえば、リージョンが中国 (北京) の場合、リージョン ID は cn-beijing です。リージョンの詳細については、「サポートされているリージョン」をご参照ください。
-
AccessKey ID と AccessKey Secret を取得します。詳細については、「AccessKey ペアの作成」をご参照ください。
ステップ 2:ASM-se-syncer のインストール
-
kubectl を使用してクラスターに接続します。詳細については、「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。
-
ローカルマシンに Helm をインストールします。詳細については、「Helm ドキュメント」をご参照ください。
説明kubectl でクラスターに接続すると、Helm クライアントは自動的に KubeConfig ファイルを使用してクラスターに接続します。
-
asm-se-syncer の Helm チャートをダウンロードし、ローカルマシンに解凍します。
-
asm-se-syncer フォルダに移動し、values.yaml ファイルを見つけます。values.yaml ファイルに ASM ID、クラスターのリージョン ID、AccessKey ID、および AccessKey Secret を追加し、次の Consul サービス情報を変更してから、values.yaml ファイルを保存します。
[ { "name": "consul-test", "prefix": "consul-", "type": "consul", "endpoint": "http://consul-server.consul:8500", "toNamespace": "default" } ]パラメーター
説明
nameサービスレジストリの一意の名前。
prefix生成されるサービスエントリリソースの名前のプレフィックス。
typeサービスレジストリのタイプ。サポートされている値は
consulのみです。endpointサービスレジストリのエンドポイントアドレス。
toNamespace生成されたサービスエントリリソースが作成される名前空間。名前空間が存在しない場合は、自動的に作成されます。
複数の Consul サービスレジストリに接続するには、各レジストリの設定を values.yaml ファイルに追加します。その後、values.yaml ファイルを保存します。
[ { "name": "consul-test01", "prefix": "consul01-", "type": "consul", "endpoint": "http://consul-server01.consul:8500", "toNamespace": "default" }, { "name": "consul-test02", "prefix": "consul02-", "type": "consul", "endpoint": "http://consul-server02.consul:8500", "toNamespace": "default" } ] -
次のコマンドを実行して ASM-se-syncer をインストールします。
helm install -f values.yaml se-syncer ./ASM-se-syncer がインストールされると、ASM は自動的に Consul サービスレジストリに接続し、ACK クラスターに asm-serviceregistry-syncer コンポーネントをインストールし、Consul から Service Mesh にサービスを同期します。
ステップ 3:Consul 統合の検証
-
ASM コンポーネントのインストールステータスを確認します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスターリスト] をクリックします。
[クラスターリスト] ページで、ご利用のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
[デプロイメント] ページで、asm-serviceregistry-syncer という名前のコンポーネントを見つけます。
コンポーネントが 1/1 の準備完了状態であれば、正常に実行されています。
-
サービスエントリリソースの同期ステータスを確認します。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
External Service(ServiceEntry) ページで、Consul に登録されているサービスが Service Mesh に同期されていることを確認します。
説明-
[External Service(ServiceEntry)] ページでは、Consul サービスの名前は
[プレフィックス]-[Consul でのサービス名]という形式に従います。プレフィックスは、prefixパラメーターに指定した値です。 -
[External Service(ServiceEntry)] ページでは、Consul サービスの名前空間は、指定した
toNamespaceパラメーターの値です。
-
-
よくある質問
同期されたサービスの呼び出し方法
呼び出し元サービスのクラスターがサービスメッシュのデータプレーンの一部になると、次のいずれかの方法で同期されたサービスを呼び出すことができます:
-
方法 1:DNS プロキシを有効にし、サービスエントリの
hostsフィールドのホスト名とポートを使用してサービスを呼び出します。-
DNS プロキシを有効にします。詳細については、「ASM インスタンスで DNS プロキシ機能を使用する」をご参照ください。
-
サービスを呼び出すためのホスト名とポートを取得します。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
[External Service(ServiceEntry)] ページで、ターゲットのサービスエントリを見つけ、[Operator] 列の [View YAML] をクリックします。
[Edit] ダイアログボックスでホスト名とポートを取得し、http://<hostname>:<port> を使用してサービスを呼び出します。ServiceEntry の YAML ファイルでは、主要な設定項目
hostsはpro-qf-testに設定され、ポート番号 (number) は80に設定されています。- apiVersion: istio.alibabacloud.com, controller: true kind: ASMServiceRegistry name: default uid: 5d301b4e-39bc-46b5-xxx resourceVersion: '432158678' selfLink: >- /apis/networking.istio.io/v1beta1/naxxx uid: e446b651-be82-4e13-99xxx spec: addresses: - 172.30.xxx endpoints: - address: 172.xxx ports: http: 80 hosts: - pro-qf-test ports: - name: http number: 80 protocol: HTTP resolution: STATIC
-
-
-
方法 2:[External Service(ServiceEntry)] の endpoints フィールドのアドレスを使用してサービスを呼び出します。
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
-
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
-
[External Service(ServiceEntry)] ページで、ターゲットのサービスエントリを見つけ、[Operator] 列の [View YAML] をクリックします。
[Edit] ダイアログボックスでアドレスを見つけます。http://<address> 形式を使用してサービスを呼び出します。YAML では、主要な設定項目は
spec.endpointsの下のaddressフィールドです。- apiVersion: istio.alibabacloud.com controller: true kind: ASMServiceRegistry name: default uid: 5d301b4e-39bc-46b5-xxx resourceVersion: '432158678' selfLink: >- /apis/networking.istio.io/v1beta1/naxxx uid: e446b651-be82-4e13-99xxx spec: addresses: - 172.30.xxx endpoints: - address: 172.xxx ports: http: 80 hosts: - pro-qf-test ports: - name: http number: 80 protocol: HTTP resolution: STATIC
-
サービス同期の仕組み
Consul に登録されたサービスは、サービスエントリリソースとして自動的に Istio に同期されます。Consul でサービスが削除または更新されると、その変更は Istio の対応するサービスエントリに自動的に同期されます。
Consul 統合の無効化方法
次のコマンドを実行して、Consul 同期リソースを削除します。
helm uninstall se-syncer