第9章 Trade Zoo
パブリッククラウドで実行され、データはプライベート Kafka クラスターに保存されるシンプルな取引アプリケーションです。
この例は、Skupper を使用してクラウドプロバイダー、データセンター、エッジサイト間でサービスを接続できるさまざまな方法を紹介する 一連の例 の一部です。
概要
この例は、Skupper を使用して、パブリックインターネットに公開せずにリモートサイトの Kafka クラスターにアクセスする方法を示したシンプルな Kafka アプリケーションです。
これには、4 つのサービスが含まれています。
- プライベートデータセンターで実行されている Kafka クラスター。クラスターには、"orders" と "updates" という 2 つのトピックがあります。
- パブリッククラウドで実行される order プロセッサー。"orders" から消費され、買いと売りのオファーをマッチングさせて取引を行います。新規および更新された注文と取引を "updates" として公開します。
- パブリッククラウドで実行される市場データサービス。完了した取引を調べて最新の価格と平均価格を計算し、それを "updates" として公開します。
- パブリッククラウドで実行される Web フロントエンドサービス。売買注文を "orders" に送信し、"updates" から消費して、何が起こっているかを表示します。
この例では、Kafka クラスターをセットアップするために、Strimzi プロジェクトの Kubernetes Operator を使用します。その他のサービスは小さな Python プログラムです。
この例では、プライベートデータセンターとパブリッククラウドを表すために、"private" と "public" という 2 つの Kubernetes 名前空間を使用します。
手順
- この例のリポジトリーのクローンを作成する
- Skupper コマンドラインツールをインストールする
- 名前空間を設定する
- Kafka クラスターをデプロイする
- アプリケーションサービスをデプロイする
- サイトを作成する
- サイトをリンクする
- Kafka クラスターを公開する
- この例のリポジトリーをクローンします。https://skupper.io/examples/index.html から適切な GitHub リポジトリーに移動し、リポジトリーをクローンします。
Skupper コマンドラインツールをインストールします。
この例では、Skupper コマンドラインツールを使用して Skupper をデプロイします。開発環境ごとに
skupper
コマンドを 1 回だけインストールする必要があります。CLI の インストール の詳細は、インストール を参照してください。設定されたシステムの場合は、次のコマンドを使用します。
sudo dnf install skupper-cli
sudo dnf install skupper-cli
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 名前空間を設定します。
Skupper は、通常は異なるクラスター上の複数の Kubernetes 名前空間で使用するように設計されています。
skupper
コマンドとkubectl
コマンドは、kubeconfig と現在のコンテキストを使用して、動作する名前空間を選択します。kubeconfig はホームディレクトリーのファイルに保存されます。
skupper
およびkubectl
コマンドは、KUBECONFIG
環境変数を使用してこれを検索します。1 つの kubeconfig は、ユーザーごとにアクティブコンテキストを 1 つだけサポートします。この演習では複数のコンテキストを一度に使用するため、個別の kubeconfig を作成する必要があります。
名前空間ごとに、新しいターミナルウィンドウを開きます。各ターミナルで、
KUBECONFIG
環境変数を別のパスに設定し、クラスターにログインします。次に、使用する名前空間を作成し、現在のコンテキストに名前空間を設定します。注記ログイン手順はプロバイダーによって異なります。以下のドキュメントを参照してください。
パブリック:
export KUBECONFIG=~/.kube/config-public # Enter your provider-specific login command kubectl create namespace public kubectl config set-context --current --namespace public
export KUBECONFIG=~/.kube/config-public # Enter your provider-specific login command kubectl create namespace public kubectl config set-context --current --namespace public
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プライベート:
export KUBECONFIG=~/.kube/config-private # Enter your provider-specific login command kubectl create namespace private kubectl config set-context --current --namespace private
export KUBECONFIG=~/.kube/config-private # Enter your provider-specific login command kubectl create namespace private kubectl config set-context --current --namespace private
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka クラスターをデプロイします。
プライベートでは、リストされた YAML ファイルを使用して
kubectl create
コマンドとkubectl apply
コマンドを使用し、Operator をインストールしてクラスターとトピックをデプロイします。プライベート:
kubectl create -f kafka-cluster/strimzi.yaml kubectl apply -f kafka-cluster/cluster1.yaml kubectl wait --for condition=ready --timeout 900s kafka/cluster1
kubectl create -f kafka-cluster/strimzi.yaml kubectl apply -f kafka-cluster/cluster1.yaml kubectl wait --for condition=ready --timeout 900s kafka/cluster1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記:
デフォルトでは、Kafka ブートストラップサーバーは、ドメイン名に Kubernetes 名前空間が含まれるブローカーアドレスを返します。この例のように、Kafka クライアントが Kafka クラスターとは異なる名前の名前空間で実行されている場合、クライアントは Kafka ブローカーを解決できなくなります。
Kafka ブローカーにアクセスできるようにするには、各ブローカーの
advertisedHost
プロパティーを、Kafka クライアントがリモートサイトで解決できるドメイン名に設定します。この例では、次のリスナー設定を使用してこれを行います。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 詳細は、Advertised addresses for brokers を参照してください。
アプリケーションサービスをデプロイします。
パブリックでは、リストされた YAML ファイルとともに
kubectl apply
コマンドを使用して、アプリケーションサービスをインストールします。パブリック:
kubectl apply -f order-processor/kubernetes.yaml kubectl apply -f market-data/kubernetes.yaml kubectl apply -f frontend/kubernetes.yaml
kubectl apply -f order-processor/kubernetes.yaml kubectl apply -f market-data/kubernetes.yaml kubectl apply -f frontend/kubernetes.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サイトを作成します。
Skupper サイトは、アプリケーションのコンポーネントが実行される場所です。サイトは相互にリンクされ、アプリケーションのネットワークを形成します。Kubernetes では、サイトは名前空間に関連付けられます。
名前空間ごとに、
skupper init
を使用してサイトを作成します。これにより、Skupper ルーターとコントローラーがデプロイされます。次に、skupper status
を使用して結果を確認します。パブリック:
skupper init skupper status
skupper init skupper status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力サンプル
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プライベート:
skupper init skupper status
skupper init skupper status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力サンプル
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の手順を実行する場合は、いつでも
skupper status
を使用して進捗状況を確認できます。サイトをリンクします。
Skupper リンクは、2 つのサイト間の通信チャネルです。リンクは、アプリケーションの接続と要求のトランスポートとして機能します。
リンクを作成するには、
skupper token create
とskupper link create
の 2 つのskupper
コマンドを組み合わせて使用する必要があります。skupper token create
コマンドは、リンクを作成する権限を示す秘密トークンを生成します。トークンにはリンクの詳細も含まれます。次に、リモートサイトで、skupper link create
コマンドを実行すると、トークンを使用して、トークンを生成したサイトへのリンクを作成します。注記リンクトークンは実際にはシークレットです。トークンがある場合は、サイトにリンクできます。信頼できる人だけがアクセスできるようにしてください。
まず、パブリックサイトの
skupper token create
を使用してトークンを生成します。次に、プライベートサイトでskupper link create
を使用して、サイトをリンクします。パブリック:
skupper token create ~/secret.token
skupper token create ~/secret.token
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力サンプル
skupper token create ~/secret.token
$ skupper token create ~/secret.token Token written to ~/secret.token
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プライベート:
skupper link create ~/secret.token
skupper link create ~/secret.token
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力サンプル
skupper link create ~/secret.token
$ skupper link create ~/secret.token Site configured to link to https://10.105.193.154:8081/ed9c37f6-d78a-11ec-a8c7-04421a4c5042 (name=link1) Check the status of the link using 'skupper link status'.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ターミナルセッションが異なるマシン上にある場合は、トークンを安全に転送するために
scp
または同様のツールを使用する必要がある場合があります。デフォルトでは、トークンは 1 回の使用後、または作成後 15 分後に期限切れになります。Kafka クラスターを公開します。
プライベートでは、
--headless
オプションを指定したskupper expose
を使用して、Kafka クラスターを Skupper ネットワーク上のヘッドレスサービスとして公開します。次に、Public で
kubectl get service
を使用して、しばらくするとcluster1-kafka-brokers
サービスが表示されることを確認します。プライベート:
skupper expose statefulset/cluster1-kafka --headless --port 9092
skupper expose statefulset/cluster1-kafka --headless --port 9092
Copy to Clipboard Copied! Toggle word wrap Toggle overflow パブリック:
kubectl get service/cluster1-kafka-brokers
kubectl get service/cluster1-kafka-brokers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow フロントエンドにアクセスします。
アプリケーションを使用およびテストするには、フロントエンドへの外部アクセスが必要です。
--type LoadBalancer
を指定したkubectl expose
を使用して、フロントエンドサービスへのネットワークアクセスを開放します。フロントエンドが公開されたら、
kubectl get service/frontend
を使用して、フロントエンドサービスの外部 IP を検索します。外部 IP が<pending>
の場合は、しばらくしてからもう一度お試しください。外部 IP を取得したら、
curl
または同様のツールを使用して、そのアドレスの/api/health
エンドポイントを要求します。注記次のコマンドの
<external-ip>
フィールドはプレースホルダーです。実際の値は IP アドレスです。パブリック:
kubectl expose deployment/frontend --port 8080 --type LoadBalancer kubectl get service/frontend curl http://<external-ip>:8080/api/health
kubectl expose deployment/frontend --port 8080 --type LoadBalancer kubectl get service/frontend curl http://<external-ip>:8080/api/health
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力サンプル
Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてが正常であれば、ブラウザーで
http://<external-ip>:8080/
に移動して Web インターフェイスにアクセスできるようになります。