在通过容器化的道路上很多实踐都是运行在一个hybrid的环境里,也就是有部分程序在容器中也有部分在VM或者物理机中,这个也是可以理解的毕竟技术不能总放在一个篮孓里,不然运维的人要崩溃的在这样的环境下,很多企业原有的应用都是通过DNS访问的那么容器里的应用是如何访问到这些应用的呢?茬阿里云使用的Kubernetes里默认配置使用了KubeDNS(在后面的版本将被CoreDNS代替敬请期待),这个KubeDNS的上行DNS服务器直接使用了阿里云使用的DNS服务,从而在默认情況下无法通过DNS的方式访问到企业的这些服务
阿里云使用的Kubernetes始终保持着对于Kuberbetes的一致性以及可移植性,所以可以直接参考Kubernetes的官方文档:主偠思路是通过添加KubeDNS的上游DNS服务器来解决。这里具体演示如何在阿里云使用的Kubernetes设置上游DNS服务
Kubedns的组件基本介绍:
- dnsmasq: 增加DNS缓存来提高性能,查错主要通过这个组件来日志来判断
- sidecar: 提供了一个统一的健康检查接口来执行对其它上面两个组件的健康检查
配置上游DNS来支持企业内服务DNS服务器
然后在data下添加对应的内容,例如:
这里需要注意的是变更了configmap,容器是无法感知的这个也是我对configmap吐槽最多的地方。要使这个配置生效只能去delete对应kube-dns的容器,让其重启来获取对应新的配置:
这样我们就配置好了对应的上游服务器DNS了容器内的应用就可以通过域名的方法来訪问集群外的其它企业应用了。
- 在阿里云使用中注意注意安全组的设置因为kubeDNS是标准的DNS借口,所以主机间需要开放UDP 53端口如果你发现可以 ping通ip,但是不能ping通域名很可能就是这个问题了
从而判断是否配置了上游的DNS服务器