首页 > 解决方案 > Kubernetes pod 应用程序与不在容器上的 Mysql 数据库的连接

问题描述

我可以将 k8 的 POD 与非容器应用程序连接起来,我的 kubernetes POD 在 10.200.xx 子网上运行,而我的 mysql 在容器以外的简单 linux 服务器上运行我如何连接数据库?由于我在一个网络限制如此多的组织中工作,并且我必须打开端口和 IP 才能访问,我是否有可能将容器应用程序与非容器数据库连接起来,因为子网掩码也不同

标签: dockerkubernetes

解决方案


如果您可以从工作节点访问 mysql,那么您也应该能够从在该节点上运行的 pod 访问它。

检查您的公司防火墙并确保来自工作节点的数据包可以到达运行 mysql 的实例。还要确保这些网络没有以其他方式分离。

通常,从您的应用程序 pod 发送到 mysql 实例的数据包会将源 ip 设置为工作节点 ip(因此您希望允许从 k8s 节点到 mysql 实例的流量)。这是因为 k8s 网络(具有大多数 CNI)是一种虚拟网络,只有 k8s 节点知道并且外部流量能够返回到 pod,网络中的路由器需要知道路由到哪里交通到。这就是为什么 pod 流量超出 k8s 网络的原因是 NATed。

对于大多数在 k8s 中封装内部流量的 CNI 来说都是如此,但请记住,也有一些 CNI 不封装流量,它可以直接从私有网络内的任何位置访问 pod,而不仅仅是从 k8s 节点(例如 Azure CNI)。

在 NATed 网络的第一种情况下,请确保您允许从所有工作节点访问 mysql 实例,而不仅仅是一个,因为当这个特定节点出现故障并且 pod 被重新安排到其他节点时,它将无法连接到数据库。

在第二种情况下,您使用的是使用直接网络(没有 NAT)的 CNI,它更复杂,因为当 pod 重新安排时,它每次都会获得不同的 ip,我无法帮助您,因为这完全取决于特定的 CNI。


推荐阅读