K8S的Pod为什么可以解析访问集群之外的域名地址
对于以前刚学习的自己,知道Coredns是做K8S集群内解析的,但一直搞不懂主机node能访问网络,启动的Pod集群之外的域名服务也可以访问的疑问进行下说明。
DNS解析路径
Pod 发起外部请求 → CoreDNS 接收并识别为外部域名 → 转发到 Node 配置的上游 DNS → 上游 DNS 解析并返回结果 → Pod 访问目标 IP
DNS的对接配置
进入pod,然后查看/etc/resolv.conf
cat /etc/resolv.conf
nameserver 10.96.0.10:集群 DNS 服务的地址
search rook-ceph.svc.cluster.local svc.cluster.local cluster.local:域名搜索列表
options ndots:5:域名解析的 “点数量” 规则
也就是说Pod会找到coreDNS解析k8s内部这些域名,那么这些之外的域名呢?
kubectl get configmap coredns -n kube-system -o yaml
.:53 {errors # 记录错误日志health # 健康检查kubernetes cluster.local in-addr.arpa ip6.arpa { # 处理集群内域名解析(Service、Pod等)pods insecurefallthrough in-addr.arpa ip6.arpa}prometheus :9153 # 监控指标forward . /etc/resolv.conf # 关键:将非集群内的域名请求转发到上游 DNScache 30 # 缓存解析结果loop # 检测循环转发reload # 自动重载配置loadbalance # 负载均衡上游 DNS
}
CoreDns配置的上游DNS就是node本身的/etc/resolv.conf,forward . /etc/resolv.conf
关键配置项的意思就是非集群内的域名请求转发到node本身的/etc/resolv.conf,然后看下node本身的/etc/resolv.conf。
cat /etc/resolv.conf
最后通过node本身的/etc/resolv.conf配置将dns请求转发到外部dns中,解析完成后就可以层层返回请求,已到达Pod解析外部域名的实现。