第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
-
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
public1 のコンソール:
export KUBECONFIG=~/.kube/config-public1
public2 のコンソール:
export KUBECONFIG=~/.kube/config-public2
クラスターにアクセスする
クラスターにアクセスする方法は、Kubernetes プロバイダーによって異なります。選択したプロバイダーの手順を確認し、それを使用して各コンソールセッションのアクセスを認証および設定します。詳細は、次のリンクを参照してください。
名前空間を設定する
kubectl create namespace
を使用して、使用する名前空間を作成します (または既存の名前空間を使用します)。kubectl config set-context
を使用して、各セッションの現在の名前空間を設定します。private1 のコンソール:
kubectl create namespace private1 kubectl config set-context --current --namespace private1
public1 のコンソール:
kubectl create namespace public1 kubectl config set-context --current --namespace public1
public2 のコンソール:
kubectl create namespace public2 kubectl config set-context --current --namespace public2
名前空間に Skupper をインストールする
skupper init
コマンドは、現在の名前空間に Skupper ルーターとサービスコントローラーをインストールします。各 namespace でskupper init
コマンドを実行します。private1 のコンソール:
skupper init
public1 のコンソール:
skupper init
public2 のコンソール:
skupper init
名前空間のステータスを確認する
各コンソールで
skupper status
を使用して、Skupper がインストールされていることを確認します。private1 のコンソール:
skupper status
public1 のコンソール:
skupper status
public2 のコンソール:
skupper status
名前空間ごとに次のような出力が表示されます。
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 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
public2 のコンソール:
skupper link create ~/public1.token skupper link status --wait 30 skupper token create ~/public2.token
private1 のコンソール:
skupper link create ~/public1.token skupper link create ~/public2.token skupper link status --wait 30
コンソールセッションが異なるマシン上にある場合は、トークンを転送するために
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
ツイートを保存するテーブルを作成する
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));
パブリッククラスターに Twitter Camel インテグレーションをデプロイする
まず、kamel を使用して
TwitterRoute
コンポーネントを Kubernetes にデプロイする必要があります。このコンポーネントは、5000 ミリ秒ごとに Twitter をポーリングして、skupper
という単語を含むツイートを検索します。その後、postgresql-sink
に結果を送信します。この postgresql-sink は、同じクラスター内にインストールしておく必要があります。kamelet シンクは、結果を postgreSQL データベースに挿入します。public1 のコンソール:
src/main/resources/scripts/setUpPublic1Cluster.sh
パブリッククラスターに Telegram Camel インテグレーションをデプロイする
このステップでは、
TelegramRoute
コンポーネントで使用するために、データベース認証情報を含むシークレットを Kubernetes にインストールします。その後、Kamel を使用してTelegramRoute
を Kubernetes クラスターにデプロイします。このコンポーネントは 3 秒ごとにデータベースをポーリングし、最後の 3 秒間に挿入された結果を収集します。public2 のコンソール:
src/main/resources/scripts/setUpPublic2Cluster.sh
アプリケーションをテストする
全体の流れを確認するには、
skupper
という単語を含むツイートを投稿する必要があります。その後、Telegram チャネルにNew feedback about Skupper
というタイトルの新しいメッセージが表示されます。private1 のコンソール:
kubectl attach pg-shell -c pg-shell -i -t psql --dbname=postgresdb SELECT * FROM twfeedback;
出力サンプル
id | sigthning | created --------------------------------------+-----------------+---------------------------- 95655229-747a-4787-8133-923ef0a1b2ca | Testing skupper | 2022-03-10 19:35:08.412542
public1 のコンソール:
kamel logs twitter-route
出力サンプル
"[1] 2022-03-10 19:35:08,397 INFO [postgresql-sink-1] (Camel (camel-1) thread #0 - twitter-search://skupper) Testing skupper"