OpenShift を使用したサービスネットワークの作成

Red Hat AMQ 2021.Q2

AMQ Interconnect 2.0 テクノロジープレビューでの使用

概要

このチュートリアルでは、OpenShift で AMQ Interconnect サイトを作成し、サービスネットワークを構築する方法を説明します。

前書き

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。これは大規模な取り組みであるため、これらの変更は今後の複数のリリースで段階的に実施されます。詳細は、Red Hat CTO である Chris Wright のメッセージをご覧ください。

重要

AMQ Interconnect 2.0 テクノロジープレビューの機能は、Red Hat の本番環境のサービスレベルアグリーメント (SLA) ではサポートされず、機能的に完全ではないことがあります。Red Hat では、これらについて実稼働環境での使用を推奨していません。

テクノロジープレビューの機能は、最新の技術をいち早く提供して、開発段階で機能のテストやフィードバックの収集を可能にするために提供されます。Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、https://access.redhat.com/ja/support/offerings/techpreview を参照してください。

第1章 OpenShift を使用したサービスネットワークの作成

このチュートリアルでは、skupper コマンドラインインターフェース (CLI) を使用して、OpenShift クラスターにバックエンドサービスがある OpenShift クラスターでフロントエンドサービスを接続する方法を説明します。

前提条件

  • 2 つの OpenShift クラスターのプロジェクトに対するアクセス権。cluster-admin アクセスは必要ありません。
  • OpenShift クラスターの 1 つが他のクラスターからアドレス指定できる。

このチュートリアルでは、以下の namespace に接続する方法について説明します。

  • west - フロントエンドサービスを実行します。これは通常パブリッククラスターです。
  • east - バックエンドサービスを実行します。

1.1. AMQ Interconnect 2.0 の概要

Interconnect 2.0 では、ハイブリッドクラウド全体でサービスをリンクするサービスネットワークが導入されました。サービスネットワークは、異なるネットワークの場所で実行中のサービス間で通信を可能にします。これにより、地理的に分散したサービスが同じサイトですべて実行されているかのように接続できます。

たとえば、フロントエンドをパブリック OpenShift クラスターに、バックエンドをプライベート OpenShift クラスターにデプロイして、サービスネットワークに接続できます。

サービスネットワークは、以下の機能を提供します。

  • セキュリティー (デフォルト)。すべてのサイトトラフィックは、プライベートかつ専用の認証局 (CA) を使用して相互 TLS によって保護されます。
  • プライベートクラスターの場合でも、OpenShift クラスター間の接続が容易になる。
  • サービスネットワークが変更なしで既存の TCP ベースのアプリケーションをサポートする。
  • サービスネットワークコンソールを使用して、複数の OpenShift クラスターに分散されるアプリケーショントラフィックを監視する。

skupper CLI を使用してサービスネットワークをデプロイし、管理します。

1.2. skupper CLI のインストール

skupper コマンドラインインターフェース (CLI) をインストールすると、AMQ Interconnect を簡単に使用開始できます。

手順

  1. サブスクリプションがアクティベートされ、システムが登録されていることを確認します。
  2. 必要なリポジトリーにサブスクライブします。

    Red Hat Enterprise Linux 7
    $ sudo subscription-manager repos --enable=interconnect-2-for-rhel-7-server-rpms
    Red Hat Enterprise Linux 8
    $ sudo subscription-manager repos --enable=interconnect-2-for-rhel-8-x86_64-rpms
  3. yum または dnf コマンドを使用して skupper パッケージをインストールします。

    $ sudo yum install skupper
  4. インストールを確認します。

    $ skupper version
    client version 0.6.0-redhat-interconnect-2.0.0

1.3. 端末セッションの設定

この手順では、AMQ Interconnect を別のクラスターに設定する時に問題を回避するような設定を端末セッションが使用するように設定する方法を説明します。

以下の表は、ターミナルセッションの設定方法を示しています。

表1.1 端末セッション

west 端末セッションeast 端末セッション
 $ oc project
 west
 $ oc project
 east

前提条件

  • OpenShift CLI がインストールされている。oc のインストール方法については、OpenShift CLI のドキュメント を参照してください。
注記

OpenShift 4.6 以降では、Web ターミナル のドキュメントで説明されているように、Web ターミナルを使用して以下の手順を実行します。

手順

  1. west namespace で作業するように端末セッションを開始し、KUBECONFIG 環境変数を設定します。

    $ export KUBECONFIG=$HOME/.kube/config-west

    このセッションは、後で west 端末セッションと呼ばれます。

  1. east namespace で作業するように端末セッションを開始し、KUBECONFIG 環境変数を設定します。

    $ export KUBECONFIG=$HOME/.kube/config-east

    このセッションは、後で east 端末セッションと呼ばれます。

  2. 各ターミナルセッションで、以下のように OpenShift クラスターにログインします。

     $ oc login

1.4. 両方のクラスターへのサービスネットワークルーターのインストール

  1. west 端末セッションで以下を行います。

    1. west プロジェクト (namespace) を作成します。

      $ oc new-project west
    2. サービスネットワークルーターを作成します。

      $ skupper init
    3. サイトのステータスを確認します。

      $ skupper status

      出力は以下のようになります。

      Skupper enabled for namespace 'west'. It is not connected to any other sites.
  2. east 端末セッションで以下を行います。

    1. east プロジェクト (namespace) を作成します。

      $ oc new-project east
    2. サービスネットワークルーターを作成します。

      $ skupper init
    3. サイトのステータスを確認します。

      $ skupper status

      出力は以下のようになります。

      Skupper enabled for namespace 'east'. It is not connected to any other sites.

1.5. サービスネットワーク作成用の namespace の接続

サービスネットワークルーターがインストールされている場合には、そのルーターを相互に接続し、サービスネットワーク全体でサービスを共有できます。

手順

  1. west 端末セッションで、west namespace への接続を許可する接続トークンを作成します。

    $ skupper token create $HOME/secret.yaml

    このコマンドは、ホームディレクトリーに secret.yaml ファイルを作成し、セキュアな接続の作成に使用できます。

  2. east 端末セッションで、トークンを使用して west namespace への接続を作成します。

    $ skupper link create $HOME/secret.yaml
  3. west 端末セッションからサイトのステータスを確認します。

    $ skupper status

    出力は以下のようになります。

    Skupper is enabled for namespace "west" in interior mode. It is connected to 1 other site. It has no exposed services.
    The site console url is:  https://<skupper-url>
    The credentials for internal console-auth mode are held in secret: 'skupper-console-users'

1.6. フロントエンドサービスの作成

フロントエンドサービスは、バックエンドアプリケーションのメッセージから表示する単純な Python アプリケーションです。

手順

west 端末セッションですべてのタスクを実行します。

  1. フロントエンドサービスをデプロイします。

    $ oc create deployment hello-world-frontend --image quay.io/skupper/hello-world-frontend
  2. フロントエンドデプロイメントをクラスターサービスとして公開します。

    $ oc expose deployment hello-world-frontend --port 8080 --type LoadBalancer
  3. フロントエンドのルートを作成します。

    $ oc expose svc/hello-world-frontend
  4. フロントエンドのルートを確認します。

    1. ルートの詳細を取得します。

      $  oc get routes

      出力は以下のようになります。

      NAME                   HOST/PORT
      hello-world-frontend   <frontend-url>
    2. ブラウザーで <frontend-url> の値に移動すると、フロントエンドが バックエンドと通信できないため、以下のようなメッセージが表示されます。

      Trouble! HTTPConnectionPool(host='hello-world-backend', port=8080): Max retries exceeded with url: /api/hello (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fbfcdf0d1d0>: Failed to establish a new connection: [Errno -2] Name or service not known'))

      この状況を解決するには、バックエンドサービスを作成し、サービスネットワーク上で利用可能にする必要があります。

1.7. バックエンドサービスを作成してそのサービスをサービスネットワーク上で利用可能にする手順

バックエンドサービスは east namespace で実行され、デフォルトではサービスネットワークで利用できません。skupper コマンドを使用して、サービスネットワークのすべての namespace にサービスを公開します。バックエンドアプリケーションは、メッセージをフロントエンドアプリケーションに渡す単純な Python アプリケーションです。

手順

  1. バックエンドサービスを east 端末セッションにデプロイします。

    $ oc create deployment hello-world-backend --image quay.io/skupper/hello-world-backend
  2. サービスネットワーク上で、east 端末セッションからバックエンドサービスを公開します。

    $ skupper expose deployment hello-world-backend --port 8080 --protocol tcp
  3. west 端末セッションからサイトのステータスを確認します。

    $ skupper status

    出力は以下のようになります。

    Skupper is enabled for namespace "west" in interior mode. It is connected to 1 other site. It has 1 exposed service.

    サービスは east namespace から公開されます。

  4. west 端末セッションでフロントエンドルートを確認します。

    1. ルートの詳細を取得します。

      $  oc get routes

      出力は以下のようになります。

      NAME                   HOST/PORT
      hello-world-frontend   <frontend-url>
    2. ブラウザーで <frontend-url> の値に移動すると、以下のようなメッセージが表示されます。

      I am the frontend.  The backend says 'Hello from hello-world-backend-78cd4d7d8c-plrr9 (1)'.

これは、フロントエンドが、別の OpenShift クラスターからサービスネットワーク上でバックエンドサービスを呼び出す方法を示しています。

1.8. サービスネットワークの終了

この手順では、作成したサービスネットワークを削除する方法を説明します。

  1. west 端末セッションから west namespace を削除します。

    $  oc delete project west
  2. east namespace を east 端末セッションから削除します。

    $  oc delete project east

改訂日時: 2021-08-22 20:23:33 +1000