有状态Pod主机名无法解析 [英] Stateful Pod hostname doesn't resolve

查看:18
本文介绍了有状态Pod主机名无法解析的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有多个statefulset pod,它们不是彼此的副本。我的应用程序在Pod的主机名上注册服务,其他服务尝试基于主机名访问该服务。它在无头服务中工作得很好,但应用程序逻辑不能更改,因为它读取POD的主机名,不幸的是,我必须使用它。

我有以下场景:

[test@shard1-0 ~]$ nslookup shard2
Server:     10.96.5.5
Address:    10.96.5.5#53

Name:   shard2.default.svc.cluster.local
Address: 10.244.0.50

[test@shard1-0 ~]$ nslookup shard2-0
Server:     10.96.5.5
Address:    10.96.5.5#53

** server can't find shard2-0: NXDOMAIN

[test@shard1-0 ~]$ 

有没有办法让碎片使用POD名称的主机名进行解析?当应用程序基于Pod主机名注册时,碎片可以相互访问。

只是为了澄清我们是否能够解决此问题,我们还需要将这些Pod暴露在外部。我认为我可以利用这一点,希望它能奏效: How to set hostname for kubernetes pod in statefulset

dns

由于这与群集内的推荐答案解析直接相关,因此一种可能的方法是更改需要解析主机名的应用程序的pod/部署中的dns策略。

您可以更改Pod的dnsPolicy来设置您的custom DNS settings,其中可以包含每个有状态集合Pod的记录。

  dnsPolicy: "None"
  dnsConfig:
    nameservers:
      - 1.2.3.4        
    options:
      - name: ndots
        value: "0"

这解决了集群内当前DNS记录中不存在记录的问题,并允许您通过删除DNS后缀来控制与您的Pod关联的非限定域名(web-0web-1)。

此外,更安全,因为更改仅应用于您的Pod/部署,而不是整个群集,这使您在以后公开有状态Pod时避免了潜在的麻烦。

最后,关于DNS配置,您可以使用指向Pod的FQDN的ALIAS records来通过它们的原始名称保留网络身份。这避免了获取IP地址的操作成本,因为您将改用主机名(它们永远不会更改)。

Host:   Type:   Points to:                                  TTL
web-0   ALIAS   web-0.web-svc.namespace.svc.cluster.local   1 Hour

请注意,此方法要求您设置和维护您自己的DNS服务器(在上面的定义中表示为1.2.3.4)。

如果在您的情况下,无法将应用程序逻辑更改为使用群集内的DNS标准,则这可能是一种解决办法。

这篇关于有状态Pod主机名无法解析的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆