15.12.3. 以重定向模式部署出口路由器 pod


您可以部署出口路由器 Pod,将其自身保留源 IP 地址的流量重定向到一个或多个目标 IP 地址。

添加出口路由器 pod 后,需要使用保留源 IP 地址的客户端 pod 必须修改为连接到出口路由器,而不是直接连接到目标 IP。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 特权的用户身份登录。

流程

  1. 创建网络附加定义。
  2. 创建出口路由器 pod。
  3. 为确保其他 pod 可以找到出口路由器 pod 的 IP 地址,请创建一个使用出口路由器 Pod 的服务,如下例所示:

    apiVersion: v1
    kind: Service
    metadata:
      name: egress-1
    spec:
      ports:
      - name: database
        protocol: TCP
        port: 3306
      type: ClusterIP
      selector:
        name: egress-router-pod
    Copy to Clipboard Toggle word wrap

    创建服务后,您的 Pod 可以连接到该服务。出口路由器 Pod 将连接重定向到目标 IP 地址中对应的端口。连接来自保留的源 IP 地址。

验证

要验证出口路由器 pod 是否已启动并具有二级网络接口,请完成以下步骤:

  1. 查看出口路由器 Pod 的事件:

    $ oc get events --field-selector involvedObject.name=egress-router-pod
    Copy to Clipboard Toggle word wrap

    如果 pod 引用了网络附加定义,则上一个命令会返回类似如下的输出:

    输出示例

    LAST SEEN   TYPE     REASON           OBJECT                  MESSAGE
    5m4s        Normal   Scheduled        pod/egress-router-pod   Successfully assigned default/egress-router-pod to ci-ln-9x2bnsk-f76d1-j2v6g-worker-c-24g65
    5m3s        Normal   AddedInterface   pod/egress-router-pod   Add eth0 [10.129.2.31/23]
    5m3s        Normal   AddedInterface   pod/egress-router-pod   Add net1 [192.168.12.99/24] from default/egress-router-redirect
    Copy to Clipboard Toggle word wrap

  2. 可选:查看出口路由器 pod 的路由表。

    1. 获取出口路由器 pod 的节点名称:

      $ POD_NODENAME=$(oc get pod egress-router-pod -o jsonpath="{.spec.nodeName}")
      Copy to Clipboard Toggle word wrap
    2. 在目标节点上进入一个 debug 会话。此步骤被实例化为一个名为 <node_name>-debug 的 debug pod:

      $ oc debug node/$POD_NODENAME
      Copy to Clipboard Toggle word wrap
    3. /host 设为 debug shell 中的根目录。debug pod 在 pod 中的 /host 中挂载主机 的 root 文件系统。将根目录改为 /host,您可以从主机的可执行路径中运行二进制文件:

      # chroot /host
      Copy to Clipboard Toggle word wrap
    4. chroot 环境控制台中获取容器 ID:

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

      输出示例

      CONTAINER
      bac9fae69ddb6
      Copy to Clipboard Toggle word wrap

    5. 确定容器的进程 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

    6. 输入容器的网络命名空间:

      # nsenter -n -t 68857
      Copy to Clipboard Toggle word wrap
    7. 显示路由表:

      # 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.129.2.0/23 dev eth0 proto kernel scope link src 10.129.2.31
      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

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat