有状态Pod主机名无法解析 [英] Stateful Pod hostname doesn't resolve
本文介绍了有状态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-0
,web-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屋!
查看全文