close

  KubernetesPod也跟一般機器一樣,都需要一套DNS查詢機制去解析出網路域名背後的IP來確定服務目的地。通常Kubernetes Pod有兩種DNS Policy,一種是Default PolicyPod直接繼承Node節點的DNS設定(/etc/resolv.conf);而另一個是ClusterFirst Policy,目前Kubernetes都給Pod預設DNS PolicyClusterFirst,其查詢原理如下:

  基本上可以理解成當Pod不走NodeDNS查詢機制時(default dns policy),便會把欲查詢IP的域名(host domain name) kubernetes DNS cache作查詢,這裡通常是放Kubernetes內被查詢過暫存在此DNS Cache內的DNS Record,如果有就把Domain Name IP丟回給PodCache沒有要被查詢的DNS Record的話會根據被查詢的主域名(Domain Name)是什麼來決定去哪做DNS查詢。

  首先如果Domain Name如果是 cluster.local 結尾的主機,將透過KubeDNS來查詢域名IP,而另外一種Kubernetes自定義的DNS存根域名(Stub Domain),例如我們在Kubernetes中自定義了域名為out-of.kubernetes的服務,那麼只要是域名為***.out-of.kubernetesDNS查詢都會被送到IP 10.126.32.15IP機器去作DNS query,當然這個IP也是我們在ConfigMap for kube-dnsyaml配置檔中所指定的。

  而如果欲查詢的domain name均不屬於kubeDNSStub Domain,那就是由上游DNS server來幫忙查詢IP,例如你的pod要查詢的DNS www.yahoo.com.tw,將會被送到8.8.8.8/8.8.4.4的上游DNS Server來做查詢,當然這也會是我們在ConfigMap for kube-dnsyaml檔中設定。

以下是ConfigMap for kube-dns設定的yaml 範本:

apiVersion: v1

kind: ConfigMap

metadata:

  name: kube-dns

  namespace: kube-system

data:

  stubdomains: |

    {"out-of.kubernetes": ["10.126.32.15"]}

  upstreamNameservers: |

    ["8.8.8.8","8.8.4.4"]

 

大致說明一下

  1. kind: ConfigMap 是說這yaml檔是用來產生ConfigMap物件的。
  2. name:kube-dns 是說這個ConfigMap物件名稱為kube-dns
  3. namespace:kube-system 這個configMap物件建立在kube-system命名空間。
  4. stubdomains 指出凡是***.out-of.kubernetesdomain的服務都必須交由10.126.32.15 自定義存根域dns server作解析。
  5. upstreamNameservers 則指出不是cluster.localout-of.kubernetes的服務全部交由IP8.8.8.8/8.8.4.4的上游DNS Server解析IP

 

20191211日星期三

arrow
arrow

    jackterrylau 發表在 痞客邦 留言(0) 人氣()