Kubernetes出现Pod中无法解析DNS的问题(Ubuntu 16.04),经过摸索,得到了解决(参见:Kubernetes中的Pod无法访问外网-Ubuntu16.04 LTS )。但在升级到Ubuntu 18.04后,该问题再次出现,而且老办法也不灵了!
咋整?
下面的几个思路,都试了一遍:
/etc/resolv.conf,这是一般修改的文件,但这次改了以后,重启系统后又被改回去了。系统提示该文件是由networkmanager创建的。
-
/etc/systemd/resolved.conf
,是resolv服务的配置,改了以后重启服务,好像没啥变化。 -
/run/resolveconf/resolv.conf,有人说是
/etc/resolv.conf的连接指向文件,但我的系统没有。
-
/etc/resolvconf/resolv.conf.d/head,这个目录下有几个据说是resolv的配置文件,据说用于更新
/etc/resolv.conf文件,
但与/etc/resolv.conf里的数据不同。下面采用办法编辑了这个文件,终于搞定了。
-
Networkmanager
-
/etc/networkmanager/interfaces,以前版本都是该这里头的,没有效果。
-
-
dnsmasq,虽然系统安装了,但是配置都是空的,应该没有作用。
-
netplan
,这是Ubuntu 18.04的主流配置,可是里面的/etc/netplan目录是空的(不知道/etc/resolv.conf里的内容从哪里来的)。
不知道哪一个是真正起作用的了,实在不行的话,就只能蛮干了。
Disable systemd-resolved:
https://www.feiqy.com/ubuntu-dns/
systemctl disable systemd-resolved
没有效果,重启系统也没有效果。
需要注意的是:
- Kubernetes目前的DNS会从宿主机/etc/resolv.conf复制到pod。
- 因此,其它的设置方式即使在宿主机有效,但在kubernetes的pod中是无效的。
修改/etc/resolv.conf的指向:
#修改/etc/resolv.conf为软链接,从resolvconf配置文件来更新。
sudo mv /etc/resolv.conf /etc/resolv.conf.orig
sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
#修改/etc/resolvconf/resolv.conf.d/head或者base
sudo nano /etc/resolvconf/resolv.conf.d/head
#然后,应用一下。
sudo resolvconf -u
#再去看一下,应该已经变了。
cat /etc/resolv.conf
这个是可以的!虽然笨了点。