15.12.3. 以重定向模式部署出口路由器 pod
您可以部署出口路由器 Pod,将其自身保留源 IP 地址的流量重定向到一个或多个目标 IP 地址。
添加出口路由器 pod 后,需要使用保留源 IP 地址的客户端 pod 必须修改为连接到出口路由器,而不是直接连接到目标 IP。
先决条件
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin特权的用户身份登录。
流程
- 创建网络附加定义。
- 创建出口路由器 pod。
为确保其他 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创建服务后,您的 Pod 可以连接到该服务。出口路由器 Pod 将连接重定向到目标 IP 地址中对应的端口。连接来自保留的源 IP 地址。
验证
要验证出口路由器 pod 是否已启动并具有二级网络接口,请完成以下步骤:
查看出口路由器 Pod 的事件:
$ oc get events --field-selector involvedObject.name=egress-router-pod如果 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可选:查看出口路由器 pod 的路由表。
获取出口路由器 pod 的节点名称:
$ POD_NODENAME=$(oc get pod egress-router-pod -o jsonpath="{.spec.nodeName}")在目标节点上进入一个 debug 会话。此步骤被实例化为一个名为
<node_name>-debug的 debug pod:$ oc debug node/$POD_NODENAME将
/host设为 debug shell 中的根目录。debug pod 在 pod 中的/host中挂载主机 的 root 文件系统。将根目录改为/host,您可以从主机的可执行路径中运行二进制文件:# chroot /host在
chroot环境控制台中获取容器 ID:# crictl ps --name egress-router-redirect | awk '{print $1}'输出示例
CONTAINER bac9fae69ddb6确定容器的进程 ID。在本例中,容器 ID 是
bac9fae69ddb6:# crictl inspect -o yaml bac9fae69ddb6 | grep 'pid:' | awk '{print $2}'输出示例
68857输入容器的网络命名空间:
# nsenter -n -t 68857显示路由表:
# ip route在以下示例输出中,
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