雲計算之kubernetes系列——配置本地dns服務並關聯kube-dns

一,背景
    因爲k8s集羣以及web服務測試,每次使用/etc/hosts配置或者寫ip都不太好,所以決定搭建dns服務器做域名解析,後期可以做k8s-kube-dns的父dns服務器。
二,搭建
    1. 服務器
        dnsserver   192.168.89.128
    2. 安裝dns軟件包
        yum -y install bind bind-chroot bind-utils
    3. 修改dns配置
        vim /etc/named.conf
            options {
                /*此處改成any*/
                listen-on port 53 { any; };
                listen-on-v6 port 53 { ::1; };
                directory  "/var/named";
                dump-file  "/var/named/data/cache_dump.db";
                statistics-file "/var/named/data/named_stats.txt";
                memstatistics-file "/var/named/data/named_mem_stats.txt";
                recursing-file  "/var/named/data/named.recursing";
                secroots-file   "/var/named/data/named.secroots";
                /*此處改成any*/
                allow-query     { any; };

                recursion yes;

                dnssec-enable yes;
                dnssec-validation yes;

                /* Path to ISC DLV key */
                bindkeys-file "/etc/named.root.key";

                managed-keys-directory "/var/named/dynamic";

                pid-file "/run/named/named.pid";
                session-keyfile "/run/named/session.key";
            };

            logging {
                    channel default_debug {
                            file "data/named.run";
                            severity dynamic;
                    };
            };

            zone "." IN {
                type hint;
                file "named.ca";
            };
            /*此zone做測試域名解析使用*/
            zone "ktz.com" IN {
                type master;
                file "ktz.com.zone";
            };
            /*此zone做web網站域名解析使用*/
            zone "web.com" IN {
                type master;
                file "web.com.zone";
            };
            /*此zone做k8s集羣域名解析使用*/
            zone "k8s.com" IN {
                type master;
                file "k8s.com.zone";
            };

            include "/etc/named.rfc1912.zones";
            include "/etc/named.root.key";
        cp -a /var/named/named.localhost /var/named/ktz.com.zone
        cp -a /var/named/named.localhost /var/named/web.com.zone
        cp -a /var/named/named.localhost /var/named/k8s.com.zone
            $TTL 1D
            @  IN SOA @ k8s.com. (
                                0  ; serial
                                1D ; refresh
                                1H ; retry
                                1W ; expire
                                3H )   ; minimum
                NS @
                A  192.168.89.132
            k8smaster  A  192.168.89.132
            k8snode01  A  192.168.89.133
            k8snode02  A  192.168.89.134
    4. 重啓並開機自啓,配置/etc/resolv.conf
        systemctl restart named
        systemctl enabled named
        vim /etc/resolv.conf(修改相關服務器dns)
            nameserver  192.168.89.128
    5. 測試驗證
        k8smaster:
            yum -y install bind-utils(提供nslookup命令做域名解析)
            nslookup k8snode01.k8s.com
                Server:       192.168.89.128
                Address:   192.168.89.128#53

                Name:  k8snode01.k8s.com
                Address: 192.168.89.133
            可以正確的解析到對應的服務器,操作完成
三, 啓動k8s集羣服務/kube-dns,並關聯本地dns服務器
    1. 啓動k8s集羣服務, 並查看狀態
        k8smaster
            systemctl restart docker kube-controller-manager kube-scheduler kube-apiserver
        k8snode01
            systemctl restart docker flanneld kubelet kube-proxy
        k8snode02
            systemctl restart docker flanneld kubelet kube-proxy
        k8smaster
            kubectl get pods -n kube-system
                NAME                        READY   STATUS    RESTARTS   AGE
                kube-dns-85bdb85857-bjvbf   3/3     Running   0          43s
                kube-dns服務仍然在正常運行
    2. 將kube-dns與本地dns服務器關聯
        1). 測試一下kube-dns
            kubectl run busybox --image=192.168.89.132:5000/busybox  --command -- sleep 3600
                deployment.apps/busybox created
            kubectl get pods
                NAME                        READY   STATUS    RESTARTS   AGE
                busybox-54584f87db-4prnh    1/1     Running   0          23s
            kubectl get svc
                mysql-service   NodePort    169.169.188.11    <none>        3306:64298/TCP   12d
            kubectl exec -it busybox-54584f87db-4prnh -- nslookup mysql-service
                Server:       169.169.0.10
                Address:   169.169.0.10:53

                Name:  mysql-service.default.svc.k8s.com
                Address: 169.169.188.11

                *** Can't find mysql-service.svc.k8s.com: No answer
                *** Can't find mysql-service.k8s.com: No answer
                *** Can't find mysql-service.localdomain: No answer
                *** Can't find mysql-service.default.svc.k8s.com: No answer
                *** Can't find mysql-service.svc.k8s.com: No answer
                *** Can't find mysql-service.k8s.com: No answer
                *** Can't find mysql-service.localdomain: No answer
            kubectl exec busybox-54584f87db-4prnh --  ping kubernetes.default.svc.k8s.com
                PING kubernetes.default.svc.k8s.com (169.169.0.1): 56 data bytes
                64 bytes from 169.169.0.1: seq=0 ttl=64 time=0.028 ms
            kubectl exec -it busybox-54584f87db-4prnh /bin/sh
                cat /etc/resolv.conf
                    nameserver 169.169.0.10
                    search default.svc.k8s.com svc.k8s.com k8s.com localdomain
                    options ndots:5
                    可知集羣dns的ip地址未169.169.0.10
                ping www.baidu.com
                    PING www.baidu.com (112.80.248.75): 56 data bytes
                    64 bytes from 112.80.248.75: seq=0 ttl=127 time=2.616 ms
                ping k8smaster.k8s.com
                    ping: bad address 'k8smaster.k8s.com'
                ping公網的可以,ping本地的一個服務不行,則需要關聯本地dns
        2). 將本地dns服務器配置成kube-dns上游dns服務器
            a. 修改 kube-dns.yaml文件中ConfigMap部分, 添加了data部分
                apiVersion: v1
                kind: ConfigMap
                metadata:
                  name: kube-dns
                  namespace: kube-system
                  labels:
                    addonmanager.kubernetes.io/mode: EnsureExists
                data:
                  # 配置上游dns服務器
                  upstreamNameservers: |
                    ["192.168.89.128"]
            b. 刪除之前的kube-dns,重新創建
                kubectl delete -f kube-dns.yaml
                kubectl get pods -n kube-system
                kubectl create -f kube-dns.yaml
                kubectl get pods -n kube-system
                    NAME                        READY   STATUS    RESTARTS   AGE
                    kube-dns-85bdb85857-z62nj   3/3     Running   0          9s
            c. 驗證
                kubectl exec -it busybox-54584f87db-d97qk  /bin/sh
                ping k8smaster.web.com 無效 ,可以說明配置上游dns服務器無效。
                繼續修改kube-dns.yaml
                vim kube-dns.yaml
                    ---
                    apiVersion: v1
                    kind: ConfigMap
                    metadata:
                      name: kube-dns
                      namespace: kube-system
                      labels:
                        addonmanager.kubernetes.io/mode: EnsureExists
                    data:
                      stubDomains: |
                        {"web.com": ["192.168.89.128"]}
                    ---
                kubectl exec -it busybox-54584f87db-d97qk  /bin/sh
                    ping todolist.web.com
                        PING todolist.web.com (192.168.89.132): 56 data bytes
                        64 bytes from 192.168.89.132: seq=0 ttl=63 time=0.234 ms
                    可以ping通,測試通過,可以和k8s集羣外的本地服務通信了
四, 總結
    使用本地域名前綴ktz.com進行驗證
    vim /var/named/ktz.com.zone
        $TTL 1D
        @  IN SOA @ ktz.com. (
                            0  ; serial
                            1D ; refresh
                            1H ; retry
                            1W ; expire
                            3H )   ; minimum
            NS @
            A  192.168.89.133
        www    A  192.168.89.133
    systemctl restart named
    kubectl exec -it busybox-54584f87db-d97qk  /bin/sh
        ping www.ktz.com
            PING www.ktz.com (192.168.89.133): 56 data bytes
            64 bytes from 192.168.89.133: seq=0 ttl=64 time=0.037 ms
    當本地再新加服務,需要域名解析,且服務不在k8s集羣中,但是集羣中要使用時,則只需要配置本地域名解析即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章