代码之家  ›  专栏  ›  技术社区  ›  Vojtěch

在kubernetes集群外访问kube dns

  •  3
  • Vojtěch  · 技术社区  · 6 年前

    类似的问题: How to expose kube-dns service for queries outside cluster?

    当我使用MySQL客户端登录时 show processlist; ,我看到以下内容:

    | 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虚拟机提供服务,但我不知道如何正确地执行此操作。而且这已经投入生产了,所以我不想做太多的实验。

    2 回复  |  直到 6 年前
        1
  •  3
  •   Radek 'Goblin' Pieczonka    6 年前

    此时,仅当POD是无头服务的一部分时,才可以对POD IP进行反向DNS查找或PTR类型查找(详细信息: https://github.com/kubernetes/dns/pull/25 )但即使这样也有它的局限性。此外,kubernetes根本没有默认的每POD dns名称,即使在kubernetes集群中,您也不能说 curl http://<pod_name> myservice-0dkd0 在里面。

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

    如果在mysql主机上,每1分钟运行一次类似下面的命令,比如cron,那么应该在 /etc/主机 几乎所有的时间:

    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
    
        2
  •  1
  •   Narendra    6 年前

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

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

    mysql>显示变量,如“skip_name_resolve”;///将显示变量的当前状态。