类似的问题:如何为集群外部的查询公开库贝-dns服务?
我在谷歌计算引擎的VM中有一个PerconaDB实例。旁边是运行服务连接到PerconaDB的库伯内特斯集群。
当我使用MySQL客户端登录并执行显示进程列表时;
,我看到以下内容:
| 175 | user | 10.12.142.24:46124 | user | Sleep | 14 | | NULL | 0 | 0 |
| 176 | user | 10.12.142.24:46126 | user | Sleep | 14 | | NULL | 0 | 0 |
| 177 | user | 10.12.122.42:60806 | user | Sleep | 2 | | NULL | 0 | 0 |
| 178 | user | 10.12.122.43:55164 | user | Sleep | 14 | | NULL | 1 | 0 |
| 179 | user | 10.12.122.43:55166 | user | Sleep | 4 | | NULL | 1 | 0 |
| 180 | user | 10.12.141.11:35944 | user | Sleep | 14 | | NULL | 1 | 0 |
注意我不知道它们属于什么的不同IP的数量。这些是库伯内特斯集群中的pod,我想知道它们的名字,所以我可以看到myservice-0dkd0:46124
而不是10.12.142.24:46124
。
我认为解决方案是以某种方式将库贝-dns
服务链接到PerconaDBVM,但我不知道如何正确做到这一点。此外,这现在正在生产中运行,所以我不想做太多实验。
目前,PODIP的反向DNS查找或PTR类型查找只有在Pod是无头服务的一部分的情况下才可能(详细信息:https://github.com/kubernetes/dns/pull/25),但即使这样也有其局限性。此外,kubernetes没有PODdns名称的默认值,即使在kubernetes集群中,你也不能说curl超文本传输协议://
也就是说,你可以在这里用非dns的方式实现你想要的。假设你在linux上运行,你可以使用/etc/host
来维护一个特定系统独有的名称到ip和ip到名称列表,并且不需要遵守真实DNS的所有限制。
如果在您的mysql主机上,您每1分钟运行一次类似于以下say from cron的操作,那么您应该几乎一直在您的/etc/host
中获得正确映射的名称:
NAMESPACE=default
sed -i "/^[0-9\.]*\t[a-zA-Z0-9-]*\.$NAMESPACE/d" /etc/hosts
kubectl get pod --namespace default --field-selector=status.phase==Running -o jsonpath='{range .items[*]}{.status.podIP}{"\t"}{.metadata.name}.{.metadata.namespace}{"\n"}{end}' >> /etc/hosts
看起来你需要在你的mysql服务端进行更改。查看此留档链接以获取跳过名称解析到IP地址的详细信息。
默认情况下,MySQL进行DNS查找来解析客户端主机名。您可以使用选项skip_name_resolve禁用此查找。
MySQL