部署成功-分享下自定义DNS与上游DNS服务器(内网使用自定义域名)

  • Choerodon平台版本: 0.18
    其中172.16.100.31为内网服务器主节点地址
    1.自定义DNS方式ConfigMap
    vim kube-dns-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
    name: kube-dns
    namespace: kube-system
    labels:
        addonmanager.kubernetes.io/mode: EnsureExists
data:
    tubDomains: |
       {"myexample.com":["172.16.100.31"]}
    upstreamNameservers: |
        ["8.8.8.8", "172.16.100.1"]

执行
kubectl create -f kube-dns.yaml
可以删除重建
kubectl delete -f kube-dns.yaml -n kube-system
查看是否生效:dnsmasq日志,stub domain与upstreamserver已生效;
kubedns与sidecar两个日志也有stub domain与upstreamserver生效的输出

kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c kubedns

kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c dnsmasq

kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c sidecar

2.自定义dns服务器(172.16.100.31为DNS服务器)
安装dnsmasq服务
yum install dnsmasq -y
生成自定义的DNS记录文件
echo “172.16.100.31 char.myexample.com” > /tmp/hosts
或者批量修改 vi /tmp/hosts
172.16.100.31 chart.myexample.com
172.16.100.31 minio.myexample.com
172.16.100.31 gitlab.myexample.com
172.16.100.31 harbor.myexample.com
172.16.100.31 api.myexample.com
172.16.100.31 notify.myexample.com
172.16.100.31 devops.myexample.com
172.16.100.31 c7n.myexample.com
172.16.100.31 wiki.myexample.com
172.16.100.31 registry.myexample.com
172.16.100.31 notify.myexample.com
172.16.100.31 wiki.myexample.com

启动DNS服务;
-q:输出查询记录;
-d:以debug模式启动,前台运行,观察输出日志;
-h:不使用/etc/hosts;
-R:不使用/etc/resolv.conf;
-H:使用自定义的DNS记录文件;
启动输出日志中warning提示没有设置上游DNS服务器;同时读入自定义DNS记录文件
正常启动取消-d参数
[root@node1 ~]# dnsmasq -q -d -h -R -H /tmp/hosts
iptables放行udp 53端口
[root@node1 ~]# iptables -I INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

3.测试验证
下载镜像
docker pull busybox

配置Pod yaml文件;
dnsPolicy设置为ClusterFirst,默认也是ClusterFirst
touch dnstest.yaml
vi dnstest.yaml

apiVersion: v1
kind: Pod
metadata:
  name: dnstest
  namespace: default
spec:
  dnsPolicy: ClusterFirst
  containers:
  - name: busybox
    image: busybox
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
  restartPolicy: Always

创建Pod
kubectl create -f dnstest.yaml
nslookup查询server.out.kubernetes,返回定义的ip地址
kubectl exec -it dnstest – nslookup server.out.kubernetes
观察stub domain 172.16.100.31上dnsmasq服务的输出:(Pod所在的节点,flannel网络,snat出节点)对server.out.kubenetes的查询,dnsmasq返回预定义的主机地址。

1 个赞

大神,请问我执行第一步kubectl create -f
error: error converting YAML to JSON: yaml: line 9: found unexpected ‘:’
是不是您发的格式有问题

是格式问题,你自己调一下格式了,我上面也编辑调了下

为什么我创建了kube-dns,却不生效,没有日志,没有错误,啥也没有,就是不好使