-1

当我exec进入一个容器时,我看到一个/etc/resolv.conf看起来像这样的文件:

$ cat /etc/resolv.conf
search namespace.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.43.0.10
options ndots:5

如何将所有已部署容器的搜索域附加到搜索域,以便搜索域包含额外域?例如,如果我想添加任何 pod,默认情况下foo.com如何更新搜索行使其看起来像波纹管?bar.com

search namespace.svc.cluster.local svc.cluster.local cluster.local foo.com bar.com

笔记:

  • 这是一个自我管理的 k8s 集群。我可以根据需要更新 DNS/集群配置。我已经更新了 coredns 组件以正确解析我的名称服务器,但是这个设置需要应用于我想象的每个 pod。

  • 我查看了 pod 规范,但这不是一个很好的解决方案,因为它需要添加到系统中的每个 pod(或部署/作业/副本集/等)清单中。默认情况下,我需要将其应用于所有 pod。

  • 由于许多现有服务中返回主机名的方式,我不能合理地期望主机名是完全限定的域名。这是为了保持与我们已经拥有的许多服务的向后兼容性(例如,LDAP 请求可能返回 host fizz,但查找需要完全解析为fizz.foo.com)。这是裸机和虚拟机通常在此处配置的方式。

4

1 回答 1

1

我找到了一个可能的解决方案,但我自己不会将其标记为正确,因为这不是直接特定于 k8s,而是 k3s。我可能会稍后回来并提供更多

在我的例子中,我的测试集群是一个 k3s 服务,我假设它的行为与 k8s 大致相同。我的环境设置方式,我的正常/etc/resolv.conf被节点上的一个新文件替换。我能够通过提供--resolv-conf文件如下所示来规避这个问题:

$ cat /somedir/resolv.conf
search foo.com bar.com
nameserver 8.8.8.8

然后启动服务器/bin/k3s server --resolv-conf=/somedir/resolv.conf

现在,当 Pod 生成时,k3s 将解析此文件中的search行,并自动将搜索域附加到创建的任何 Pod 中。

当我在实际的 k8s 上尝试这个时,我不确定我是否会再次遇到这个问题,但至少这让我重新启动并运行!

于 2020-08-03T16:10:59.090 回答