Kubernetes Pods 无法解析外部主机
Kubernetes Pods unable to resolve external host
我是 运行 一个 3 节点 Kubernetes 集群,Flannel 作为 CNI。我使用 kubeadm 来设置集群,版本是 1.23.
我的 pods 需要使用 DNS 地址与外部主机通信,但这些主机没有 DNS 服务器。为此,我在集群中每个节点的 /etc/hosts 中添加了它们的条目。节点可以从 DNS 解析主机,但 Pods 无法解析它们。
我试图在互联网上搜索这个问题,有人建议使用 HostAlias 或更新容器内的 /etc/hosts 文件。我的问题是主机列表很大,无法在 yaml 文件中维护列表。
我还查看了 Kubernetes 是否有一些内置标志让 Pod 在 Node 的 /etc/hosts 中查找条目但找不到它。
所以我的问题是-
- 为什么节点上的 pods 运行 无法解析 /etc/hosts 文件中的主机。
- 有没有办法设置本地 DNS 服务器并要求所有 Pods 查询此 DNS 服务器以获取特定主机解析?
也欢迎任何其他建议或解决方法。
容器中的环境应该与其他容器和机器(包括它的宿主机)隔离,/etc/hosts也是如此。
如果您使用的是 coreDNS(默认的内部 DNS),您可以通过修改其 configMap 轻松添加额外的主机信息。
打开 configMap kubectl edit configmap coredns -n kube-system
并对其进行编辑,使其包含 hosts
部分:
apiVersion: v1
data:
Corefile: |
.:53 {
...
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
### Add the following section ###
hosts {
{ip1} {hostname1}
{ip2} {hostname2}
...
fallthrough
}
prometheus :9153
...
}
设置将在几分钟后加载,然后所有 pods 都可以解析 configMap 中描述的主机。
我是 运行 一个 3 节点 Kubernetes 集群,Flannel 作为 CNI。我使用 kubeadm 来设置集群,版本是 1.23.
我的 pods 需要使用 DNS 地址与外部主机通信,但这些主机没有 DNS 服务器。为此,我在集群中每个节点的 /etc/hosts 中添加了它们的条目。节点可以从 DNS 解析主机,但 Pods 无法解析它们。
我试图在互联网上搜索这个问题,有人建议使用 HostAlias 或更新容器内的 /etc/hosts 文件。我的问题是主机列表很大,无法在 yaml 文件中维护列表。
我还查看了 Kubernetes 是否有一些内置标志让 Pod 在 Node 的 /etc/hosts 中查找条目但找不到它。
所以我的问题是-
- 为什么节点上的 pods 运行 无法解析 /etc/hosts 文件中的主机。
- 有没有办法设置本地 DNS 服务器并要求所有 Pods 查询此 DNS 服务器以获取特定主机解析?
也欢迎任何其他建议或解决方法。
容器中的环境应该与其他容器和机器(包括它的宿主机)隔离,/etc/hosts也是如此。
如果您使用的是 coreDNS(默认的内部 DNS),您可以通过修改其 configMap 轻松添加额外的主机信息。
打开 configMap kubectl edit configmap coredns -n kube-system
并对其进行编辑,使其包含 hosts
部分:
apiVersion: v1
data:
Corefile: |
.:53 {
...
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
### Add the following section ###
hosts {
{ip1} {hostname1}
{ip2} {hostname2}
...
fallthrough
}
prometheus :9153
...
}
设置将在几分钟后加载,然后所有 pods 都可以解析 configMap 中描述的主机。