我对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');
}
如果有人有例子(最好是nodejs),我可以深入研究。
答案 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记录将更新结果