从kubernetes将MySQL主机列入白名单

时间:2020-02-03 10:08:51

标签: mysql database kubernetes google-kubernetes-engine istio

我目前正在尝试使用istio在kubernetes上构建我的服务,并且在尝试将允许通过mysql.user表连接到Mysql数据库的所有主机IP列入白名单时遇到了麻烦。

在新部署后,我总是会遇到以下错误: 主机“ X.X.X.X”不允许连接到该MySQL服务器

知道每次部署服务时都会弹出一个新的pod IP,因此我必须添加新主机IP来替换旧用户。我真的很想避免为主机使用'%'。

有什么方法可以注册节点IP而不保持其持久性吗?

1 个答案:

答案 0 :(得分:2)

Kubernetes和Istio均提供网络级别的保护,并且将允许的主机设置为“全部”是安全的。

Kubernetes network policy可能是您要寻找的最佳集群级匹配。您将数据库本身设置为接受来自所有地址的连接,但是随后将网络策略设置为拒绝连接,除非来自具有特定标签集的容器中。由于您是通过 label 控制此操作的,因此具有相应标签集的所有新容器都将自动获得访问权限,而无需进行手动更改。

根据您的需要,ClusterIP service提供的默认保护可能已足够。如果服务是ClusterIP,但不是任何其他类型,则无法从集群外部访问;没有网络路径使其可访问。这通常足以防止临时的网络侦听器找到您的数据库。

Istio的authorization系统在网络级别上更加强大。它可以通过呼叫者的Kubernetes服务帐户限制呼叫,并使用TLS证书而不是仅IP地址来识别呼叫者。但是,默认情况下未启用它,并且根据我的有限经验,很容易意外地将其配置为执行阻止Kubernetes健康状况检查或Prometheus指标探针之类的操作。如果您对IP级别的安全性感到满意,那么这可能会超出您的需求。