Service Mesh (ASM) は、1 つ以上の Consul サービスレジストリへの接続をサポートしており、マイクロサービスを ASM に移行するのに役立ちます。このトピックでは、ASM インスタンスを 1 つ以上の Consul サービスレジストリに接続する方法について説明します。
前提条件
ASM インスタンスのバージョンが v1.7.5.31-g28ec7490-aliyun 以降であること。
1 つ以上の Consul サービスレジストリがデプロイされていること。詳細については、「Kubernetes への Consul のインストール」をご参照ください。
Container Service for Kubernetes (ACK) クラスタが ASM インスタンスに追加されており、ACK クラスタのポッドが Consul サーバーにアクセスできること。たとえば、Consul サーバーがポッドと同じ ACK クラスタにインストールされている場合、または Consul サーバーがパブリックエンドポイントまたはアクセス可能な内部エンドポイントを提供している場合などです。これらの場合、ポッドは Consul サーバーにアクセスできます。
Web、Web2 などのサンプルサービスと組み込みの Consul サービスが Consul サービスレジストリに登録されていること。Consul へのサービスの登録方法の詳細については、「サービス」をご参照ください。
背景情報
ASM インスタンスを Consul サービスレジストリに接続すると、マイクロサービスを ASM インスタンスに移行する際に、ASM インスタンス内のサービスは ASM インスタンス外のサービスを呼び出すことができます。ただし、ASM インスタンス内のサービスは、ASM インスタンスが Consul サービスレジストリに接続された後、Consul サービスレジストリに自動的に登録されるわけではありません。ASM インスタンス外のサービスが ASM インスタンス内のサービスを呼び出せるようにするには、ASM インスタンス内のサービスを Consul サービスレジストリに手動で登録する必要があります。
手順 1:ASM-se-syncer の設定に必要な情報を取得する
Consul サービスレジストリに接続する ASM インスタンスの ID を表示します。
ASM コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、[名前/ID] 列で管理する ASM インスタンスの ID を確認します。
ASM インスタンスに追加されているクラスタのリージョン ID を表示します。
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけて名前をクリックします。左側のウィンドウで、[クラスタ情報] をクリックします。
[クラスタ] ページの [リージョン] 列で、ASM インスタンスに追加されているクラスタのリージョンを確認します。 たとえば、クラスタのリージョンが中国 (北京) の場合、クラスタのリージョン ID は cn-beijing です。リージョンの詳細については、「サポートされているリージョン」をご参照ください。
アカウントの AccessKey ID と AccessKey シークレットを表示します。詳細については、「AccessKey ペアの作成」をご参照ください。
手順 2:ASM-se-syncer をインストールする
kubectl を使用して ACK クラスタに接続します。詳細については、「クラスタの kubeconfig ファイルを取得し、kubectl を使用してクラスタに接続する」をご参照ください。
コンピュータに Helm をインストールします。詳細については、「Helm」をご参照ください。
説明kubectl を使用して ACK クラスタに接続すると、Helm クライアントは kubeconfig ファイルを自動的に使用してクラスタに接続します。
asm-se-syncer ファイルをコンピュータにダウンロードして解凍します。
asm-se-syncer フォルダ内の values.yaml ファイルを開き、取得した ASM インスタンスの ID、クラスタのリージョン ID、AccessKey ID、AccessKey シークレットを values.yaml ファイルに追加し、次の表に示すパラメータを指定して、values.yaml ファイルを保存します。
[ { "name": "consul-test", // サービスレジストリの名前 "prefix": "consul-", // サービス登録後に生成されるサービスエントリ名のプレフィックス "type": "consul", // サービスレジストリのタイプ。consul に設定します。 "endpoint": "http://consul-server.consul:8500", // サービスレジストリのエンドポイント "toNamespace": "default" // 生成されたサービスエントリが存在する名前空間。指定された名前空間が存在しない場合は、自動的に名前空間が作成されます。 } ]
パラメータ
説明
name
サービスレジストリの名前。名前は一意である必要があります。
prefix
サービス登録後に生成されるサービスエントリの名前のプレフィックス。
type
サービスレジストリのタイプ。このパラメータを consul に設定します。
endpoint
サービスレジストリのエンドポイント。
toNamespace
生成されたサービス エントリが存在する名前空間。指定された名前空間が存在しない場合は、名前空間が自動的に作成されます。
ASM インスタンスを複数の Consul サービスレジストリに接続する場合は、関連する ASM インスタンス ID、クラスタリージョン ID、AccessKey ID、AccessKey シークレットを values.yaml ファイルに追加し、各サービスレジストリのパラメータを指定して、values.yaml ファイルを保存します。
[ { "name": "consul-test01", // サービスレジストリの名前 "prefix": "consul01-", // サービス登録後に生成されるサービスエントリ名のプレフィックス "type": "consul", // サービスレジストリのタイプ。consul に設定します。 "endpoint": "http://consul-server01.consul:8500", // サービスレジストリのエンドポイント "toNamespace": "default" // 生成されたサービスエントリが存在する名前空間。指定された名前空間が存在しない場合は、自動的に名前空間が作成されます。 }, { "name": "consul-test02", // サービスレジストリの名前 "prefix": "consul02-", // サービス登録後に生成されるサービスエントリ名のプレフィックス "type": "consul", // サービスレジストリのタイプ。consul に設定します。 "endpoint": "http://consul-server02.consul:8500", // サービスレジストリのエンドポイント "toNamespace": "default" // 生成されたサービスエントリが存在する名前空間。指定された名前空間が存在しない場合は、自動的に名前空間が作成されます。 } ]
次のコマンドを実行して、ASM-se-syncer をインストールします。
helm install -f values.yaml se-syncer ./
ASM-se-syncer がインストールされると、ASM インスタンスは自動的に Consul サービスレジストリに接続され、asm-serviceregistry-syncer デプロイメントが ASM インスタンスに追加された ACK クラスタに自動的にインストールされます。さらに、Consul サービスレジストリに登録されているすべてのサービスが ASM インスタンスに同期されます。
手順 3:ASM インスタンスと Consul サービスレジストリ間の接続を確認する
asm-serviceregistry-syncer デプロイメントがインストールされているかどうかを確認します。
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけて名前をクリックします。左側のウィンドウで、 を選択します。
[デプロイメント] ページで、asm-serviceregistry-syncer デプロイメントが存在するかどうかを確認します。
サービスエントリの同期を確認します。
ASM コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[外部サービス (serviceentry)] ページで、Consul サービスレジストリに登録されている 3 つのサービスが ASM インスタンスに同期されているかどうかを確認します。
説明[外部サービス (serviceentry)] ページでは、Consul サービスは [手順 2 で指定したプレフィックス]-[Consul に登録されているサービスの名前] の形式で名前が付けられます。
[外部サービス (serviceentry)] ページでは、Consul サービスが存在する名前空間の名前は、手順 2 で指定した
toNamespace
パラメータの値です。
FAQ
Consul サービスを呼び出すにはどうすればよいですか?
Consul サービスが存在するクラスタをデータプレーンに追加すると、次の 2 つの方法で Consul サービスを呼び出すことができます。
方法 1: DNS プロキシ機能を有効にし、Consul サービスに対応するサービスエントリ内のホスト名とポート番号を使用して Consul サービスを呼び出します。
DNS プロキシ機能を有効にします。詳細については、「ASM での DNS プロキシの使用」をご参照ください。
Consul サービスの呼び出しに使用するホスト名とポート番号を取得します。
ASM コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[外部サービス (serviceentry)] ページで、表示するサービスエントリを見つけて、[アクション] 列の [YAML] をクリックします。
[編集] ダイアログボックスで、ホスト名とポート番号を取得します。次に、http://<ホスト名>:<ポート番号> 形式の URL を使用して Consul サービスを呼び出します。
方法 2:Consul サービスに対応するサービスエントリのエンドポイントを使用して Consul サービスを呼び出します。
ASM コンソール にログインします。左側のナビゲーションウィンドウで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[外部サービス (serviceentry)] ページで、表示するサービスエントリを見つけて、[アクション] 列の [YAML] をクリックします。
[編集] ダイアログボックスで、サービスのエンドポイントを取得します。次に、http://<エンドポイント> 形式の URL を使用して Consul サービスを呼び出します。
Consul と Istio の間でサービスを同期するにはどうすればよいですか?
Consul にサービスを登録すると、サービスはサービスエントリとして Istio に自動的に同期されます。サービスを更新または削除すると、Istio のサービスエントリも更新または削除されます。
ASM インスタンスと Consul サービスレジストリ間の接続を閉じるにはどうすればよいですか?
次のコマンドを実行して、ASM-se-syncer をアンインストールします。
helm uninstall se-syncer