CoreDNS Plugins ---> hosts


需求

kubernetes集群外部有少量服務,kubernetes集群內部pod需要通過服務所在的主機的hostname訪問服務。

解決方案

通過coredns的hosts插件配置kubernetes集群的dns服務,使集群內部可通過hostname/域名訪問外部服務。
參考:CoreDNS hosts

hosts插件格式

hosts [FILE [ZONES...]] {
    [INLINE]
    fallthrough [ZONES...]
}
  • FILE:需要讀取與解析的hosts文件;如果省略,默認取值"/etc/hosts";每5s掃描一次hosts文件的變更。
  • ZONES:如果為空,取配置塊中的zone。
  • INLINE:宿主機hosts文件在corefile中的內聯;在"fallthrough"之前的所有"INLINE"都可視為hosts文件的附加內容,hosts文件中相同條目將被覆蓋,以"INLINE"為准。
  • fallthrough:如果zone匹配且無法生成記錄,將請求傳遞給下一個插件;如果省略,對所有zones有效,如果列出特定zone,則只有列出的zone受到影響。

范例

Kubernetes采用CoreDNS中的coredns-cm.yaml為基礎變更,如下:

cat coredns-cm.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
  labels:
      addonmanager.kubernetes.io/mode: EnsureExists
data:
  Corefile: |
    .:53 {
        errors
        health
        # 省略了”FILE“,"ZONES"等字段
        hosts {
            # 1個hostname映射1個ip;
            # 雖然格式"172.30.200.21 172.30.200.22 172.30.200.23 kubenode1"可以正常下發configmap資源,但只有第一個ip生效
            172.30.200.21   kubenode1
            172.30.200.22   kubenode2
            172.30.200.23   kubenode3
            fallthrough
        }
        kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            upstream
            fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        proxy . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }

驗證

# 替換configmap
kubectl replace -f coredns-cm.yaml

# ping外部hostname
kubectl exec -it dnstest -- ping kubenode1
kubectl exec -it dnstest -- ping kubenode2
kubectl exec -it dnstest -- ping kubenode3


免責聲明!

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



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