第8章 リンクコストの指定
サイトをリンクする際に、各リンクにコストを割り当てて、トラフィックフローに影響を与えることができます。デフォルトでは、新しいリンクのリンクコストは 1 に設定されています。サービスネットワークでは、ルーティングアルゴリズムは、クライアントからターゲットサーバーまでの総コストが最も低いパスを使用しようとします。
さまざまなサイトにサービスを分散させている場合、クライアントが特定のターゲットまたはリンクを優先することを推奨します。この場合、代替リンクで
1より大きいコストを指定して、これらのリンクの使用を減らすことができます。注記オープン接続の分散は統計的であり、つまりラウンドロビンシステムではありません。
- 接続が 1 つのリンクのみをトラバースする場合、パスコストはリンクコストと等しくなります。接続が複数のリンクをトラバースする場合、パスコストはパスに含まれるすべてのリンクの合計になります。
コストは、ネットワーク内のクライアントからサーバーへのパスを使用するためのしきい値として機能します。パスが 1 つしかない場合、トラフィックはコストに関係なくそのパスに流れます。
注記サービスの 2 つのターゲットから開始し、いずれかのターゲットが使用できなくなると、トラフィックはコストに関係なく残りのパスに流れます。
- クライアントからサーバーインスタンスまたはサービスへのパスが多数ある場合、トラフィックは、接続数が代替パスのコストを超えるまで、最もコストの低いパスを流れます。オープン接続のこのしきい値に達すると、新しい接続は代替パスと最低コストのパスに分散されます。
前提条件
- リンク 元 のサイトに Kubernetes コンテキストを設定している。
- リンク 先 のサイトのトークン。
手順
サービスネットワークへのリンクを作成します。
skupper link create <filename> --cost <integer-cost>
$ skupper link create <filename> --cost <integer-cost>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <integer-cost>は 1 より大きい整数です。トラフィックは低コストのリンクを優先します。注記リンクを経由せずにサービスを呼び出すことができる場合、そのサービスはローカルであると見なされ、暗黙的なコストとして
0が設定されます。たとえば、
token.yamlという名前のトークンファイルを使用して、コストを2に設定したリンクを作成します。skupper link create token.yaml --cost 2
$ skupper link create token.yaml --cost 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow リンクコストを確認します。
skupper link status link1 --verbose
$ skupper link status link1 --verboseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力は以下の例のようになります。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンソールを使用してトラフィックを監視します。
サイトにコンソールがある場合は、ログインして各サーバーのプロセスに移動します。各クライアントに対応するトラフィックレベルを表示できます。
注記異なるサイトに複数のクライアントがある場合は、各クライアントに対してビューをフィルタリングして、トラフィックに対するコストの影響を判断します。たとえば、高コストでリンクされている 2 つのサイトネットワークがあり、両方のサイトにサーバーとクライアントがある場合、ローカルサーバーが使用可能な間は、クライアントはローカルサーバーによってサービスを提供されていることがわかります。
8.1. Linux ホストからサービスネットワーク上でサービスを公開する リンクのコピーリンクがクリップボードにコピーされました!
サービスネットワークを作成した後、公開されたサービスはそのネットワーク全体で通信できます。
サービスを使用する一般的なフローは、Kubernetes サイトと Podman サイトの場合と同じです。
skupper CLI には、ホスト上にすでに存在するサービスを公開するための 2 つのオプションがあります。
-
exposeは、単一サービスを持つホストなどの単純なユースケースをサポートします。手順は、「サービスネットワーク上での簡単なサービスの公開」 を参照してください。 -
service createおよびservice bindは、ホストに複数のサービスがある場合など、より柔軟にサービスを公開する方法です。手順は、「サービスネットワーク上での複雑なサービスの公開」 を参照してください。
8.1.1. サービスネットワーク上での簡単なサービスの公開 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、簡単なユースケースのサービスネットワークでサービスを有効にする方法を説明します。
前提条件
- Skupper Podman サイト
手順
以下のようにサーバーを実行します。
podman run --name backend-target --network skupper --detach --rm -p 8080:8080 quay.io/skupper/hello-world-backend
$ podman run --name backend-target --network skupper --detach --rm -p 8080:8080 quay.io/skupper/hello-world-backendCopy to Clipboard Copied! Toggle word wrap Toggle overflow この手順は Skupper 固有のものではありません。つまり、このプロセスはホストの標準プロセスから変更されていません。
サービスネットワーク上で通信可能なサービスを作成します。
skupper expose [host <hostname|ip>]
$ skupper expose [host <hostname|ip>]Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
-
<host>は、サーバーが実行されているホストの名前です。たとえば、サーバーをコンテナーとして実行する場合は、コンテナーの名前になります。 -
<ip>は、サーバーが実行されている IP アドレスです。
手順 1 のデプロイメント例では、次のコマンドを使用してサービスを作成します。
skupper expose host backend-target --address backend --port 8080
$ skupper expose host backend-target --address backend --port 8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドのオプションは以下の通りです。
-
--port <port-number>: このサービスがサービスネットワーク上で利用可能なポート番号を指定します。注記: このオプションを繰り返すことで、複数のポートを指定できます。 -
--target-port <port-number>: 公開したい Pod のポート番号を指定します。 -
--protocol <protocol>を使用すると、使用するプロトコル、tcp、http、またはhttp2を指定できます。
-
サービスネットワークの別のサイトにサービスを作成します。
skupper service create backend 8080
$ skupper service create backend 8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.1.2. サービスネットワーク上での複雑なサービスの公開 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、より複雑なユースケースのサービスネットワークでサービスを有効にする方法を説明します。
前提条件
- Skupper Podman サイト
手順
以下のようにサーバーを実行します。
podman run --name backend-target --network skupper --detach --rm -p 8080:8080 quay.io/skupper/hello-world-backend
$ podman run --name backend-target --network skupper --detach --rm -p 8080:8080 quay.io/skupper/hello-world-backendCopy to Clipboard Copied! Toggle word wrap Toggle overflow この手順は Skupper 固有のものではありません。つまり、このプロセスはホストの標準プロセスから変更されていません。
サービスネットワーク上で通信可能なサービスを作成します。
skupper service create <name> <port>
$ skupper service create <name> <port>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
-
<name>- 作成するサービスの名前。 -
<port>- サービスが使用するポート。
手順 1 のデプロイメント例では、次のコマンドを使用してサービスを作成します。
skupper service create hello-world-backend 8080
$ skupper service create hello-world-backend 8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
サービスをクラスターサービスにバインドします。
skupper service bind <service-name> <target-type> <target-name>
$ skupper service bind <service-name> <target-type> <target-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
-
<service-name>- サービスネットワーク上のサービスの名前。 -
<target-type>- 公開するオブジェクト。現在有効な値はhostのみです。 -
<target-name>- クラスターサービスの名前。
手順 1 のデプロイメント例では、次のコマンドを使用してサービスをバインドします。
skupper service bind hello-world-backend host hello-world-backend
$ skupper service bind hello-world-backend host hello-world-backendCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
8.1.3. サービスネットワークからの簡単なサービスの消費 リンクのコピーリンクがクリップボードにコピーされました!
Podman サイトで公開されているサービスは、他のサイトでは自動的に利用できません。これは、skupper init --enable-service-sync false を使用して作成された Kubernetes サイトと同じです。
前提条件
- サービスネットワーク上でサービスを公開するリモートサイト
- Podman サイト
手順
- Skupper サイトに関連付けられたユーザーとしてホストにログインします。
ローカルサービスを作成します。
skupper service create <service-name> <port number>
$ skupper service create <service-name> <port number>Copy to Clipboard Copied! Toggle word wrap Toggle overflow