操作系统信息
虚拟机,openEuler,6.6.0-72.0.0.76.oe2403sp1.x86_64
Kubernetes版本信息
v1.30.0
容器运行时
containerd v1.7.13
KubeSphere版本信息
在线安装。无K8S集群
问题
kubekey v3.1.10安装k8s v1.30.0 配置文件里,网络插件用的是calico,serviceSubnet设置的是172.20.0.0/16,在spec下没有配置下面的clusterDNS地址,
kubernetes:
clusterName: cluster.local
clusterDNS: 172.20.0.10 # 根据您的serviceSubnet,通常是.x.x.10或.x.x.3
kubelet:
clusterDNS:
安装完毕k8s集群后,k8s集群里的pod的dns解析文件里 /etc/resolv.config文件里nameserver是169.254.25.10,
这一切都正常,pod里/etc/resolv.conf 的内容如下:
[root@master-01 kubekey]# kubectl exec -it centos7-deployment-64bf8df6fd-4mbm6 – cat /etc/resolv.conf
search default.svc.cluster.local svc.cluster.local cluster.local cloudostest.abc.cn
nameserver 169.254.25.10
options ndots:5
现在有个问题,就是给某个主机/ip或者服务,配了一个域名sv-prod.harbor.com,通过/etc/hosts解析的这个域名对应的IP,这个域名灭有走公司的dns。在k8s集群的各个节点上的/etc/hosts里也添加了这条记录。k8s里的pod无法解析这个域名,因为pod没有挂载宿主机的/etc/hosts; 现在编辑k8s kube-system空间下coredns的configmap:coredns,在这个configmap里添加了一些内容:并重启了coredns,
hosts {
10.36.25.111 sv-prod.harbor.com
fallthrough
}
然后重启我得pod,发现pod里还是无法解析sv-prod.harbor.com,
最后解决办法是:
修改各个节点上的kubelet的配置文件:/var/lib/kubelet/config.yaml,
clusterDNS:
#- 169.254.25.10
- 172.20.0.10
将文件里的clusterDNS的169.254.25.10改为172.20.0.3,然后重启kubelet,重启各个deployment,然后pod里就能正常解析sv-prod.harbor.com了;
现在pod里的resolv.conf文件内容如下:
[root@master-01 kubekey]# kubectl exec -it centos7-deployment-64bf8df6fd-4mbm6 – cat /etc/resolv.conf
search default.svc.cluster.local svc.cluster.local cluster.local cloudostest.abc.cn
nameserver 172.20.0.10
options ndots:5
那么现在有2个疑问,
疑问1,我们网络插件用的是calico,现在修改了kubelet的clusterDNS,会不会对k8s集群服务有影响,对calico后面的pod通信是否有影响,暂时测试好像没啥影响,不同主机内的pod通信正常。
疑问2,在用kk安装k8s的时候,是不是可以加上这2项,手动指定clusterDNS的ip,这样后面k8s集群里创建的pod的resolv.conf文件里的nameserver就是这个clusterDNS的IP了,并且不影响网络插件calico。
kubernetes:
clusterName: cluster.local
clusterDNS: 172.20.0.10 # 根据您的serviceSubnet,通常是.x.x.10或.x.x.3
kubelet:
clusterDNS: