有一个项目需要部署到客户内网,并通过nat映射实现外网访问!
项目中有多个服务之间调用是走的外网域名,项目采用k8s集群容器部署,客户的网络情况导致服务之间通过外网域名互调时总是 connection time out!
通过在容器中解析服务域名是没问题,然而telnet 域名对应ip + 端口超时。
现在想到的解决办法就是,内网做一个dns服务器,将服务之间调用的域名通过内网dns做一个解析,然后将k8s集群机器dns指向内网dns。这样做到的目的就是内网调用走内网ip!
按上面修改之后k8s宿主机是走内网了,然而容器依然还是走的外网ip,再进容器解析域名发现依然是解析到外网ip上!
通过度娘得知:
在Kubelet配置中通过使用–cluster-dns=10.10.10.2参数指定的coredns地址会被写入容器的/etc/resolv.conf配置中。
并且在kublet配置中通过resolv-conf参数可以指定一个主机上的DNS配置文件,但在默认DNS策略下主机上DNS配置文件中仅仅只有search部分会被加到容器内,nameserver不会被添加到容器中,要想添加自定义的上游DNS可以通过修改coredns的configmap配置来实现。
①、直接修改coredns上游dns服务器。
②、修改coredns添加 hosts 解析
③、根据域名指定上游dns服务器
本文通过第三种方式,指定容器内解析域名 example.com 域名,及改域名的三级、四级域名时指向外部dns服务器。
kubectl -n kube-system edit configmap coredns
通过命令:kubectl edit configmap coredns -n kube-system
在coredns configmap 中添加这么一段配置
example.com:53 {
errors
cache 30
forward . 172.16.1.1
reload
}
example.com 为需要解析的域名
172.16.1.1 为外部dns服务器
以下为完整configmap文件
apiVersion: v1
kind: ConfigMap
metadata:
annotations:
labels:
eks.amazonaws.com/component: coredns
k8s-app: kube-dns
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream 172.16.0.1
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
proxy . 172.16.0.1
cache 30
loop
reload
loadbalance
}
example.com:53 {
errors
cache 30
forward . 172.16.1.1
reload
}
consul.local:53 {
errors
cache 30
proxy . 10.150.0.1
}
kubectl get pod -n kube-system |grep coredns
kubectl delete pod core-dns-xxxx -n kube-system
验证方式一:
kubectl run busybox --restart=Never --image=busybox -- sleep 3600
kubectl exec busybox -- nslookup example.com
验证方式二
以下复制别人的文章,host 解析的域名适当变更测试即可。
[root@k8s-master-1 coredns]# kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools
If you don't see a command prompt, try pressing enter.
dnstools# host 0DJ01YUR.sobeydemo.com
0DJ01YUR.sobeydemo.com has address 100.64.148.116
0DJ01YUR.sobeydemo.com has IPv6 address 2002:6440:9474::6440:9474
dnstools# host minio.chinamcloud.com
minio.chinamcloud.com has address 100.64.139.66
Host minio.chinamcloud.com not found: 3(NXDOMAIN)
Host minio.chinamcloud.com not found: 3(NXDOMAIN)
dnstools#
参考:http://www.ksky.net/archives/67
参考:https://www.cnblogs.com/lixinliang/p/14519011.html
参考:https://blog.csdn.net/bingfan5073/article/details/100958025
参考:https://www.cnblogs.com/keithtt/p/13204497.html
参考:https://blog.51cto.com/foxhound/2483880