第8章 患者ポータル
パブリッククラウドで実行され、データをプライベートデータベースに保存する、シンプルなデータベースベースの Web アプリケーションです。
この例は、Skupper を使用してクラウドプロバイダー、データセンター、エッジサイト間でサービスを接続できるさまざまな方法を紹介する 一連の例 の一部です。
概要
この例は、Skupper を使用して、パブリックインターネットに公開せずにリモートサイトのデータベースにアクセスする方法を示す、データベースをバックアップしたシンプルな Web アプリケーションです。
これには、3 つのサービスが含まれます。
- プライベートデータセンター内のベアメタルまたは仮想マシン上で実行される PostgreSQL データベース。
- プライベートデータセンターの Kubernetes 上で実行される支払い処理サービス。
- パブリッククラウドの Kubernetes 上で実行される Web フロントエンドサービス。PostgreSQL データベースと支払い処理サービスを使用します。
この例では、private
と public
という 2 つの Kubernetes 名前空間を使用して、プライベートデータセンター内の Kubernetes クラスターとパブリッククラウド内のクラスターを表します。Podman を使用してデータベースを実行します。
手順
- この例のリポジトリーのクローンを作成する
- Skupper コマンドラインツールをインストールする
- Kubernetes 名前空間を設定する
- Podman ネットワークを設定する
- アプリケーションのデプロイ
- サイトを作成する
- サイトをリンクする
- アプリケーションサービスを公開する
- この例のリポジトリーをクローンします。https://skupper.io/examples/index.html から適切な GitHub リポジトリーに移動し、リポジトリーをクローンします。
Skupper コマンドラインツールをインストールします。
この例では、Skupper コマンドラインツールを使用して Skupper をデプロイします。開発環境ごとに
skupper
コマンドを 1 回だけインストールする必要があります。CLI のインストールの詳細は、インストール を参照してください。設定されたシステムの場合は、次のコマンドを使用します。
sudo dnf install skupper-cli
Kubernetes 名前空間を設定します。
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-private # Enter your provider-specific login command kubectl create namespace private kubectl config set-context --current --namespace private
Podman ネットワークを設定します。
新しいターミナルウィンドウを開き、
SKUPPERPLATFORM
環境変数をpodman
に設定します。これにより、このターミナルセッションの Skupper プラットフォームが Podman に設定されます。podman network create
を使用して、Skupper が使用する Podman ネットワークを作成します。systemctl
を使用して Podman API サービスを有効にします。Podman:
export SKUPPERPLATFORM=podman podman network create skupper systemctl --user enable --now podman.socket
systemctl
コマンドが機能しない場合は、代わりにpodman system service
コマンドを試してください。podman system service --time=0 unix://$XDGRUNTIMEDIR/podman/podman.sock &
アプリケーションをデプロイします。
kubectl apply
を使用して、フロントエンドと支払いプロセッサーを Kubernetes にデプロイします。podman run
を使用して、ローカルマシンでデータベースを起動します。注記Skupper がサービスにアクセスするために作成するコンテナーとの衝突を避けるために、実行中のコンテナーに
--name
を使用して名前を付けることが重要です。注記podman run
コマンドでは--network skupper
を使用する必要があります。パブリック:
kubectl apply -f frontend/kubernetes.yaml
プライベート:
kubectl apply -f payment-processor/kubernetes.yaml
Podman:
podman run --name database-target --network skupper --detach --rm -p 5432:5432 quay.io/skupper/patient-portal-database
サイトを作成します。
パブリック:
skupper init
プライベート:
skupper init --ingress none
Podman:
skupper init --ingress none
サイトをリンクします。
リンクを作成するには、
skupper token create
とskupper link create
の 2 つのskupper
コマンドを組み合わせて使用する必要があります。skupper token create
コマンドは、リンクを作成する権限を示す秘密トークンを生成します。トークンにはリンクの詳細も含まれます。次に、リモートサイトで、skupper link create
コマンドを実行すると、トークンを使用して、トークンを生成したサイトへのリンクを作成します。注記リンクトークンは実際にはシークレットです。トークンがある場合は、サイトにリンクできます。信頼できる人だけがアクセスできるようにしてください。
まず、パブリックサイトの
skupper token create
を使用してトークンを生成します。次に、プライベートサイトでskupper link create
を使用して、サイトをリンクします。パブリック:
skupper token create --uses 2 ~/secret.token
プライベート:
skupper link create ~/secret.token
Podman:
skupper link create ~/secret.token
ターミナルセッションが異なるマシン上にある場合は、トークンを安全に転送するために
scp
または同様のツールを使用する必要がある場合があります。デフォルトでは、トークンは 1 回の使用後、または作成後 15 分後に期限切れになります。アプリケーションサービスを公開します。
プライベートでは、
skupper expose
を使用して支払い処理サービスを公開します。Podman では、
skupper service create
とskupper service bind
を使用して、Skupper ネットワーク上のデータベースを公開します。次に、パブリックで
skupper service create
を使用して利用できるようにします。注記Podman サイトは、リモートサイトにサービスを自動的に複製しません。サービスを利用可能にする各サイトで
skupper service create
を使用する必要があります。プライベート:
skupper expose deployment/payment-processor --port 8080
Podman:
skupper service create database 5432 skupper service bind database host database-target --target-port 5432
パブリック:
skupper service create database 5432
フロントエンドにアクセスします。
アプリケーションを使用およびテストするには、フロントエンドへの外部アクセスが必要です。
--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 service/frontend exposed $ kubectl get service/frontend NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE frontend LoadBalancer 10.103.232.28 <external-ip> 8080:30407/TCP 15s $ curl http://<external-ip>:8080/api/health OK
すべてが正常であれば、ブラウザーで
http://<external-ip>:8080/
に移動して Web インターフェイスにアクセスできるようになります。