docker - Kubernetes pod 应用程序与不在容器上的 Mysql 数据库的连接
问题描述
我可以将 k8 的 POD 与非容器应用程序连接起来,我的 kubernetes POD 在 10.200.xx 子网上运行,而我的 mysql 在容器以外的简单 linux 服务器上运行我如何连接数据库?由于我在一个网络限制如此多的组织中工作,并且我必须打开端口和 IP 才能访问,我是否有可能将容器应用程序与非容器数据库连接起来,因为子网掩码也不同
解决方案
如果您可以从工作节点访问 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。
推荐阅读
- excel - 使用下拉列表过滤 Excel 表格
- python - 在 Python 中将分类值列转换为其统计值
- javascript - 在 PhantomJS/Sinon 中存根 Promise
- json - PostgreSql 和 jsonb 与对象数组内的数组
- kotlin - 如何在离线环境中运行 Gradle kotlin-dsl 插件?
- python - 在与主处理程序相同的目录中安装 python 模块
- collections - 想从 laravel 集合中创建正确的响应吗?
- javascript - 发送大于 64kB 的 websocket 消息会导致 Ratchet websocket 服务器抛出“下溢异常”
- css - 如何使用带有 readthedown 主题的 Rmdformats 更改链接颜色?
- android - Android OpenGL ES 3.0 骨骼动画与 UBO 故障