add dns items for coredns
coredns org
hosts plguin and reverse, we can set reload durations.
add a dns item as follow:
# $(kubectl get cm coredns -n kube-system -o json | jq .data.Corefile |grep -o host) function add_coredns_host(){ CM=${CM:-coredns} kubectl get cm $CM -n kube-system -o json | jq .data.Corefile |grep -o hosts ret=$? if [[ $ret != 0 ]]; then # str=`kubectl get cm $CM -n kube-system -o json | jq .data.Corefile | \ # sed -e '0,/prometheus/s/prometheus/hosts {\\\n '"$item"'\\\n }\\\n /'` str=$(kubectl get cm $CM -n kube-system -o json | jq .data.Corefile | sed -e '0,/prometheus/s/prometheus/hosts {\\n '"$1"'\\n }\\n prometheus/') else str=$(kubectl get cm $CM -n kube-system -o json | jq .data.Corefile | sed -e 's/\(hosts {\)/\1\\n '"$1"'/') fi NATPATH="/data/Corefile" kubectl patch cm $CM -n kube-system --type='json' -p '[ {"op":"replace","path":"'"$NATPATH"'","value": '"$str"'}, ]' } item="172.16.30.4 gateway.sdwam.opennes" add_coredns_host "$item"
Add host item with fallthrough append
# $(kubectl get cm coredns -n kube-system -o json | jq .data.Corefile |grep -o host) function add_coredns_host(){ CM=${CM:-coredns} item=fallthrough kubectl get cm $CM -n kube-system -o json | jq .data.Corefile |grep -o hosts ret=$? if [[ $ret != 0 ]]; then # str=`kubectl get cm $CM -n kube-system -o json | jq .data.Corefile | \ # sed -e '0,/prometheus/s/prometheus/hosts {\\\n '"$item"'\\\n }\\\n /'` # str=$(kubectl get cm $CM -n kube-system -o json | jq .data.Corefile | # sed -e '0,/prometheus/s/prometheus/hosts {\\n '"$1"'\\n }\\n prometheus/') str=$(kubectl get cm $CM -n kube-system -o json | jq .data.Corefile | sed -e '0,/prometheus/s/prometheus/hosts {\\n '"$item"'\\n }\\n prometheus/') echo "Create an empity hosts list" NATPATH="/data/Corefile" kubectl patch cm $CM -n kube-system --type='json' -p '[ {"op":"replace","path":"'"$NATPATH"'","value": '"$str"'}, ]' fi str=$(kubectl get cm $CM -n kube-system -o json | jq .data.Corefile | sed -e 's/\(hosts {\)/\1\\n '"$1"'/') NATPATH="/data/Corefile" kubectl patch cm $CM -n kube-system --type='json' -p '[ {"op":"replace","path":"'"$NATPATH"'","value": '"$str"'}, ]' }
example:
item="172.16.30.4 gateway.sdwam.opennes" # make sure the $item is in double quotes add_coredns_host "$item"
Get Coredns config
function get_dns_corefile(){ CM=${CM:-coredns} NS=${NS:-kube-system} kubectl get cm $CM -n $NS -o json | jq .data.Corefile | xargs printf }
Get host dns item
function list_dns_host(){ str=$(kubectl get cm $CM -n kube-system -o json | jq .data.Corefile |grep -o "[ ]*hosts[^}]*}") if [[ -z "$str" ]] ;then echo "no hosts list in coredns data file, exit." exit 1 fi echo "The current hosts list:" printf "$str\n" }
Remove host dns item
function rm_dns_host(){ str=$(kubectl get cm $CM -n kube-system -o json | jq .data.Corefile |grep -o "[ ]*hosts[^}]*}") if [[ -z "$str" ]] ;then echo "no hosts list in coredns data file, exit." exit 1 fi echo "The current hosts list:" printf "$str\n" echo echo "----------- New date file -----------" CM=${CM:-coredns} NS=${NS:-kube-system} str=$(kubectl get cm $CM -n kube-system -o json | jq .data.Corefile | sed -e 's/\\n[^\]*'"$1"'[^\]*//g') printf "$str" NATPATH="/data/Corefile" kubectl patch cm $CM -n kube-system --type='json' -p '[ {"op":"replace","path":"'"$NATPATH"'","value": '"$str"'}, ]' }
Restart pod
可以不用重新启动,2分钟后会生效
kubectl scale deployment coredns -n kube-system --replicas=0 watch -n 1 "kubectl -n kube-system get pod |grep core" kubectl scale deployment coredns -n kube-system --replicas=2 watch -n 1 "kubectl -n kube-system get pod |grep core"
or
# https://coredns.io/2017/05/08/custom-dns-entries-for-kubernetes/ kubectl exec -n kube-system coredns-980047985-g2748 -- kill -SIGUSR1 1
validation
# https://www.cyberciti.biz/faq/centos-7-dig-command-not-found-how-to-install-dig-on-centos/ yum whatprovides '*bin/dig' yum install bind-utils -y # https://serverfault.com/questions/731238/contacting-dns-server-via-command-line-interface/731244 dnssv=$(kubectl get svc -A |grep dns |awk '{print $4}')
dns=demo4.xx.com dig +add +trace @$dnssv -p 53 $dns
dig @$dnssv -p 53 $dns
REF:
CoreDNS Manual
CoreDNS for Kubernetes Service Discovery, Take 2
Linux: Using sed to insert lines before or after a match