国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網易首頁 > 網易號 > 正文 申請入駐

谷歌K8s把服務發(fā)現藏了8年,運維發(fā)現后集體破防

0
分享至


一個Pod重啟,IP地址從10.244.1.5變成10.244.2.10。你的微服務集群里,這樣的地址漂移每天發(fā)生上千次。

谷歌的Kubernetes(容器編排系統,簡稱K8s)從2014年開源至今,解決了容器調度、彈性擴縮容、故障自愈,卻把一個最基礎的問題留給了用戶:服務之間怎么互相找到對方?

這不是配置問題,是架構設計的選擇。理解它,才能理解為什么你的服務網格(Service Mesh)方案總是過度設計。

Pod的"房間號"每天都在變

K8s給每個Pod分配獨立IP,這設計看似優(yōu)雅——每個容器像一棟大樓里的獨立房間,有自己的門牌號。房間之間可以直接通話,無需中轉。

但Pod是臨時的。崩潰重啟、滾動更新、水平擴縮,都會讓舊Pod消失、新Pod誕生。新Pod拿到新IP,舊地址永久失效。

想象一家咖啡店:周一在101室,周二系統崩潰后重生到205室,周三為了應對早高峰同時開了101、205、302三個分店。你的老顧客該去哪找咖啡?

這正是K8s原生網絡模型的殘酷現實。IP地址不是身份標識,只是臨時坐標。 用IP直接訪問服務,等于把系統穩(wěn)定性建立在流沙之上。

谷歌的工程師當然知道這個問題。他們的解法不是修改Pod模型——那樣會打破K8s的設計哲學——而是在之上疊加一層抽象。

Service:大樓前臺的"轉分機"機制

K8s的Service(服務)本質上是一個穩(wěn)定的DNS條目加四層負載均衡。它不指向具體Pod,而指向一組Label(標簽)匹配的Pod集合。

用咖啡店的類比:你不再記房間號,而是撥打"咖啡店轉分機"。前臺系統實時查詢哪些房間掛著"咖啡店"門牌,把電話轉過去。101室關了?自動轉205。三個分店都在?輪流分配客流。

這個設計的精妙之處在于解耦。調用方只認Service名字,不關心后端拓撲;運維方隨意擴縮、替換Pod,上游無感知。

Service拿到一個ClusterIP(集群內部虛擬IP),這個地址比Pod IP穩(wěn)定得多——只要Service對象不被刪除,ClusterIP不變。但注意,ClusterIP只在集群內部可達,外部流量需要NodePort或Ingress(入口網關)額外暴露。

這里藏著K8s的第一個"坑":很多團隊早期直接用Pod IP做服務間調用,或者把Service當DNS用卻忽略了緩存問題。CoreDNS(K8s默認DNS服務)的默認TTL(生存時間)是5秒,意味著客戶端可能緩存過期地址長達半分鐘。

Endpoints:前臺背后的實時花名冊

Service本身不存儲Pod列表。真正干活的是Endpoints(端點)對象——一個自動維護的IP:Port列表,由K8s控制平面實時同步。

當你創(chuàng)建一個Service,K8s的Endpoint Controller(端點控制器)開始監(jiān)聽所有匹配Label的Pod。Pod Ready(就緒)狀態(tài)變化?Endpoints列表秒級更新。Pod被刪除?立刻從列表剔除。新Pod啟動?加入輪換。

kube-proxy(K8s的網絡代理組件)在每個節(jié)點運行,它把Service的ClusterIP映射到本地iptables(Linux防火墻規(guī)則)或IPVS(虛擬服務器)規(guī)則。流量命中ClusterIP時,被透明地DNAT(目標地址轉換)到某個后端Pod。

這個機制從2014年沿用至今,簡單、可靠、無額外依賴。但它有兩個隱性成本:

第一,網絡跳數。流量從客戶端Pod出發(fā),先到本節(jié)點kube-proxy做DNAT,再路由到目標節(jié)點,最后進入目標Pod。跨節(jié)點通信至少多一跳。

第二,擴縮容抖動。大規(guī)模集群中,Endpoints對象可能包含數千個條目。每次Pod變動觸發(fā)全量列表推送,控制平面和網絡代理的壓力隨規(guī)模線性增長。

2020年,K8s引入EndpointSlice(端點切片)作為替代。把一個大Endpoints對象拆成多個切片,按需分發(fā),更新粒度更細。但底層邏輯沒變:還是"前臺轉分機"模式。

DNS的陷阱:名字解析不是免費的

Service的名字通過DNS暴露,格式是service-name.namespace.svc.cluster.local。這給了開發(fā)者"像訪問網站一樣訪問內部服務"的幻覺。

但DNS在K8s里是多層架構。Pod里的應用發(fā)起查詢→本地DNS緩存(如nscd或systemd-resolved)→CoreDNS Pod→etcd(K8s的分布式鍵值存儲)中的DNS記錄。

任何一層緩存過期、CoreDNS Pod重啟、etcd網絡分區(qū),都會導致解析失敗或返回過期IP。更隱蔽的是NDOTS配置:Linux默認的DNS搜索域后綴數量是1,K8s為了支持短域名(直接寫coffee-shop而非全限定名)把它設成5。這意味著每次DNS查詢可能觸發(fā)5次遞歸嘗試,延遲暴漲。

我見過一個生產事故:某團隊的服務間調用P99延遲突然從5ms跳到200ms。根因是新部署的Java應用使用了默認JVM DNS緩存,TTL永不刷新,而上游Service的后端Pod已經全換了一遍。應用拿著5個過期IP瘋狂重試,超時后 fallback 到下一個,惡性循環(huán)。

解決方案?要么禁用JVM DNS緩存(-Dsun.net.inetaddr.ttl=0),要么改用K8s的Headless Service(無頭服務)直接返回Pod IP讓客戶端自己負載均衡,要么上Service Mesh接管服務發(fā)現。

Headless Service:當"前臺轉分機"不夠用時

把Service的clusterIP: None,它就變成Headless Service。DNS查詢不再返回虛擬IP,而是直接返回所有后端Pod的A記錄。

這有什么用?

StatefulSet(有狀態(tài)應用集)需要它。MySQL主從、Redis Cluster、ZooKeeper——這些系統要求客戶端知道每個節(jié)點的具體身份,不能透明負載均衡。Headless Service讓DNS返回mysql-0.mysql.default.svc.cluster.localmysql-1.mysql.default.svc.cluster.local這種可預測的FQDN(全限定域名),配合穩(wěn)定的網絡標識(Pod名即主機名),實現有狀態(tài)服務的身份持久化。

另一個場景是客戶端負載均衡。某些RPC框架(如gRPC)更愿意自己維護連接池,根據實時健康狀態(tài)做智能路由。Headless Service給它們提供"原始素材",把負載均衡策略從kube-proxy手里拿回來。

代價也很明顯:應用層必須處理IP變動。Pod重啟后DNS記錄更新有延遲(默認5秒TTL),這段時間客戶端可能連到黑洞。gRPC的Name Resolver(名稱解析器)需要配置serviceConfig做優(yōu)雅處理,否則就是連鎖故障。

ExternalName:給外部世界一個"分機號"

不是所有依賴都在K8s里。你的MySQL可能是云廠商的托管實例,Redis可能是ElasticCache,支付網關可能是第三方SaaS。

ExternalName類型的Service把這些外部端點納入K8s的命名體系。創(chuàng)建一個ExternalName Service指向prod-mysql.example.com,集群內應用就可以用mysql.default.svc.cluster.local訪問它,和訪問內部服務完全一致。

這看似只是語法糖,實則統一了服務契約。配置管理、監(jiān)控埋點、訪問控制都可以基于Service名字做,無需區(qū)分內外。哪天把外部MySQL遷進K8s?改Service類型,上游零感知。

但注意:ExternalName只是DNS層面的CNAME記錄,沒有健康檢查、沒有負載均衡、沒有連接管理。如果prod-mysql.example.com背后只有單IP,它掛了就是掛了,K8s不會幫你切流。

Ingress與Gateway:當"分機號"需要對外開放

ClusterIP只在集群內可達。要讓外部流量進來,傳統方案是NodePort(節(jié)點端口)——在每個節(jié)點開固定端口,把流量轉發(fā)到Service。端口范圍30000-32767,URL變成http://node-ip:30080,生產環(huán)境幾乎不可用。

Ingress(入口)是K8s的七層路由抽象。你部署一個Ingress Controller(如Nginx Ingress、Traefik),它監(jiān)聽集群外的80/443,根據Host和Path規(guī)則把流量分發(fā)到不同Service。

Ingress API的設計堪稱K8s史上最混亂的章節(jié)之一。它只定義了最小公約數:Host、Path、Service后端、TLS終止。高級功能(重寫、限流、認證、灰度發(fā)布)全靠各Controller的自定義Annotation(注解),沒有可移植性。

2022年,Kubernetes Gateway API(網關API)正式發(fā)布,試圖終結這種混亂。它把路由、后端、策略拆成獨立資源,支持多租戶、多協議(HTTP/TCP/UDP/gRPC)、更細粒度的流量控制。

但遷移成本是真實的。Nginx Ingress的生態(tài)積累太深,很多團隊寧愿繼續(xù)寫nginx.ingress.kubernetes.io/rewrite-target這種咒語,也不愿擁抱新標準。

Service Mesh:當"前臺轉分機"成為瓶頸

回到最初的問題:kube-proxy的DNAT方案,在超大規(guī)模集群中開始吃力。每次Service后端變動,全集群的iptables規(guī)則都要刷新,延遲和CPU消耗不可忽視。

更深層的問題是可觀測性安全。Service只解決"找到對方",不解決"加密通信""身份認證""細粒度授權""調用鏈追蹤"。這些需求催生了Service Mesh(服務網格):Istio、Linkerd、Consul Connect。

Service Mesh的核心是Sidecar(邊車)代理。每個Pod里除了業(yè)務容器,再注入一個Envoy(或類似代理)。所有進出流量被劫持到Sidecar,它完成服務發(fā)現、負載均衡、mTLS(雙向TLS)、指標采集、故障注入。

服務發(fā)現機制也變了:不再依賴K8s Service和DNS,而是直接對接控制平面(如Istiod)獲取全量端點列表,基于實時健康狀態(tài)做智能路由。這消除了DNS緩存和kube-proxy的中間層,但也引入了新的復雜度——Sidecar本身的資源消耗、啟動延遲、配置傳播時延。

一個常被忽視的真相:Service Mesh不是K8s服務發(fā)現的替代,而是增強。 你完全可以保留K8s Service作為"兜底",只在需要高級功能的命名空間啟用Mesh。很多團隊的實踐是漸進式采用:先讓Mesh接管東西向流量,南北向繼續(xù)走Ingress。

2024年的新變量:K8s原生服務網格

Istio的維護者——Google、IBM、Red Hat——在2022年把項目捐贈給CNCF(云原生計算基金會),但社區(qū)對Sidecar模式的抱怨從未停止。每個Pod多一個容器,意味著多30-100MB內存、多1-3秒啟動時間、多一層故障點。

2023年,Istio推出Ambient Mesh(環(huán)境網格)模式。Sidecar變成可選,改為在每個節(jié)點運行ztunnel(零信任隧道)和waypoint(路徑點代理)。無加密需求的流量走ztunnel直接轉發(fā),需要七層處理的才經過waypoint。資源開銷大幅降低,但架構復雜度上升。

同期,Cilium(基于eBPF的容器網絡方案)推出Service Mesh功能,完全無Sidecar。利用Linux內核的eBPF(擴展伯克利包過濾器)技術,在數據平面直接完成負載均衡、可觀測性、安全策略,無需用戶態(tài)代理。

這些演進的共同指向是:服務發(fā)現正在從"用戶態(tài)代理"回退到"內核態(tài)或控制平面直接處理"。 K8s的原始設計——Service + Endpoints + kube-proxy——在簡單場景依然夠用,但邊界不斷被壓縮。

一個被忽視的替代方案:直接走Pod網絡

回到Networking 101的類比。K8s的Pod網絡是"全連通"的——任何Pod可以直接訪問任何Pod的IP,無需NAT。

這意味著,如果你愿意放棄Service的負載均衡和故障轉移,完全可以自己實現服務發(fā)現。用K8s API Watch(監(jiān)聽)Pod變化,維護本地端點緩存,直接對Pod IP建連接。

一些高性能場景確實這么做。比如Cassandra、Kafka這類數據系統,它們有自己的集群成員協議(Gossip),只需要K8s提供穩(wěn)定的Pod標識(Headless Service + StatefulSet),網絡層完全自建。

更激進的方案是跳過K8s網絡,直接用主機網絡(hostNetwork: true)或SR-IOV(單根I/O虛擬化)網卡直通。延遲最低,但犧牲了K8s的調度靈活性和安全隔離。

選型建議:沒有銀彈,只有權衡

對于25-40歲的技術決策者,我的建議是分層看待:

小規(guī)模集群(<50節(jié)點,<100服務):K8s原生Service + CoreDNS足夠。關注DNS緩存配置,監(jiān)控CoreDNS的轉發(fā)延遲和丟包率。

中等規(guī)模(50-500節(jié)點):評估是否需要Headless Service讓客戶端做負載均衡,或者引入External-DNS把Service同步到外部DNS(如Route53、Cloudflare),簡化跨集群發(fā)現。

大規(guī)?;驈姾弦?guī)場景:Service Mesh是必選項,但不必全盤Istio。Linkerd更輕量,Cilium Service Mesh對eBPF友好團隊更自然。關鍵指標是Sidecar資源占比——如果超過業(yè)務容器的15%,考慮Ambient模式或無Sidecar方案。

混合云/多集群:K8s的Service發(fā)現止步于集群邊界。需要Submariner、Cilium Cluster Mesh或Istio多集群模式打通。這些方案的運維復雜度常被低估,建議從聯邦控制平面(Federation v2)的教訓中吸取經驗——不要過早追求"一個平面管理所有集群"。

一個具體的產品細節(jié):Google GKE(Google Kubernetes Engine)在2023年把Dataplane V2(基于eBPF的網絡策略和可觀測性)設為默認,kube-proxy被完全繞過。這是云廠商層面的優(yōu)化,自建集群的工程師需要評估Cilium或Calico eBPF數據平面的成熟度。

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
胖東來再立功,自選眼鏡超市火爆,7億近視人配鏡應花多少錢?

胖東來再立功,自選眼鏡超市火爆,7億近視人配鏡應花多少錢?

勻楓財技大兜底
2026-03-25 10:26:15
最美女保鏢嚴月霞同志簡歷

最美女保鏢嚴月霞同志簡歷

TVB的四小花
2026-03-25 07:54:32
美容院老板娘大實話:55歲后臉再光也沒用,脫了衣服見真章!

美容院老板娘大實話:55歲后臉再光也沒用,脫了衣服見真章!

距離距離
2026-03-25 16:53:55
姜維和魏延誰更厲害?據正史記載,這兩人壓根不是一個級別的人物

姜維和魏延誰更厲害?據正史記載,這兩人壓根不是一個級別的人物

阿器談史
2026-03-26 15:49:05
NBA西部:前10確定了,馬刺有望爭第1,快船搶7,湖人首輪遇火箭

NBA西部:前10確定了,馬刺有望爭第1,快船搶7,湖人首輪遇火箭

鐵甲西奇
2026-03-26 16:43:09
NBA官方盛贊!楊瀚森G聯賽首次9中9 轟20+9+5秀隔扣混音惜敗馬刺

NBA官方盛贊!楊瀚森G聯賽首次9中9 轟20+9+5秀隔扣混音惜敗馬刺

醉臥浮生
2026-03-26 10:15:20
親戚借車從不加油,這次他故意空著油箱給她,她老公卻急了:我上次不是剛加了600塊的油嗎!

親戚借車從不加油,這次他故意空著油箱給她,她老公卻急了:我上次不是剛加了600塊的油嗎!

品讀時刻
2026-03-25 09:04:33
喪心病狂!河南14歲少年被虐死案:死時穿紙尿褲,胃里空無一物

喪心病狂!河南14歲少年被虐死案:死時穿紙尿褲,胃里空無一物

春日在捕月
2026-03-25 01:00:23
破防!馬英九專訪20分鐘緊急叫停,“失智疑云”背后藏著更大棋局

破防!馬英九專訪20分鐘緊急叫停,“失智疑云”背后藏著更大棋局

戧詞奪理
2026-03-26 11:13:50
轟然倒塌!自嗨鍋母公司破產,從75億估值到清零,只用了4年

轟然倒塌!自嗨鍋母公司破產,從75億估值到清零,只用了4年

流蘇晚晴
2026-03-01 16:48:55
很多中字頭工程局都發(fā)不出工資了!

很多中字頭工程局都發(fā)不出工資了!

黯泉
2026-03-25 21:14:53
張雪峰的影響力,被嚴重低估了

張雪峰的影響力,被嚴重低估了

黔有虎
2026-03-26 14:32:34
國產頂級神劇,只可惜,央視播完就禁了

國產頂級神劇,只可惜,央視播完就禁了

獨立魚
2026-03-23 21:22:17
小米公布實情,大家都被雷軍騙了

小米公布實情,大家都被雷軍騙了

鳴金網
2026-03-26 09:08:36
伊朗警告美國地面戰(zhàn):士兵堅守在前線,必將粉碎敵人進攻!美國防部和軍火巨頭達成框架協議,推動軍工轉入戰(zhàn)時狀態(tài)

伊朗警告美國地面戰(zhàn):士兵堅守在前線,必將粉碎敵人進攻!美國防部和軍火巨頭達成框架協議,推動軍工轉入戰(zhàn)時狀態(tài)

每日經濟新聞
2026-03-26 19:36:05
“根本不敢上路”!深圳男子買全新百萬豪車,修了15次還是壞的!很多車主受害

“根本不敢上路”!深圳男子買全新百萬豪車,修了15次還是壞的!很多車主受害

南方都市報
2026-03-26 09:26:45
四天619次進攻、6090人傷亡:俄春季攻勢為何高傷亡低戰(zhàn)果?

四天619次進攻、6090人傷亡:俄春季攻勢為何高傷亡低戰(zhàn)果?

高博新視野
2026-03-25 08:00:28
百萬女網紅舉報男明星,戀愛中劈腿還未婚生子,男方回應遭全網嘲

百萬女網紅舉報男明星,戀愛中劈腿還未婚生子,男方回應遭全網嘲

白面書誏
2026-03-26 18:13:22
新冠后遺癥對人體的最大影響,很多人深受其害,有些人還不自知

新冠后遺癥對人體的最大影響,很多人深受其害,有些人還不自知

呼吸科大夫胡洋
2026-02-22 11:39:12
賴昌星前妻近狀曝光:拒絕政府安置,獨居3000平老宅,只做一件事

賴昌星前妻近狀曝光:拒絕政府安置,獨居3000平老宅,只做一件事

芳芳歷史燴
2026-03-23 03:53:23
2026-03-26 20:28:49
全棧遛狗員
全棧遛狗員
白天跟需求對線,晚上在小區(qū)遛狗。
181文章數 0關注度
往期回顧 全部

科技要聞

Meta高管狂分百億期權,700名員工卻下崗

頭條要聞

張雪峰留巨額遺產:二婚妻子或拿50% 剩下的女兒占1/3

頭條要聞

張雪峰留巨額遺產:二婚妻子或拿50% 剩下的女兒占1/3

體育要聞

申京努力了,然而杜蘭特啊

娛樂要聞

劉曉慶妹妹發(fā)聲!稱姐姐受身邊人挑撥

財經要聞

油價"馴服"特朗普?一到100美元就TACO

汽車要聞

一汽奧迪A6L e-tron開啟預售 CLTC最大續(xù)航815km

態(tài)度原創(chuàng)

數碼
親子
藝術
本地
公開課

數碼要聞

1+4核,英特爾酷睿3 304處理器現身基準測試

親子要聞

這就是引導型老師的厲害嗎?

藝術要聞

哪一座橋不是風景?

本地新聞

救命,這只醬板鴨已經在我手機復仇了一萬遍

公開課

李玫瑾:為什么性格比能力更重要?

無障礙瀏覽 進入關懷版