提问者:小点点

访问Kubernetes集群之外的库贝-dns


类似的问题:如何为集群外部的查询公开库贝-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,但我不知道如何正确做到这一点。此外,这现在正在生产中运行,所以我不想做太多实验。


共2个答案

匿名用户

目前,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