1.安裝DNS后,pod就可以通過dns來解析service,從而實現通信
2.創建一個dns測試工具pod
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tools-dns namespace: default spec: replicas: 1 template: metadata: labels: app: tools-dns spec: containers: - name: tools-dns image: tutum/dnsutils:latest command: ["sleep"] args: ["5000"]
3.進入測試容器和測試dns服務
kubectl exec -it tools-dns-5665d49688-8jrnw /bin/bash
nslookup wordpress-mysql
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: wordpress-mysql.default.svc.cluster.local
Address: 10.244.2.82

它會監聽 apiserver 並把所有 service 和 endpoints 的結果在內存中用合適的數據結構保存起來,並對外提供 DNS 查詢服務。
- dnsmasq: 一個輕量級的 DNS 服務軟件,可以提供 DNS 緩存功能。kubeDNS 模式下,dnsmasq 在內存中預留一塊大小(默認是 1G)的地方,保存當前最常用的 DNS 查詢記錄,如果緩存中沒有要查找的記錄,它會到 kubeDNS 中查詢,並把結果緩存起來
- 參考:http://cizixs.com/2017/04/11/kubernetes-intro-kube-dns
###############################################################
內部http服務的注冊和發現 對於暴露到外部的微服務而言,可以通過域名、路徑、端口等來發現。但是對於內部服務,我們怎么發現呢? k8s中每個pod中container的DNS server指向的就是k8s dns server。 這樣service之間可以通過使用固定規則的域名(比如:your_svc.default.svc.cluster.local)來訪問到另外一個service(僅需配置一個service name), 再通過service實現該服務請求負載均衡到service關聯的后端endpoint(pod container)上。