17.4. ロードバランサーを使用した ingress クラスターの設定

OpenShift Container Platform は、クラスター内で実行されるサービスを使ってクラスター外からの通信を可能にする方法を提供します。この方法では、ロードバランサーを使用します。

17.4.1. ロードバランサーを使用したトラフィックのクラスターへの送信

特定の外部 IP アドレスを必要としない場合、ロードバランサーサービスを OpenShift Container Platform クラスターへの外部アクセスを許可するよう設定することができます。

ロードバランサーサービスは固有の IP を割り当てます。ロードバランサーには単一の edge ルーター IP があります (これは仮想 IP (VIP) の場合もありますが、初期の負荷分散では単一マシンになります。

注記

プールが設定される場合、これはクラスター管理者によってではなく、インフラストラクチャーレベルで実行されます。

注記

このセクションの手順では、クラスターの管理者が事前に行っておく必要のある前提条件があります。

17.4.2. 前提条件

以下の手順を開始する前に、管理者は以下の条件を満たしていることを確認する必要があります。

  • 要求がクラスターに到達できるように、クラスターネットワーク環境に対して外部ポートをセットアップします。
  • クラスター管理者ロールを持つユーザーが 1 名以上いることを確認します。このロールをユーザーに追加するには、以下のコマンドを実行します。

    $ oc adm policy add-cluster-role-to-user cluster-admin username
  • OpenShift Container Platform クラスターを、1 つ以上のマスターと 1 つ以上のノード、およびクラスターへのネットワークアクセスのあるクラスター外のシステムと共に用意します。この手順では、外部システムがクラスターと同じサブセットにあることを前提とします。別のサブセットの外部システムに必要な追加のネットワーク設定については、このトピックでは扱いません。

17.4.3. プロジェクトおよびサービスの作成

公開するプロジェクトおよびサービスが存在しない場合、最初にプロジェクトを作成し、次にサービスを作成します。

プロジェクトおよびサービスがすでに存在する場合は、サービスを公開してルートを作成する手順に進みます。

前提条件

  • クラスター管理者として oc CLI をインストールし、ログインします。

手順

  1. oc new-project コマンドを実行して、サービス用の新しいプロジェクトを作成します。

    $ oc new-project myproject
  2. oc new-app コマンドを使用してサービスを作成します。

    $ oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git
  3. サービスが作成されたことを確認するには、以下のコマンドを実行します。

    $ oc get svc -n myproject

    出力例

    NAME        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
    nodejs-ex   ClusterIP   172.30.197.157   <none>        8080/TCP   70s

    デフォルトで、新規サービスには外部 IP アドレスがありません。

17.4.4. ルートの作成によるサービスの公開

oc expose コマンドを使用して、サービスをルートとして公開することができます。

手順

サービスを公開するには、以下を実行します。

  1. OpenShift Container Platform にログインします。
  2. 公開するサービスが置かれているプロジェクトにログインします。

    $ oc project myproject
  3. oc expose service コマンドを実行して、ルートを公開します。

    $ oc expose service nodejs-ex

    出力例

    route.route.openshift.io/nodejs-ex exposed

  4. サービスが公開されていることを確認するには、cURL などのツールを使って、クラスター外からサービスにアクセスできることを確認します。

    1. ルートのホスト名を調べるには、oc get route コマンドを使用します。

      $ oc get route

      出力例

      NAME        HOST/PORT                        PATH   SERVICES    PORT       TERMINATION   WILDCARD
      nodejs-ex   nodejs-ex-myproject.example.com         nodejs-ex   8080-tcp                 None

    2. cURL を使用して、ホストが GET 要求に応答することを確認します。

      $ curl --head nodejs-ex-myproject.example.com

      出力例

      HTTP/1.1 200 OK
      ...

17.4.5. ロードバランサーサービスの作成

以下の手順を使用して、ロードバランサーサービスを作成します。

前提条件

  • 公開するプロジェクトとサービスがあること。

手順

ロードバランサーサービスを作成するには、以下を実行します。

  1. OpenShift Container Platform にログインします。
  2. 公開するサービスが置かれているプロジェクトを読み込みます。

    $ oc project project1
  3. コントロールプレーンノード (別名マスターノード) でテキストファイルを開き、以下のテキストを貼り付け、必要に応じてファイルを編集します。

    ロードバランサー設定ファイルのサンプル

    apiVersion: v1
    kind: Service
    metadata:
      name: egress-2 1
    spec:
      ports:
      - name: db
        port: 3306 2
      loadBalancerIP:
      loadBalancerSourceRanges: 3
      - 10.0.0.0/8
      - 192.168.0.0/16
      type: LoadBalancer 4
      selector:
        name: mysql 5

    1
    ロードバランサーサービスの説明となる名前を入力します。
    2
    公開するサービスがリッスンしている同じポートを入力します。
    3
    特定の IP アドレスの一覧を入力して、ロードバランサー経由でトラフィックを制限します。クラウドプロバイダーがこの機能に対応していない場合、このフィールドは無視されます。
    4
    タイプに loadbalancer を入力します。
    5
    サービスの名前を入力します。
    注記

    ロードバランサーを介して特定の IP アドレスへのトラフィックを制限するには、loadBalancerSourceRanges フィールドを設定するのではなく、service.beta.kubernetes.io/load-balancer-source-ranges アノテーションを使用することが推奨されます。アノテーションを使用すると、OpenShift API により簡単に移行でき、今後のリリースで実装されます。

  4. ファイルを保存し、終了します。
  5. 以下のコマンドを実行してサービスを作成します。

    $ oc create -f <file-name>

    以下に例を示します。

    $ oc create -f mysql-lb.yaml
  6. 以下のコマンドを実行して新規サービスを表示します。

    $ oc get svc

    出力例

    NAME       TYPE           CLUSTER-IP      EXTERNAL-IP                             PORT(S)          AGE
    egress-2   LoadBalancer   172.30.22.226   ad42f5d8b303045-487804948.example.com   3306:30357/TCP   15m

    有効にされたクラウドプロバイダーがある場合、サービスには外部 IP アドレスが自動的に割り当てられます。

  7. マスターで cURL などのツールを使用し、パブリック IP アドレスを使用してサービスに到達できることを確認します。

    $ curl <public-ip>:<port>

    以下に例を示します。

    $ curl 172.29.121.74:3306

    このセクションの例では、クライアントアプリケーションを必要とする MySQL サービスを使用しています。Got packets out of order のメッセージと共に文字ストリングを取得する場合は、このサービスに接続していることになります。

    MySQL クライアントがある場合は、標準 CLI コマンドでログインします。

    $ mysql -h 172.30.131.89 -u admin -p

    出力例

    Enter password:
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    
    MySQL [(none)]>