K8S DNS问题
在 k8s 中,一个 Pod 如果要访问相同同 Namespace 下的 Service(比如 user-svc),那么只需要。如果 Pod 和 Service 不在同一域名下,那么就需要在 Service Name 之后添加上 Service 所在的 Namespace(比如 beta),。那么 k8s 是如何知道这些域名是内部域名并为他们做解析的呢?
在 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
更多推荐
所有评论(0)