第4章 Skupper Camel インテグレーションの例
Skupper を使用して Kubernetes クラスター全体に Twitter、Telegram、PostgreSQL インテグレーションルートをデプロイします。
この例は、Skupper を使用してクラウドプロバイダー、データセンター、エッジサイト間でサービスを接続できるさまざまな方法を紹介する 一連の例 の一部です。
概要
この例では、Skupper を使用して複数の Kubernetes クラスターにデプロイできるさまざまな Camel インテグレーションルーターを統合する方法を説明します。
このプロジェクトは、パブリッククラスターにデプロイされ、'skupper' という単語を含むツイートを検索する Camel インテグレーションを示すことが主な目的です。これらの結果は、データベースがデプロイされているプライベートクラスターに送信されます。3 番目のパブリッククラスターはデータベースに ping を実行し、新しい結果を Telegram チャネルに送信します。
この例を実行するには、Telegram チャネルとその認証情報を使用する Twitter アカウントを作成する必要があります。
これには、以下のコンポーネントが含まれます。
-
Twitter フィード内で
skupper(public) という単語を含む結果を検索する Twitter Camel インテグレーション。 - Twitter Camel ルーターからデータを受信してデータベース (パブリック) に送信する PostgreSQL Camel シンク。
- 結果を格納する PostgreSQL データベース (プライベート)。
- データベースをポーリングし、その結果を Telegram チャネル (パブリック) に送信する Telegram Camel インテグレーション。
前提条件
-
kubectlコマンドラインツール、バージョン 1.15 以降 -
skupperコマンドラインツール、最新バージョン - 任意のプロバイダーから少なくとも 1 つの Kubernetes クラスターにアクセスできる
名前空間ごとに Camel インテグレーションをデプロイするための
Kamelインストールkamel install
kamel installCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
Twitter API を使用するための
Twitter Developer Account(config.propertiesファイルに認証情報を追加する必要があります) -
メッセージを公開するために
Telegramボットとチャネルを作成する (config.propertiesファイルに認証情報を追加する必要があります)
手順
- 個別のコンソールセッションを設定する
- クラスターにアクセスする
- 名前空間を設定する
- 名前空間に Skupper をインストールする
- 名前空間のステータスを確認する
- 名前空間をリンクする
- プライベートクラスターにデータベースをデプロイして公開する
- ツイートを保存するテーブルを作成する
- パブリッククラスターに Twitter Camel インテグレーションをデプロイする
- パブリッククラスターに Telegram Camel インテグレーションをデプロイする
個別のコンソールセッションを設定する
Skupper は、通常は異なるクラスター上の複数の名前空間で使用するように設計されています。
skupperコマンドは、kubeconfig と現在のコンテキストを使用して、動作する名前空間を選択します。kubeconfig はホームディレクトリーのファイルに保存されます。
skupperおよびkubectlコマンドは、KUBECONFIG環境変数を使用してこれを検索します。1 つの kubeconfig は、ユーザーごとにアクティブコンテキストを 1 つだけサポートします。この演習では複数のコンテキストを一度に使用するため、個別の kubeconfig を作成する必要があります。
各名前空間のコンソールセッションを開始します。各セッションで
KUBECONFIG環境変数を異なるパスに設定します。private1 のコンソール:
export KUBECONFIG=~/.kube/config-private1
export KUBECONFIG=~/.kube/config-private1Copy to Clipboard Copied! Toggle word wrap Toggle overflow public1 のコンソール:
export KUBECONFIG=~/.kube/config-public1
export KUBECONFIG=~/.kube/config-public1Copy to Clipboard Copied! Toggle word wrap Toggle overflow public2 のコンソール:
export KUBECONFIG=~/.kube/config-public2
export KUBECONFIG=~/.kube/config-public2Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターにアクセスする
クラスターにアクセスする方法は、Kubernetes プロバイダーによって異なります。選択したプロバイダーの手順を確認し、それを使用して各コンソールセッションのアクセスを認証および設定します。詳細は、次のリンクを参照してください。
名前空間を設定する
kubectl create namespaceを使用して、使用する名前空間を作成します (または既存の名前空間を使用します)。kubectl config set-contextを使用して、各セッションの現在の名前空間を設定します。private1 のコンソール:
kubectl create namespace private1 kubectl config set-context --current --namespace private1
kubectl create namespace private1 kubectl config set-context --current --namespace private1Copy to Clipboard Copied! Toggle word wrap Toggle overflow public1 のコンソール:
kubectl create namespace public1 kubectl config set-context --current --namespace public1
kubectl create namespace public1 kubectl config set-context --current --namespace public1Copy to Clipboard Copied! Toggle word wrap Toggle overflow public2 のコンソール:
kubectl create namespace public2 kubectl config set-context --current --namespace public2
kubectl create namespace public2 kubectl config set-context --current --namespace public2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 名前空間に Skupper をインストールする
skupper initコマンドは、現在の名前空間に Skupper ルーターとサービスコントローラーをインストールします。各 namespace でskupper initコマンドを実行します。private1 のコンソール:
skupper init
skupper initCopy to Clipboard Copied! Toggle word wrap Toggle overflow public1 のコンソール:
skupper init
skupper initCopy to Clipboard Copied! Toggle word wrap Toggle overflow public2 のコンソール:
skupper init
skupper initCopy to Clipboard Copied! Toggle word wrap Toggle overflow 名前空間のステータスを確認する
各コンソールで
skupper statusを使用して、Skupper がインストールされていることを確認します。private1 のコンソール:
skupper status
skupper statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow public1 のコンソール:
skupper status
skupper statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow public2 のコンソール:
skupper status
skupper statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 名前空間ごとに次のような出力が表示されます。
Skupper is enabled for namespace "<namespace>" in interior mode. It is not connected to any other sites. It has no exposed services. The site console url is: http://<address>:8080 The credentials for internal console-auth mode are held in secret: 'skupper-console-users'
Skupper is enabled for namespace "<namespace>" in interior mode. It is not connected to any other sites. It has no exposed services. The site console url is: http://<address>:8080 The credentials for internal console-auth mode are held in secret: 'skupper-console-users'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の手順を実行する場合は、いつでも
skupper statusを使用して進捗状況を確認できます。名前空間をリンクする
リンクを作成するには、
skupper token createとskupper link createの 2 つのskupperコマンドを組み合わせて使用する必要があります。skupper token createコマンドは、リンクを作成する権限を示す秘密トークンを生成します。トークンにはリンクの詳細も含まれます。次に、リモート名前空間で、skupper link createコマンドを実行すると、トークンを使用して、トークンを生成した名前空間へのリンクを作成します。注記リンクトークンは実際にはシークレットです。トークンがある場合は、名前空間にリンクできます。信頼できる人だけがアクセスできるようにしてください。
まず、1 つの名前空間で
skupper token createを使用してトークンを生成します。次に、もう 1 つでskupper link createを使用してリンクを作成します。public1 のコンソール:
skupper token create ~/public1.token --uses 2
skupper token create ~/public1.token --uses 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow public2 のコンソール:
skupper link create ~/public1.token skupper link status --wait 30 skupper token create ~/public2.token
skupper link create ~/public1.token skupper link status --wait 30 skupper token create ~/public2.tokenCopy to Clipboard Copied! Toggle word wrap Toggle overflow private1 のコンソール:
skupper link create ~/public1.token skupper link create ~/public2.token skupper link status --wait 30
skupper link create ~/public1.token skupper link create ~/public2.token skupper link status --wait 30Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンソールセッションが異なるマシン上にある場合は、トークンを転送するために
scpまたは同様のツールを使用する必要がある場合があります。プライベートクラスターにデータベースをデプロイして公開する
kubectl applyを使用して、private1にデータベースをデプロイします。次に、デプロイメントを公開します。private1 のコンソール:
kubectl create -f src/main/resources/database/postgres-svc.yaml skupper expose deployment postgres --address postgres --port 5432 -n private1
kubectl create -f src/main/resources/database/postgres-svc.yaml skupper expose deployment postgres --address postgres --port 5432 -n private1Copy to Clipboard Copied! Toggle word wrap Toggle overflow ツイートを保存するテーブルを作成する
private1 のコンソール:
kubectl run pg-shell -i --tty --image quay.io/skupper/simple-pg --env="PGUSER=postgresadmin" --env="PGPASSWORD=admin123" --env="PGHOST=$(kubectl get service postgres -o=jsonpath='{.spec.clusterIP}')" -- bash psql --dbname=postgresdb CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE TABLE tw_feedback (id uuid DEFAULT uuid_generatev4 (),sigthning VARCHAR(255),created TIMESTAMP default CURRENTTIMESTAMP,PRIMARY KEY(id));kubectl run pg-shell -i --tty --image quay.io/skupper/simple-pg --env="PGUSER=postgresadmin" --env="PGPASSWORD=admin123" --env="PGHOST=$(kubectl get service postgres -o=jsonpath='{.spec.clusterIP}')" -- bash psql --dbname=postgresdb CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE TABLE tw_feedback (id uuid DEFAULT uuid_generatev4 (),sigthning VARCHAR(255),created TIMESTAMP default CURRENTTIMESTAMP,PRIMARY KEY(id));Copy to Clipboard Copied! Toggle word wrap Toggle overflow パブリッククラスターに Twitter Camel インテグレーションをデプロイする
まず、kamel を使用して
TwitterRouteコンポーネントを Kubernetes にデプロイする必要があります。このコンポーネントは、5000 ミリ秒ごとに Twitter をポーリングして、skupperという単語を含むツイートを検索します。その後、postgresql-sinkに結果を送信します。この postgresql-sink は、同じクラスター内にインストールしておく必要があります。kamelet シンクは、結果を postgreSQL データベースに挿入します。public1 のコンソール:
src/main/resources/scripts/setUpPublic1Cluster.sh
src/main/resources/scripts/setUpPublic1Cluster.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow パブリッククラスターに Telegram Camel インテグレーションをデプロイする
このステップでは、
TelegramRouteコンポーネントで使用するために、データベース認証情報を含むシークレットを Kubernetes にインストールします。その後、Kamel を使用してTelegramRouteを Kubernetes クラスターにデプロイします。このコンポーネントは 3 秒ごとにデータベースをポーリングし、最後の 3 秒間に挿入された結果を収集します。public2 のコンソール:
src/main/resources/scripts/setUpPublic2Cluster.sh
src/main/resources/scripts/setUpPublic2Cluster.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションをテストする
全体の流れを確認するには、
skupperという単語を含むツイートを投稿する必要があります。その後、Telegram チャネルにNew feedback about Skupperというタイトルの新しいメッセージが表示されます。private1 のコンソール:
kubectl attach pg-shell -c pg-shell -i -t psql --dbname=postgresdb SELECT * FROM twfeedback;
kubectl attach pg-shell -c pg-shell -i -t psql --dbname=postgresdb SELECT * FROM twfeedback;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力サンプル
id | sigthning | created --------------------------------------+-----------------+---------------------------- 95655229-747a-4787-8133-923ef0a1b2ca | Testing skupper | 2022-03-10 19:35:08.412542
id | sigthning | created --------------------------------------+-----------------+---------------------------- 95655229-747a-4787-8133-923ef0a1b2ca | Testing skupper | 2022-03-10 19:35:08.412542Copy to Clipboard Copied! Toggle word wrap Toggle overflow public1 のコンソール:
kamel logs twitter-route
kamel logs twitter-routeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力サンプル
"[1] 2022-03-10 19:35:08,397 INFO [postgresql-sink-1] (Camel (camel-1) thread #0 - twitter-search://skupper) Testing skupper"
"[1] 2022-03-10 19:35:08,397 INFO [postgresql-sink-1] (Camel (camel-1) thread #0 - twitter-search://skupper) Testing skupper"Copy to Clipboard Copied! Toggle word wrap Toggle overflow