【为K8s的coredns配置上游DNS服务器】

为K8s的coredns配置上游DNS服务器

  • 一、背景描述
  • 二、如何修改coredns达到目的
  • 三、修改coredns 解析指定域名走指定dns
    • ①、get coredns configmap
    • ②、修改coredns configmap
    • ③、查询现有coredns pod并逐个重启
    • ④、验证解析是否正确

一、背景描述

有一个项目需要部署到客户内网,并通过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达到目的

①、直接修改coredns上游dns服务器。
②、修改coredns添加 hosts 解析
③、根据域名指定上游dns服务器

本文通过第三种方式,指定容器内解析域名 example.com 域名,及改域名的三级、四级域名时指向外部dns服务器。

三、修改coredns 解析指定域名走指定dns

①、get coredns configmap

kubectl -n kube-system edit configmap coredns

②、修改coredns configmap

通过命令: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
    }

③、查询现有coredns pod并逐个重启

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

你可能感兴趣的:(k8s,服务器,运维,网络)