ob程序k8s上连接不上数据库,本地直接可以连接数据库

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】5.7.25-OceanBase_CE-v4.3.4.0
【问题描述】清晰明确描述问题
ob 的租户已经添加了白名单的用户,但是客户端在k8s里面的应用程序还是连接不上,提示连接报错是Connect Timeout expired.

【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

b040ea4b10ee078b05184deae4d1b5e0

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

根据文档库中的信息,您的问题可能是由于以下几个方面导致的:

  1. 网络问题

    • 请确保 Kubernetes 集群内的应用程序能够正常访问到 OceanBase 数据库所在的网络。可以尝试从 Kubernetes 集群内部 ping 测试数据库服务器的 IP 地址,确保网络连通性。
    • 检查 Kubernetes 集群的网络配置,确保没有防火墙规则或其他网络策略阻止应用程序与数据库之间的通信。
  2. OBProxy 配置问题

    • 如果您是通过 OBProxy 连接到 OceanBase 数据库的,请确保 OBProxy 的配置正确,并且 OBProxy 服务在 Kubernetes 集群内正常运行。
    • 检查 OBProxy 的日志文件,查看是否有任何错误信息或警告,这些信息可能有助于定位问题。
  3. 租户白名单配置

    • 确认租户白名单配置是否正确。虽然您提到已经添加了白名单用户,但仍需检查 ob_tcp_invited_nodes 系统变量的设置,确保 Kubernetes 集群内的应用程序 IP 地址在白名单中。
    • 您可以通过以下 SQL 语句查询当前租户的白名单配置:
      SHOW VARIABLES LIKE 'ob_tcp_invited_nodes';
      
    • 如果需要修改白名单,可以使用以下 SQL 语句:
      ALTER SYSTEM SET ob_tcp_invited_nodes = '192.168.1.%,10.10.10.1' SCOPE=BOTH;
      
  4. 连接超时设置

    • 检查应用程序的连接超时设置,确保超时时间足够长,以便在网络延迟较高的情况下也能成功建立连接。
    • 您可以尝试增加连接超时时间,例如在连接字符串中添加 connect_timeout 参数:
      obclient -h<obproxy_ip> -u<user> -P<obproxy_port> -p<obproxy_pwd> --connect_timeout=30
      
  5. Kubernetes 服务配置

    • 确认 Kubernetes 服务配置是否正确,特别是服务的 ClusterIPNodePort 是否正确指向了 OBProxy 或 OceanBase 数据库的 IP 和端口。
    • 检查 Kubernetes 服务的 Endpoints,确保它们正确地指向了后端的 Pod。
  6. 日志分析

    • 收集并分析应用程序、OBProxy 和 OceanBase 数据库的日志文件,查找任何可能的错误信息或异常情况。
    • 使用 obdiag 工具收集诊断信息,可以帮助您更全面地了解问题的根源。

如果您已经检查了上述所有方面但问题仍然存在,建议联系 OceanBase 的技术支持团队,获取进一步的帮助和支持。

检索到的文档如下:

  1. 客户端连接
  2. 主备租户自动路由
  3. 连接诊断
  4. 使用 obd 部署 ODP
  5. 基本操作
  6. 配置全局唯一的 Client Session ID
  7. 通过 OBClient 连接 OceanBase 租户
  8. 访问控制概述
  9. 网络安全访问控制
  10. 通过 MySQL 客户端连接 OceanBase 租户
  11. 恢复完成后升级租户
  12. 访问控制
  13. 锁定和解锁用户

感觉像是白名单设置的问题,和k8s本身没什么关系

ob的白名单不是只有一个吗,还有其他的白名单吗控制

根据文档库中的信息,OceanBase 数据库确实提供了多个不同类型的白名单机制,用于不同的访问控制场景。以下是几种常见的白名单机制及其用途:

  1. 租户白名单

    • 用途:实现网络安全访问控制,限制哪些客户端可以访问当前租户。
    • 配置方式:通过系统变量 ob_tcp_invited_nodes 控制。
    • 示例
      SHOW VARIABLES LIKE 'ob_tcp_invited_nodes';
      ALTER SYSTEM SET ob_tcp_invited_nodes = '192.168.1.%,10.10.10.1' SCOPE=BOTH;
      
    • 匹配规则
      • IP 地址,例如:192.168.1.1
      • 包含百分号(%)或下划线(_)的 IP 地址,例如:192.168.1.%192.168.1._
      • IP/NETMASK 地址,例如:192.168.1.0/24192.168.1.0/255.255.255.0
  2. OBProxy 白名单

    • 用途:控制通过 OBProxy 访问 OceanBase 数据库的客户端。
    • 配置方式:在 OBProxy 的配置文件中设置。
    • 示例
      # obproxy.yaml
      tcp_invited_nodes:
        - "192.168.1.0/24"
        - "10.10.10.1"
      
  3. OBcdc 白名单

    • 用途:控制 OBcdc 同步的数据表。
    • 配置方式:在 libobcdc.conf 文件中设置。
    • 示例
      tb_white_list=mytenant1.db1.tb1|mytenant2.db2.*
      
  4. ODP 黑白名单

    • 用途:控制 ODP 在访问 OBServer 节点时的行为,包括错峰合并、升级、leader 切换、宕机、启动和停止等过程中的访问控制。
    • 配置方式:通过 ODP 的配置参数设置。
    • 示例
      • 状态黑名单:根据 OBServer 节点的状态进行访问控制。
      • 探测黑名单:通过定期探测 OBServer 节点的健康状况进行访问控制。
      • 活不可用黑名单:根据业务 SQL 的执行结果进行访问控制。

总结

  • 租户白名单:用于控制哪些客户端可以访问当前租户。
  • OBProxy 白名单:用于控制通过 OBProxy 访问 OceanBase 数据库的客户端。
  • OBcdc 白名单:用于控制 OBcdc 同步的数据表。
  • ODP 黑白名单:用于控制 ODP 在访问 OBServer 节点时的行为。

每种白名单机制都有其特定的用途和配置方式,您可以根据实际需求选择合适的白名单机制进行配置。如果您需要进一步的帮助或详细的配置步骤,请参考相关文档或联系 OceanBase 的技术支持团队。

检索到的文档如下:

  1. 网络安全访问控制
  2. 通过 API 修改指定租户的访问白名单
  3. ODP 使用黑名单机制自适应处理 OBServer 节点的错峰合并、升级、leader 切换、宕机、启动和停止等过程中的 OBServer 节点访问控制
  4. obcdc 兼容 OceanBase 数据库 V3.X 的黑白名单功能

具体信息可参考以下文档:

  1. obcdc 黑白名单
  2. 访问控制概述
  3. 黑名单机制
  4. 网络安全访问控制
  5. 访问控制
  6. 修改租户访问白名单

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

OBProxy正常默认是不配置的。
先查一下网络是否可以正常访问