OB支持配置IP透传吗

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.2.2
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作

当配置haproxy或者F5连接过来的时候,有办法配置一下可以看到真实的来源IP吗

1 个赞

https://www.oceanbase.com/docs/common-odp-doc-cn-1000000002024362
使用 SHOW PROCESSLIST试试

2 个赞

学习一下

OB支持配置IP透传吗,当配置haproxy或者F5连接过来的时候,有办法配置一下可以看到真实的来源IP吗
@论坛小助手

根据文档库中的信息,OceanBase 数据库本身并不直接提供类似“IP 透传”的功能配置。但是,当您使用负载均衡设备(如 haproxy 或 F5)连接到 OceanBase 时,可以通过以下方式获取真实的客户端来源 IP:

方法一:通过 obproxy 获取真实 IP

如果您的架构中使用了 OBProxy,可以利用 OBProxy 的功能来记录和传递客户端的真实 IP 地址。OBProxy 支持通过 X-Forwarded-For 或类似的机制将客户端的真实 IP 地址传递给后端的 OceanBase 数据库。

配置步骤:

  1. 确保 haproxy 或 F5 在转发请求时添加了客户端的真实 IP 地址。

    • 对于 haproxy,可以在配置文件中添加如下内容:
      option forwardfor
      
      这样会在 HTTP 请求头中添加 X-Forwarded-For 字段。
  2. 在 OBProxy 中启用对 X-Forwarded-For 的支持。

    • OBProxy 默认会记录客户端的真实 IP 地址,并将其传递给后端数据库。您可以通过查询 SHOW PROCESSLIST; 来查看连接的真实来源 IP。

方法二:通过 show processlist 查看真实 IP

即使没有使用 OBProxy,您也可以通过 SQL 查询来获取当前连接的详细信息。执行以下命令:

SHOW PROCESSLIST;

该命令会返回当前所有连接的信息,包括客户端的真实 IP 地址(如果负载均衡器正确传递了相关信息)。


方法三:在 haproxy 或 F5 上配置

如果您不希望通过 OBProxy,而是直接让 haproxy 或 F5 将真实 IP 传递给 OceanBase,可以尝试以下配置:

  1. haproxy 配置

    • 确保启用了 option forwardfor
    • 如果需要更详细的日志记录,可以启用 log-format 并包含 %ci(客户端 IP)字段。
    • 示例配置:
      frontend ob_frontend
          bind *:2883
          mode tcp
          option tcplog
          log-format "%ci:%cp [%t] %ft %b/%s %Tw/%Tc/%Tt %B %ts %ac/%fc/%bc/%sc/%rc %sq/%bq"
          default_backend ob_backend
      
      backend ob_backend
          mode tcp
          server ob1 xx.xx.xx.xx:2881 check
      
  2. F5 配置

    • 在 F5 上启用 X-Forwarded-For 插件或类似功能,确保客户端的真实 IP 被附加到请求头中。

注意事项

  1. 直连模式 vs ODP 模式

    • 如果您直接连接到 OBServer(直连模式),则负载均衡器需要正确传递客户端的真实 IP。
    • 如果您通过 ODP(OceanBase Data Proxy)连接,则 OBProxy 会自动处理 IP 透传问题。
  2. 生产环境建议

    • 在生产环境中,建议始终使用 OBProxy 作为接入层,因为它不仅能够处理 IP 透传问题,还能提供读写分离、负载均衡等额外功能。

总结

虽然 OceanBase 数据库本身没有直接的“IP 透传”配置选项,但通过结合 OBProxy 和负载均衡器(如 haproxy 或 F5)的功能,您可以轻松实现获取真实客户端 IP 的需求。具体方法取决于您的网络架构和组件选择。

详情请参考:

  1. SpringBatch 连接 OceanBase 数据库示例程序
  2. 产品 FAQ
  3. MyBatis 连接 OceanBase 数据库示例程序
  4. Hibernate 连接 OceanBase 数据库示例程序
  5. Tomcat 连接池连接 OceanBase 数据库示例程序
  6. 使用 OBLOADER 旁路导入数据
  1. 如果客户端使用了 OB 的驱动,不管 F5 是否支持透传,OB 上 show process 都能看到客户端的真实 IP。
  2. 如果客户端使用的是 MySQL 的驱动,那就要依赖 F5 的设置了。

这个透传 有好有坏,看你想怎么利用。当客户端都是 k8s 应用的时候,真实的ip 都是 k8s 虚拟机的 ip ,很多重复。不一定能用。这种情况下,OB 租户的白名单 功能还是不要根据 客户端 IP 来限制。

楼主有条件的话可以帮验证一下 我上面观点对不对 /:smiley:

v3 的研究参考: OBCE V3 培训实验:应用到数据库全链路分析(下)

学习

学习学习


只有c和c++,ob有驱动,其它基本都是mysql的驱动吧。
看到了企业版页面下面有OceanBase JDBC 驱动程序
为 OceanBase 数据库定制的Java语言接口驱动