K8S從入門到放棄系列-(12)Kubernetes集群Coredns部署


摘要:
  集群其他組件全部完成后我們應當部署集群 DNS 使 service 等能夠正常解析,1.11版本coredns已經取代kube-dns成為集群默認dns。
1)下載yaml配置清單
[root@k8s-master01 ~]# mkdir /opt/k8s/coredns
[root@k8s-master01 ~]# cd /opt/k8s/coredns/
[root@k8s-master01 coredns]# wget https://raw.githubusercontent.com/coredns/deployment/master/kubernetes/coredns.yaml.sed
[root@k8s-master01 coredns]# mv coredns.yaml.sed coredns.yaml
2)修改默認配置清單文件

[root@k8s-master01 ~]# vim /opt/k8s/coredns/coredns.yaml
# 第一處修改 apiVersion: v1 kind: ConfigMap metadata: name: coredns namespace: kube
-system data: Corefile: | .:53 { errors health ready kubernetes cluster.local 10.254.0.0/18 { pods insecure fallthrough in-addr.arpa ip6.arpa } prometheus :9153 forward . /etc/resolv.conf cache 30 loop reload loadbalance } ## 第二處修改 ..... 搜索 /clusterIP 即可 clusterIP: 10.254.0.2
參數解釋:
  1)errors官方沒有明確解釋,后面研究
  2)health:健康檢查,提供了指定端口(默認為8080)上的HTTP端點,如果實例是健康的,則返回“OK”。
  3)cluster.local:CoreDNS為kubernetes提供的域,10.254.0.0/18這告訴Kubernetes中間件它負責為反向區域提供PTR請求0.0.254.10.in-addr.arpa ..換句話說,這是允許反向DNS解析服務(我們經常使用到得DNS服務器里面有兩個區域,即“正向查找區域”和“反向查找區域”,正向查找區域就是我們通常所說的域名解析,反向查找區域即是這里所說的IP反向解析,它的作用就是通過查詢IP地址的PTR記錄來得到該IP地址指向的域名,當然,要成功得到域名就必需要有該IP地址的PTR記錄。PTR記錄是郵件交換記錄的一種,郵件交換記錄中有A記錄和PTR記錄,A記錄解析名字到地址,而PTR記錄解析地址到名字。地址是指一個客戶端的IP地址,名字是指一個客戶的完全合格域名。通過對PTR記錄的查詢,達到反查的目的。)
  4)proxy:這可以配置多個upstream 域名服務器,也可以用於延遲查找 /etc/resolv.conf 中定義的域名服務器
  5)cache:這允許緩存兩個響應結果,一個是肯定結果(即,查詢返回一個結果)和否定結果(查詢返回“沒有這樣的域”),具有單獨的高速緩存大小和TTLs。
  # 這里 kubernetes cluster.local 為 創建 svc 的 IP 段
  kubernetes cluster.local 10.254.0.0/18
  # clusterIP  為 指定 DNS 的 IP
3)創建
對於配置清單中定義的一些資源,后面介紹K8S應用時,都會介紹說明,這里只要看對應的資源是否成功創建即可。
## 根據配置清單創建對應資源
[root@k8s-master01 coredns]# kubectl apply -f coredns.yaml 
## 查看資源創建
### pods svc均已創建
[root@k8s-master01 coredns]# kubectl get pod,svc -n kube-system -o wide
NAME                                           READY   STATUS    RESTARTS   AGE     IP              NODE         NOMINATED NODE   READINESS GATES
pod/calico-kube-controllers-75569d87d7-lxmgq   1/1     Running   0          3h31m   10.10.0.22      k8s-node02   <none>           <none>
pod/calico-node-lhmt8                          1/1     Running   0          3h31m   10.10.0.22      k8s-node02   <none>           <none>
pod/calico-node-nkmh2                          1/1     Running   0          3h31m   10.10.0.21      k8s-node01   <none>           <none>
pod/coredns-55f46dd959-kmhrh                   1/1     Running   0          66s     10.254.88.1     k8s-node02   <none>           <none>
pod/coredns-55f46dd959-kxs9t                   1/1     Running   0          66s     10.254.96.193   k8s-node01   <none>           <none>

NAME               TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE   SELECTOR
service/kube-dns   ClusterIP   10.254.0.2   <none>        53/UDP,53/TCP,9153/TCP   66s   k8s-app=kube-dns
4)測試dns解析

## 創建pod
[root@k8s-master01 ~]# kubectl run nginx --image=nginx:1.14.2-alpine
## 查看pod狀態
## 可以看到pod被調度到k8s-node01節點,IP地址10.254.96.194
[root@k8s-master01 ~]# kubectl get pod -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
nginx-8477bdff5d-qr5bl   1/1     Running   0          46s   10.254.96.194   k8s-node01   <none>           <none>
## 創建service
[root@k8s-master01 ~]# kubectl expose deployment nginx --port=80 --target-port=80
## 查看service
### 可以看到service nginx已經創建,並已經分配地址
[root@k8s-master01 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.254.0.1      <none>        443/TCP   2d4h
nginx        ClusterIP   10.254.95.165   <none>        80/TCP    12s
## 驗證dns解析
### 不要使用busybox鏡像測試,有坑
### 創建包含nslookup的pod鏡像alpine
[root@k8s-master01 ~]# kubectl run alpine --image=alpine-- sleep 3600
## 查看pod名稱
[root@k8s-master01 ~]# kubectl get pods
NAME                       READY   STATUS    RESTARTS   AGE
alpine-7c78c944f5-gsxbv   1/1     Running   0          113s
nginx-8477bdff5d-qr5bl     1/1     Running   0          9m48s
## 測試
[root@k8s-master01 ~]# kubectl exec -it alpine-7c78c944f5-gsxbv -- nslookup nginx
nslookup: can't resolve '(null)': Name does not resolve

Name:      nginx
Address 1: 10.254.95.165 nginx.default.svc.cluster.local

 

 
 
 
 


免責聲明!

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



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