踩坑记:k8s的pod无法通过域名访问外网

时间:2024-02-23 10:23:57

通过kubeoperator安装k8s集群,因把集群的主域名和在用的公共域名设为相同,导致无法通过域名访问外网

在用的公共域名再DNS提供商设置泛域名,把找不到的子域名重定向到固定页面

集群的主域名写入宿主机的/etc/resolve.conf的search域

pod继承宿主机的/etc/resolve.conf,其中nameserver为k8s的dns服务(coredns),使得访问任何域名都会先被coredns解析,检查是否为集群内部服务,若不是,再使用宿主机的dns解析

在pod内访问任何外网域名都会被先加上主域名后缀去解析,结果都被DNS重定向

解决方式:

  1. 集群的主域名不要和在用的公共域名重合
  2. 将deployment的dnsPolicy设为Default,使得pod的dns直接为宿主机的dns,而不是集群coredns
  3. 调整dnsConfig中的ndots,将其调为1或o,使得访问的域名只有点数小于1或无时,才会先加上search域去解析

以上第2和3种方法会导致访问集群内部域名时又出现问题,只能用于临时规避,最好时更改集群的主域名