【问题标题】:kubernetes dns lookup of microservicekubernetes dns 微服务查找
【发布时间】:2017-11-02 16:02:56
【问题描述】:

我对 kubernetes DNS 查找有疑问,如果我在我的服务部署中使用“dns”而不是“env”,

我的微服务使用集群中的其他微服务能否获取所有微服务的dns名称?

我得到这段代码,如果我使用env,那么我会从环境中获取主机信息。但如果我使用dns 什么格式以及如何获取 dns 名称,是否有我可以在客户端查询的 DNS 对象?

if (isset($_GET['cmd']) === true) {
  $host = 'redis-master';
if (getenv('GET_HOSTS_FROM') == 'env') {
  $host = getenv('REDIS_MASTER_SERVICE_HOST');
}

参考:https://github.com/GoogleCloudPlatform/container-engine-samples/blob/master/guestbook/php-redis/guestbook.php

如果有人有示例(最好是 nodejs),我可以深入研究。

【问题讨论】:

    标签: dns kubernetes google-kubernetes-engine


    【解决方案1】:

    首先是documented throughly。在任何情况下,如果您想查询 DNS 以了解运行的位置,如果您知道服务名称,则可以通过指向:

    my-svc.my-namespace.svc.cluster.local
    

    此外,如果您还想抽象端口号并且知道端口名称就可以了,您可以查询 SRV 记录并获取端口号和 CNAME:

    _my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster.local
    

    对于您的具体示例,这将类似于(假设默认命名空间):

    _redis-client._tcp.redis-service.default.svc.cluster.local
    

    查询 SRV 记录比依赖环境变量更可靠,因为如果在 pod 的生命周期内,外部服务更改位置,则无法重新注入环境变量,但重新查询 DNS 记录会产生更新的结果。

    【讨论】:

    • 嗨。您如何执行 SRV 查找以查询端口?
    • @EugeneR.Wang "dig" 是手动测试它的好工具,但大概可以通过某种其他系统来完成。 OP 使用的是 php,所以大概类似于 php.net/manual/en/function.dns-get-record.php
    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 2019-02-06
    • 2018-10-25
    • 2019-03-23
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    相关资源
    最近更新 更多