kubernetes dns查找微服务

时间:2017-11-02 16:02:56

标签: dns kubernetes google-kubernetes-engine

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

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

我得到这段代码,如果我使用env,那么我从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),我可以深入研究。

1 个答案:

答案 0 :(得分:5)

首先,这是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记录将更新结果

相关问题