在kubernetes群集外部访问kube dns

在kubernetes群集外部访问kube dns,dns,kubernetes,google-compute-engine,google-kubernetes-engine,Dns,Kubernetes,Google Compute Engine,Google Kubernetes Engine,类似问题: 我在Google compute engine的虚拟机中有一个PerconaDB实例。它旁边运行的是Kubernetes集群,其中的服务连接到PerconaDB 当我使用MySQL客户端登录并执行显示进程列表时,我看到以下内容: | 175 | user | 10.12.142.24:46124 | user | Sleep | 14 | | NULL

类似问题:

我在Google compute engine的虚拟机中有一个PerconaDB实例。它旁边运行的是Kubernetes集群,其中的服务连接到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的数量,我不知道它们属于什么。这些是Kubernetes集群中的吊舱,我想知道它们的名称,因此我可以看到的不是
10.12.142.24:46124
,而是
myservice-0dkd0:46124


我原以为解决方案是以某种方式将kube dns服务链接到PerconaDB虚拟机,但我不知道如何正确地做到这一点。另外,这项功能现在正在生产中运行,所以我不想做太多的实验。

看起来您需要在mysql服务器级别进行更改。有关跳过名称解析到IP地址的详细信息,请查看文档链接

默认情况下,MySQL进行DNS查找以解析客户端主机名。您可以使用选项跳过\u name\u resolve禁用此查找


mysql>显示变量,如“跳过\u名称\u解析”;//将显示变量的当前状态。

此时,只有在POD属于无头服务(详细信息:)的情况下,才可能对POD IP进行反向DNS查找或PTR类型查找,但即使这样也有其局限性。此外,kubernetes根本没有默认的每站dns名称,即使在kubernetes集群中,您也不能说
curl http://
。你有这方面的服务。你所要求的并不是像现在这样通过kubernetes和DNS就能实现的。请记住,PTR记录(IP->name)应该与解析名称的常规记录(name->IP)齐头并进,这也会使事情变得复杂,这意味着您不能只在那里使用
myservice-0dkd0

也就是说,您可以在这里以非dns的方式实现您想要的。假设您在linux上运行,您可以使用
/etc/hosts
来维护特定系统专有的ip名和ip名列表,并且不需要遵守真实DNS的所有限制

如果在mysql主机上,您每1分钟从cron运行一次如下操作,那么您应该在
/etc/hosts
中始终正确映射名称:

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

这不是对我的问题的回答。这不是一个解决方案,而是解释了为什么它是这样的,以及在需要时可以调试它的方式。有两个选项可用,例如,或者您也可以尝试使用StatefulSet,因为StatefulSet为每个pod维护一个粘性标识。因此,由于这些选项中的大多数都需要自定义调整,因此最好使用测试集群进行尝试。我不确定我是否理解:1。禁用skip\u name\u resolve,无法获取播客名称。反过来说,我需要解析名称。2.它没有解释如何将DNS服务映射到POD。