zoukankan      html  css  js  c++  java
  • 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 {\
     '"$item"'\
     }\
     /'`
      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 {\
     '"$item"'\
     }\
     /'`
        # 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
    "
    }

    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
    "
      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

  • 相关阅读:
    C# 从服务器下载文件
    不能使用联机NuGet 程序包
    NPOI之Excel——合并单元格、设置样式、输入公式
    jquery hover事件中 fadeIn和fadeOut 效果不能及时停止
    UVA 10519 !! Really Strange !!
    UVA 10359 Tiling
    UVA 10940 Throwing cards away II
    UVA 10079 Pizze Cutting
    UVA 763 Fibinary Numbers
    UVA 10229 Modular Fibonacci
  • 原文地址:https://www.cnblogs.com/shaohef/p/14877150.html
Copyright © 2011-2022 走看看