成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

K8s 跨集群通信的“量子糾纏”:當 DNS 黑洞吞沒你的服務請求

云計算 云原生
一個 ??ndots?? 參數(shù)足以引發(fā)跨集群雪崩,理解 Kubernetes DNS 解析鏈(遞歸查詢 → searchDomains 追加 → 超時控制)是關鍵。

引言

對于這種案例,你們的處理思路是怎么樣的呢,是否真正的處理過,如果遇到,你們應該怎么處理。

我想大多數(shù)人都沒有遇到過。

開始

一、現(xiàn)象:跨集群通信的神秘失效

某金融系統(tǒng)在混合云架構中部署了多套 Kubernetes 集群,用于實現(xiàn)跨地域容災。某次業(yè)務切換演練時,發(fā)現(xiàn)跨集群服務發(fā)現(xiàn)完全失效,具體表現(xiàn)為:

1. 服務發(fā)現(xiàn)中斷:

# 在故障 Pod 中測試解析  
kubectl exec -it frontend-pod -- nslookup backend-service.cluster-b.svc.cluster.local  
;; Got SERVFAIL reply from 10.96.0.10, trying next server  
;; connection timed out; no servers could be reached

? 集群 A 的 Pod 無法通過 service-name.cluster-b.svc.cluster.local 訪問集群 B 的服務

? nslookup 返回 **SERVFAIL** 錯誤,但 CoreDNS 日志無任何異常記錄

2. 核心指標異常:

? Prometheus 監(jiān)控顯示 coredns_dns_request_count_total{rcode="SERVFAIL"} 激增

? 服務網(wǎng)格流量統(tǒng)計中,跨集群請求失敗率高達 92%

二、根因分析:DNS 配置的「死亡組合」

1. ndots:5 的「量子糾纏」

問題本質(zhì):

Kubernetes 默認在 Pod 的 /etc/resolv.conf 中設置 options ndots:5。該配置要求:

? 當查詢的域名包含 少于 5 個點 時,DNS 客戶端會嘗試追加所有 searchDomains

? 對于跨集群服務域名 backend-service.cluster-b.svc.cluster.local(4 個點),觸發(fā)以下查詢鏈:

# 實際查詢順序(偽代碼)
for domain in searchDomains:
    query = "backend-service.cluster-b.svc.cluster.local.{domain}"
    send_to_dns_server(query)

致命沖突:私有 DNS 服務器(如 AD DNS)無法處理這種帶冗余后綴的查詢,直接返回 SERVFAIL。

2. searchDomains 的「黑洞陷阱」

問題本質(zhì):/etc/resolv.conf 中殘留無效的 searchDomains,例如:

search default.svc.cluster.local svc.cluster.local cluster.local corp.legacy.com # 已廢棄的域

災難鏈:

1. 客戶端先嘗試查詢 backend-service.cluster-b.svc.cluster.local.default.svc.cluster.local

2. 私有 DNS 無法解析,耗時 5 秒(默認超時)

3. 繼續(xù)嘗試下一個后綴,最終耗盡查詢時間

三、解決方案:四步破解 DNS 黑洞

1. 動態(tài)調(diào)整 ndots 配置

通過 ConfigMap 覆蓋默認 DNS 策略:

# coredns-configmap.yaml  
apiVersion: v1  
kind: ConfigMap  
metadata:  
  name: coredns-custom  
  namespace: kube-system  
data:  
  Corefile: |  
    cluster.local:53 {  
      errors  
      health  
      ready  
      kubernetes cluster.local in-addr.arpa ip6.arpa {  
        pods insecure  
        fallthrough in-addr.arpa ip6.arpa  
      }  
      # 關鍵:調(diào)整 ndots 為 3  
      template IN A {  
        match "^([^\.]+)\.([^\.]+)\.svc\.cluster\.local$"  
        answer "{{ .Name }}.{{ .Match.2 }}.svc.cluster.local 5 IN A $SERVICE_IP"  
        fallthrough  
      }  
      forward . /etc/resolv.conf {  
        policy sequential  
        prefer_udp  
      }  
      cache 30  
      reload 15s  
      # 強制 ndots=3  
      loop  
      reload  
      loadbalance  
    }

2. 清理無效 searchDomains

在 Pod 模板中注入 DNS 配置:

# deployment-patch.yaml  
spec:  
  template:  
    spec:  
      dnsConfig:  
        searches:  # 僅保留有效域  
        - cluster-b.svc.cluster.local  
        - svc.cluster.local  
        - cluster.local  
        options:  
        - name: ndots  
          value: "3"

3. DNS 查詢鏈路驗證

使用 netshoot 鏡像進行全鏈路測試:

# 啟動診斷容器  
kubectl run dns-debug --image=nicolaka/netshoot --rm -it --restart=Never -- /bin/sh  

# 分步測試解析  
dig +trace backend-service.cluster-b.svc.cluster.local  
nslookup -debug backend-service.cluster-b.svc.cluster.local  
# 檢查實際查詢順序  
cat /etc/resolv.conf

4. 防御體系構建

層級

工具/策略

防護能力

配置校驗

OpenPolicyAgent (OPA)

攔截無效 searchDomains

監(jiān)控預警

Prometheus + CoreDNS 指標

實時檢測 SERVFAIL 率

混沌測試

Chaos Mesh 注入 DNS 延遲

提前發(fā)現(xiàn)鏈路脆弱點

四、核心命令速查表

# 1. 查看 Pod 的 DNS 配置  
kubectl exec <pod-name> -- cat /etc/resolv.conf  

# 2. 強制刷新 CoreDNS 緩存  
kubectl delete pod -n kube-system -l k8s-app=kube-dns  

# 3. 抓取跨集群 DNS 包  
kubectl debug <pod-name> -it --image=nicolaka/netshoot -- tcpdump -i any -nn port 53  

# 4. 生成 DNS 查詢拓撲圖  
kubectl get svc -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.clusterIP}{"\n"}{end}' > dns-map.txt

五、經(jīng)驗總結

1. DNS 配置的「蝴蝶效應」:一個 ndots 參數(shù)足以引發(fā)跨集群雪崩,理解 Kubernetes DNS 解析鏈(遞歸查詢 → searchDomains 追加 → 超時控制)是關鍵。

2. 防御性編碼原則:在 CI/CD 流水線中集成 DNS 策略校驗(如 kube-score 檢查 dnsConfig)。

3. 觀測驅(qū)動運維:通過指標 coredns_dns_response_rcode_count 定位異常模式,比日志更早發(fā)現(xiàn)問題。

責任編輯:武曉燕 來源: 云原生運維圈
相關推薦

2016-04-01 09:33:56

阿里云量子計算

2023-09-08 08:09:12

k8sservice服務

2023-11-07 08:23:05

2022-08-29 10:08:50

跨集群

2023-11-24 08:00:42

量子糾纏屏幕坐標系

2021-11-04 07:49:58

K8SStatefulSetMySQL

2021-08-31 09:55:57

服務開發(fā)K8S

2022-12-27 14:18:45

K8S命令

2023-09-03 23:58:23

k8s集群容量

2023-03-05 21:50:46

K8s集群容量

2023-11-06 07:16:22

WasmK8s模塊

2023-08-03 08:36:30

Service服務架構

2021-04-22 09:46:35

K8SCluster Aut集群

2017-08-01 15:39:34

2024-08-30 09:21:28

2022-04-22 13:32:01

K8s容器引擎架構

2018-03-12 06:51:05

量子計算量子糾纏傳統(tǒng)計算機

2022-12-28 10:52:34

Etcd備份

2024-05-27 00:00:10

KubernetesK8s云原生

2025-03-19 08:01:10

Kubernetes集群源碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品69久久久久水密桃 | 午夜a√ | 国产精品伦一区二区三级视频 | 亚洲一区二区三区在线观看免费 | 成人免费小视频 | 日本中文字幕一区 | 激情婷婷成人 | 亚洲欧美激情精品一区二区 | 中文字幕一区二区三区四区五区 | 精品免费国产视频 | 精品久久成人 | 国产精品一区二区三区在线 | 天天插天天操 | 黄色毛片在线看 | 国产中文一区二区三区 | 一区二区手机在线 | 久草资源在线 | 蜜桃视频在线观看免费视频网站www | 久久久国产亚洲精品 | 亚洲成av| 91人人澡人人爽 | 一区二区三区四区国产 | 精品国产免费一区二区三区五区 | 亚洲福利一区二区 | 一区二区三区四区国产 | 亚洲欧美日韩中文在线 | 天天操操 | 中文字幕亚洲精品 | 天天干视频在线 | 综合久久国产 | 欧美高清视频一区 | 91精品国产乱码久久蜜臀 | 精国产品一区二区三区四季综 | 午夜视频免费 | 精品久久久久久红码专区 | 日韩在线视频一区 | 国产精品久久国产精品 | 一区亚洲 | 午夜99| 亚洲一区二区三区在线免费 | 午夜电影网 |