12.2. リダイレクトモードでの Egress ルーターのデプロイ
Egress ルーターをデプロイして、独自の予約済み送信元 IP アドレスから 1 つ以上の宛先 IP アドレスにトラフィックをリダイレクトできます。
Egress ルーターを追加した後に、予約済み送信元 IP アドレスを使用する必要のあるクライアント Pod は、宛先 IP に直接接続するのでなく、Egress ルーターに接続するように変更される必要があります。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 -
cluster-admin権限を持つユーザーとしてログインしている。
手順
- Egress ルーター定義の作成
他の Pod が Egress ルーター Pod の IP アドレスを見つられるようにするには、以下の例のように、Egress ルーターを使用するサービスを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Egress ルーターのラベルを指定します。表示されている値は Cluster Network Operator によって追加され、設定不可能です。
サービスの作成後に、Pod はサービスに接続できます。Egress ルーター Pod は、トラフィックを宛先 IP アドレスの対応するポートにリダイレクトします。接続は、予約された送信元 IP アドレスを起点とします。
検証
Cluster Network Operator が Egress ルーターを起動したことを確認するには、以下の手順を実行します。
Operator が Egress ルーター用に作成したネットワークアタッチメント定義を表示します。
oc get network-attachment-definition egress-router-cni-nad
$ oc get network-attachment-definition egress-router-cni-nadCopy to Clipboard Copied! Toggle word wrap Toggle overflow このネットワークアタッチメント定義の名前は設定できません。
出力例
NAME AGE egress-router-cni-nad 18m
NAME AGE egress-router-cni-nad 18mCopy to Clipboard Copied! Toggle word wrap Toggle overflow Egress ルーター Pod のデプロイメントを表示します。
oc get deployment egress-router-cni-deployment
$ oc get deployment egress-router-cni-deploymentCopy to Clipboard Copied! Toggle word wrap Toggle overflow デプロイメントの名前は設定できません。
出力例
NAME READY UP-TO-DATE AVAILABLE AGE egress-router-cni-deployment 1/1 1 1 18m
NAME READY UP-TO-DATE AVAILABLE AGE egress-router-cni-deployment 1/1 1 1 18mCopy to Clipboard Copied! Toggle word wrap Toggle overflow Egress ルーター Pod のステータスを表示します。
oc get pods -l app=egress-router-cni
$ oc get pods -l app=egress-router-cniCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE egress-router-cni-deployment-575465c75c-qkq6m 1/1 Running 0 18m
NAME READY STATUS RESTARTS AGE egress-router-cni-deployment-575465c75c-qkq6m 1/1 Running 0 18mCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Egress ルーター Pod のログとルーティングテーブルを表示します。
Egress ルーター Pod のノード名を取得します。
POD_NODENAME=$(oc get pod -l app=egress-router-cni -o jsonpath="{.items[0].spec.nodeName}")$ POD_NODENAME=$(oc get pod -l app=egress-router-cni -o jsonpath="{.items[0].spec.nodeName}")Copy to Clipboard Copied! Toggle word wrap Toggle overflow ターゲットノードのデバッグセッションに入ります。この手順は、
<node_name>-debugというデバッグ Pod をインスタンス化します。oc debug node/$POD_NODENAME
$ oc debug node/$POD_NODENAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow /hostをデバッグシェル内の root ディレクトリーとして設定します。デバッグ Pod は、Pod 内の/hostにホストのルートファイルシステムをマウントします。ルートディレクトリーを/hostに変更すると、ホストの実行可能パスに含まれるバイナリーを実行できます。chroot /host
# chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow chroot環境コンソール内から、Egress ルーターログを表示します。cat /tmp/egress-router-log
# cat /tmp/egress-router-logCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この手順で説明されているように、
EgressRouterオブジェクトを作成して Egress ルーターを起動する場合、ロギングファイルの場所とロギングレベルは設定できません。chroot環境コンソール内で、コンテナー ID を取得します。crictl ps --name egress-router-cni-pod | awk '{print $1}'# crictl ps --name egress-router-cni-pod | awk '{print $1}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
CONTAINER bac9fae69ddb6
CONTAINER bac9fae69ddb6Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーのプロセス ID を判別します。この例では、コンテナー ID は
bac9fae69ddb6です。crictl inspect -o yaml bac9fae69ddb6 | grep 'pid:' | awk '{print $2}'# crictl inspect -o yaml bac9fae69ddb6 | grep 'pid:' | awk '{print $2}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
68857
68857Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーのネットワーク namespace を入力します。
nsenter -n -t 68857
# nsenter -n -t 68857Copy to Clipboard Copied! Toggle word wrap Toggle overflow ルーティングテーブルを表示します。
ip route
# ip routeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の出力例では、
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
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 net1Copy to Clipboard Copied! Toggle word wrap Toggle overflow