插件簡介
CoreDNS域名解析插件是一款通過鏈式插件的方式為Kubernetes提供域名解析服務的DNS服務器。
CoreDNS是由CNCF孵化的開源軟件,用于Cloud-Native環境下的DNS服務器和服務發現解決方案。CoreDNS實現了插件鏈式架構,能夠按需組合插件,運行效率高、配置靈活。在kubernetes集群中使用CoreDNS能夠自動發現集群內的服務,并為這些服務提供域名解析。同時,通過級聯云上DNS服務器,還能夠為集群內的工作負載提供外部域名的解析服務。
該插件為系統資源插件,kubernetes 1.11及以上版本的集群在創建時默認安裝。
目前CoreDNS已經成為社區kubernetes 1.11及以上版本集群推薦的DNS服務器解決方案。
CoreDNS官網:
開源社區地址:
說明DNS詳細使用方法請參見DNS。
約束與限制
CoreDNS正常運行或升級時,請確保集群中的可用節點數大于等于CoreDNS的實例數,且CoreDNS的所有實例都處于運行狀態,否則將導致插件異常或升級失敗。
安裝插件
本插件為系統默認安裝,若因特殊情況卸載后,可參照如下步驟重新安裝。
步驟 1 登錄CCE控制臺,單擊集群名稱進入集群,在左側導航欄中選擇“插件管理”,在右側找到 coredns ,單擊“安裝”。
步驟 2 在安裝插件頁面,選擇插件規格,并配置相關參數。
coredns插件參數配置
參數 參數說明 插件規格 并發域名解析能力,請根據業務需求選擇插件規格。
如選擇“自定義qps”,CoreDNS所能提供的域名解析QPS與CPU消耗成正相關,請根據業務需求,合理調整插件實例數和容器CPU/內存配額。實例數 選擇上方插件規格后,顯示插件中的實例數。 容器 選擇插件規格后,顯示插件容器的CPU和內存配額。 參數配置 ?parameterSyncStrategy:插件升級時是否配置一致性檢查。
ensureConsistent:表示啟用配置一致性檢查,如果集群中記錄的配置和實際生效配置不一致,插件將無法升級。
force:表示升級時忽略配置一致性檢查。請您自行確保當前生效配置和原配置一致。插件升級完畢后,需恢復parameterSyncStrategy值為ensureConsistent,重新啟用配置一致性檢查。
stub_domains:存根域,您可對自定義的域名配置域名服務器,格式為一個鍵值對,鍵為DNS后綴域名,值為一個或一組DNS IP地址。
?upstream_nameservers:上游域名服務器地址。
?servers: coredns 1.23.1插件版本開始開放servers配置,用戶可對servers做定制化配置,參見,其中plugins為coredns中各組件配置(參考,一般場景建議保持默認配置,以免出現配置錯誤而導致coredns整體不可用),每個plugin組件可包含"name"、"parameters"(可選)、"configBlock"(可選)配置,對應生成的Corefile配置文件中格式如下:
$name ?$parameters {
$configBlock
}
示例:
{
?????"servers": [
????{
? "plugins": [
? ?{
? ? "name": "bind",
? ? "parameters": "{$POD_IP}"
? ?},
? ?{
? ? "name": "cache",
? ? "parameters": 30
? ?},
? ?{
? ? "name": "errors"
? ?},
? ?{
? ? "name": "health",
? ? "parameters": "{$POD_IP}:8080"
? ?},
? ?{
? ? "configBlock": "pods insecure\nfallthrough in-addr.arpa ip6.arpa",
? ? "name": "kubernetes",
? ? "parameters": "cluster.local in-addr.arpa ip6.arpa"
? ?},
? ?{
? ? "name": "loadbalance",
? ? "parameters": "round_robin"
? ?},
? ?{
? ? "name": "prometheus",
? ? "parameters": "{$POD_IP}:9153"
? ?},
? ?{
? ? "configBlock": "policy random",
? ? "name": "forward",
? ? "parameters": ". /etc/resolv.conf"
? ?},
? ?{
? ? "name": "reload"
? ?},
? ?{
? ? "name": "log"
? ?}
? ],
? "port": 5353,
? "zones": [
? ?{
? ? "zone": "."
? ?}
? ]
?}
],
"stub_domains": {
?"acme.local": [
? "1.2.3.4",
? "6.7.8.9"
?]
},
"upstream_nameservers": ["8.8.8.8", "8.8.4.4"]
}
coredns主zone默認plugin配置說明
| plugin名稱 | 描述 |
|---|---|
| bind | coredns 偵聽的hostIP配置,建議保持當前默認值{$POD_IP}。 |
| cache | 啟用DNS緩存。 |
| errors | 錯誤信息到標準輸出。 |
| health | coredns健康檢查配置,當前偵聽{$POD_IP}:8080,請保持此默認值,否則導致coredns健康檢查失敗而不斷重啟 |
| kubernetes | CoreDNS Kubernetes插件,提供集群內服務解析能力。 |
| loadbalance | 輪轉式DNS 負載均衡器, 在應答中隨機分配 A、AAAA 和 MX 記錄的順序。 |
| prometheus | CoreDNS自身metrics數據接口, 默認zone偵聽{$POD_IP}:9153,請保持此默認值,否則普羅無法采集coredns metrics數據。 |
| forward | 不在Kubernetes 集群域內的任何查詢都將轉發到默認的解析器 (/etc/resolv.conf)。 |
| reload | 允許自動重新加載已更改的Corefile。 編輯 ConfigMap 配置后,請等待兩分鐘,以使更改生效。 |
步驟 3 完成以上配置后,單擊“安裝”。
kubernetes中的域名解析邏輯
DNS策略可以在每個pod基礎上進行設置,目前,Kubernetes支持Default、ClusterFirst、ClusterFirstWithHostNet和None四種DNS策略,具體請參見。這些策略在pod-specific的dnsPolicy字段中指定。
- “Default” :如果dnsPolicy被設置為“Default”,則名稱解析配置將從pod運行的節點繼承。 自定義上游域名服務器和存根域不能夠與這個策略一起使用。
- “ClusterFirst”: 如果dnsPolicy被設置為“ClusterFirst”,任何與配置的集群域后綴不匹配的DNS查詢(例如,www.kubernetes.io)將轉發到從該節點繼承的上游名稱服務器。集群管理員可能配置了額外的存根域和上游DNS服務器。
- “ClusterFirstWithHostNet”: 對于使用hostNetwork運行的Pod,您應該明確設置其DNS策略“ClusterFirstWithHostNet”。
- “None”: 它允許Pod忽略Kubernetes環境中的DNS設置。應使用dnsConfigPod規范中的字段提供所有DNS設置 。
說明
Kubernetes 1.10及以上版本,支持Default、ClusterFirst、ClusterFirstWithHostNet和None四種策略;低于Kubernetes 1.10版本,僅支持default、ClusterFirst和ClusterFirstWithHostNet三種。
“Default”不是默認的DNS策略。如果dnsPolicy的Flag沒有特別指明,則默認使用“ **ClusterFirst** ”。
路由請求流程:
未配置存根域:沒有匹配上配置的集群域名后綴的任何請求,例如“www.kubernetes.io”,將會被轉發到繼承自節點的上游域名服務器。
已配置存根域:如果配置了存根域和上游DNS服務器,DNS查詢將基于下面的流程對請求進行路由:
- 查詢首先被發送到coredns中的DNS緩存層。
- 從緩存層,檢查請求的后綴,并根據下面的情況轉發到對應的DNS上:
- 具有集群后綴的名字(例如“.cluster.local”):請求被發送到coredns。
- 具有存根域后綴的名字(例如“.acme.local”):請求被發送到配置的自定義DNS解析器(例如:監聽在 1.2.3.4)。
- 未能匹配上后綴的名字(例如“widget.com”):請求被轉發到上游DNS。
路由請求流程


版本記錄
CCE插件版本記錄
插件版本 支持的集群版本 社區版本(僅1.17及以上版本集群支持) 1.23.2 /v1.(15|17|19|21|23).*/ 1.23.1 /v1.(15|17|19|21|23).*/ 1.17.15 /v1.(15|17|19|21).*/ 1.17.9 /v1.(15|17|19).*/ 1.17.7 /v1.(15|17|19).*/ 1.17.4 /v1.(17|19).*/ 1.17.3 /v1.17.*/ 1.17.1 /v1.17.*/