13.2. リダイレクトモードでの Egress ルーターのデプロイ


Egress ルーターをデプロイして、独自の予約済み送信元 IP アドレスから 1 つ以上の宛先 IP アドレスにトラフィックをリダイレクトできます。

Egress ルーターを追加した後に、予約済み送信元 IP アドレスを使用する必要のあるクライアント Pod は、宛先 IP に直接接続するのでなく、Egress ルーターに接続するように変更される必要があります。

前提条件

  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてログインしている。

手順

  1. Egress ルーター定義の作成
  2. 他の Pod が Egress ルーター Pod の IP アドレスを見つられるようにするには、以下の例のように、Egress ルーターを使用するサービスを作成します。

    apiVersion: v1
    kind: Service
    metadata:
      name: egress-1
    spec:
      ports:
      - name: web-app
        protocol: TCP
        port: 8080
      type: ClusterIP
      selector:
        app: egress-router-cni 
    1
    Copy to Clipboard Toggle word wrap
    1
    Egress ルーターのラベルを指定します。表示されている値は Cluster Network Operator によって追加され、設定不可能です。

    サービスの作成後に、Pod はサービスに接続できます。Egress ルーター Pod は、トラフィックを宛先 IP アドレスの対応するポートにリダイレクトします。接続は、予約された送信元 IP アドレスを起点とします。

検証

Cluster Network Operator が Egress ルーターを起動したことを確認するには、以下の手順を実行します。

  1. Operator が Egress ルーター用に作成したネットワークアタッチメント定義を表示します。

    $ oc get network-attachment-definition egress-router-cni-nad
    Copy to Clipboard Toggle word wrap

    このネットワークアタッチメント定義の名前は設定できません。

    出力例

    NAME                    AGE
    egress-router-cni-nad   18m
    Copy to Clipboard Toggle word wrap

  2. Egress ルーター Pod のデプロイメントを表示します。

    $ oc get deployment egress-router-cni-deployment
    Copy to Clipboard Toggle word wrap

    デプロイメントの名前は設定できません。

    出力例

    NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
    egress-router-cni-deployment   1/1     1            1           18m
    Copy to Clipboard Toggle word wrap

  3. Egress ルーター Pod のステータスを表示します。

    $ oc get pods -l app=egress-router-cni
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                            READY   STATUS    RESTARTS   AGE
    egress-router-cni-deployment-575465c75c-qkq6m   1/1     Running   0          18m
    Copy to Clipboard Toggle word wrap

  4. Egress ルーター Pod のログとルーティングテーブルを表示します。
  1. Egress ルーター Pod のノード名を取得します。

    $ POD_NODENAME=$(oc get pod -l app=egress-router-cni -o jsonpath="{.items[0].spec.nodeName}")
    Copy to Clipboard Toggle word wrap
  2. ターゲットノードのデバッグセッションに入ります。この手順は、<node_name>-debug というデバッグ Pod をインスタンス化します。

    $ oc debug node/$POD_NODENAME
    Copy to Clipboard Toggle word wrap
  3. /host をデバッグシェル内の root ディレクトリーとして設定します。デバッグ Pod は、Pod 内の /host にホストのルートファイルシステムをマウントします。ルートディレクトリーを /host に変更すると、ホストの実行可能パスに含まれるバイナリーを実行できます。

    # chroot /host
    Copy to Clipboard Toggle word wrap
  4. chroot 環境コンソール内から、Egress ルーターログを表示します。

    # cat /tmp/egress-router-log
    Copy to Clipboard Toggle word wrap

    出力例

    2021-04-26T12:27:20Z [debug] Called CNI ADD
    2021-04-26T12:27:20Z [debug] Gateway: 192.168.12.1
    2021-04-26T12:27:20Z [debug] IP Source Addresses: [192.168.12.99/24]
    2021-04-26T12:27:20Z [debug] IP Destinations: [80 UDP 10.0.0.99/30 8080 TCP 203.0.113.26/30 80 8443 TCP 203.0.113.27/30 443]
    2021-04-26T12:27:20Z [debug] Created macvlan interface
    2021-04-26T12:27:20Z [debug] Renamed macvlan to "net1"
    2021-04-26T12:27:20Z [debug] Adding route to gateway 192.168.12.1 on macvlan interface
    2021-04-26T12:27:20Z [debug] deleted default route {Ifindex: 3 Dst: <nil> Src: <nil> Gw: 10.128.10.1 Flags: [] Table: 254}
    2021-04-26T12:27:20Z [debug] Added new default route with gateway 192.168.12.1
    2021-04-26T12:27:20Z [debug] Added iptables rule: iptables -t nat PREROUTING -i eth0 -p UDP --dport 80 -j DNAT --to-destination 10.0.0.99
    2021-04-26T12:27:20Z [debug] Added iptables rule: iptables -t nat PREROUTING -i eth0 -p TCP --dport 8080 -j DNAT --to-destination 203.0.113.26:80
    2021-04-26T12:27:20Z [debug] Added iptables rule: iptables -t nat PREROUTING -i eth0 -p TCP --dport 8443 -j DNAT --to-destination 203.0.113.27:443
    2021-04-26T12:27:20Z [debug] Added iptables rule: iptables -t nat -o net1 -j SNAT --to-source 192.168.12.99
    Copy to Clipboard Toggle word wrap

    この手順で説明されているように、EgressRouter オブジェクトを作成して Egress ルーターを起動する場合、ロギングファイルの場所とロギングレベルは設定できません。

  5. chroot 環境コンソール内で、コンテナー ID を取得します。

    # crictl ps --name egress-router-cni-pod | awk '{print $1}'
    Copy to Clipboard Toggle word wrap

    出力例

    CONTAINER
    bac9fae69ddb6
    Copy to Clipboard Toggle word wrap

  6. コンテナーのプロセス ID を判別します。この例では、コンテナー ID は bac9fae69ddb6 です。

    # crictl inspect -o yaml bac9fae69ddb6 | grep 'pid:' | awk '{print $2}'
    Copy to Clipboard Toggle word wrap

    出力例

    68857
    Copy to Clipboard Toggle word wrap

  7. コンテナーのネットワーク namespace を入力します。

    # nsenter -n -t 68857
    Copy to Clipboard Toggle word wrap
  8. ルーティングテーブルを表示します。

    # ip route
    Copy to Clipboard Toggle word wrap

    以下の出力例では、net1 ネットワークインターフェイスはデフォルトのルートです。クラスターネットワークのトラフィックは eth0 ネットワークインターフェイスを使用します。192.168.12.0/24 ネットワークのトラフィックは、net1 ネットワークインターフェイスを使用し、予約された送信元 IP アドレス 192.168.12.99 を起点とします。Pod は他のすべてのトラフィックを IP アドレス 192.168.12.1 のゲートウェイにルーティングします。サービスネットワークのルーティングは表示されません。

    出力例

    default via 192.168.12.1 dev net1
    10.128.10.0/23 dev eth0 proto kernel scope link src 10.128.10.18
    192.168.12.0/24 dev net1 proto kernel scope link src 192.168.12.99
    192.168.12.1 dev net1
    Copy to Clipboard Toggle word wrap

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

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

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat