在 k8s 中,一个 Pod 如果要访问相同同 Namespace 下的 Service(比如 user-svc),那么只需要 curl user-svc。如果 Pod 和 Service 不在同一域名下,那么就需要在 Service Name 之后添加上 Service 所在的 Namespace(比如 beta),curl user-svc.beta。那么 k8s 是如何知道这些域名是内部域名并为他们做解析的呢?

DNS In Kubernetes

无论是在 宿主机 或者是在 k8s 集群中,DNS 解析会依赖 /etc/host.conf 、 /etc/hosts 和 /etc/resolv.conf 这个三个文件,这里主要会讲下 /etc/resolv.conf 的配置和作用。

/etc/resolv.conf

resolv.conf 是 DNS 域名解析的配置文件。每行都会以一个关键字开头,然后跟配置参数。在集群中主要使用到的关键词有 3 个。

  • nameserver #定义 DNS 服务器的 IP 地址
  • search #定义域名的搜索列表,当查询的域名中包含的 . 的数量少于 options.ndots 的值时,会依次匹配列表中的每个值
  • options #定义域名查找时的配置信息

如果有时候遇到pod之间有通信不通时:

1 检查宿主机的DNS

/etc/host.conf

/etc/hosts

/etc/res

2 重启

 kubectl get pod -n kube-system 查看coredns名称

kubectl delete pod {你的coredns名称} -n kube-system

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐