kubernetes dns微服务查询

Raj*_*ain 2 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');
}
Run Code Online (Sandbox Code Playgroud)

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

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

vas*_*cop 6

首先,这是完整的文档。无论如何,如果您想查询DNS以查明运行在哪里,可以通过指向以下位置知道服务名称来执行此操作:

my-svc.my-namespace.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)

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

_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)

对于您的特定示例,将类似于(假设默认名称空间):

_redis-client._tcp.redis-service.default.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)

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