我是這樣部署coredns的


操作環境

k8s-master
k8s-node1
k8s-node2

下載coredns

cd /opt/k8s/coredns
git clone https://github.com/coredns/deployment.git
mv deployment coredns

配置coredns

cd /opt/k8s/coredns/coredns/kubernetes
./deploy.sh 10.0.0.0/24 cluster.local
這里,10.0.0.0/24是你的service網段, cluster.local是域名后綴。該命令輸出的內容保存為文件generatedCoredns.yaml.

啟動coredns

kubectl create -f generatedCoredns.yaml
如果報錯:Get "https://10.0.0.1:443/api/v1/endpoints?limit=500&resourceVersion=0": x509: certificate is valid for 127.0.0.1, 172.x.x.x, not 10.0.0.1,那么Coredns是默認kubernetes的API-Server是10.0.0.1:443,需要修改上面的generatedCoredns.yaml文件。添加如下的KUBERNETES_SERVICE_HOST、KUBERNETES_SERVICE_PORT和KUBERNETES_SERVICE_PORT_HTTPS三個coredns容器的環境變量,使之指向你的apiserver IP和端口。

      containers:
      - name: coredns
        image: coredns/coredns:1.7.0
        imagePullPolicy: IfNotPresent
        env:
          - name: KUBERNETES_SERVICE_HOST
            value: "172.171.19.210"
          - name: KUBERNETES_SERVICE_PORT
            value: "6443"
          - name: KUBERNETES_SERVICE_PORT_HTTPS
            value: "6443"

查看創建結果類似如下:

# kubectl get all -n kube-system -l k8s-app=kube-dns
NAME                           READY   STATUS    RESTARTS   AGE
pod/coredns-76ff9d9d89-2lzml   1/1     Running   0          3h47m

NAME               TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
service/kube-dns   ClusterIP   10.0.0.2     <none>        53/UDP,53/TCP,9153/TCP   3h47m

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/coredns   1/1     1            1           3h47m

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/coredns-76ff9d9d89   1         1         1       3h47m

顯示所有的容器都是Running並且READY的個數都是“1/1”,如果不是這樣需要查看log並根據具體情況進行修復。

驗證

本coredns要能解析本機上所有的service的域名,也就是能解析kubernetes.default.svc.cluster.local和nginx-service.test.svc.nginx-service

kubectl get svc -o wide --all-namespaces

NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
default kubernetes ClusterIP 10.0.0.1 443/TCP 85d
test nginx-service ClusterIP 10.0.0.100 80:32460/TCP 47h app=nginx

如果想在pod里面能解析域名,需要修改kubelet的配置文件,加上一句--cluster-dns=10.0.0.2 --cluster-domain=cluster.local :

--cluster-dns=10.0.0.2 --cluster-domain=cluster.local \
--network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d \

然后重啟kubelet.嘗試在pod中ping 這幾個service的域名可以通。在Pod里面去nslookup kubernetes.default.svc.cluster.local 可以得到預期的結果,解析出了地址10.0.0.1,如果不支持nslookup可以直接ping該域名.
注意:不能到容器的網絡命名空間去nslookup該域名,因為網絡命名空間和文件命名空間不一致無法正確解析,必須要到容器內部去域名解析。

參考文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM