- 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返回预定义的主机地址。