理解Kubernetes的NodePort豺撑、LoadBalancer和Ingress

這三個東西都可以實現(xiàn)將集群內(nèi)的服務(wù)暴露到集群外烈疚,那么它們到底有什么不同,要如何正確地使用這些組件聪轿,希望通過這篇文章爷肝,可以給大家一些啟示。首先明確一點,NodePort和LoadBalancer指Kubernetes Service組件的兩種類型阶剑。
在正式開始之前跃巡,有必要對Service做簡單介紹。Service是一組Pod的抽象牧愁,雖然在集群中Pod可以通過IP直達素邪,但是Pod不穩(wěn)定,它可能會經(jīng)常死掉猪半,這時集群會重新啟動一個Pod兔朦,這是一個全新的Pod,它的IP地址會發(fā)生變化磨确,這樣不利于客戶端訪問沽甥。為了解決這個問題,Kubernetes引入了Service組件乏奥,從Pod創(chuàng)建之初到人為刪除這段時間渤刃,為其創(chuàng)建的Service訪問方式都是穩(wěn)定的,即它的訪問IP不變禽拔,再配合集群內(nèi)置的DNS服務(wù)胜茧,客戶端可以利用不變的Service名稱或Service IP訪問到目標(biāo)Pods,而且Service還實現(xiàn)了簡單的負載均衡功能骗炉。
到這里照宝,還有一個很重要的問題沒有解決,在Kubernetes集群外如何訪問集群內(nèi)的服務(wù)句葵,這就引出了標(biāo)題中列舉的三個對象厕鹃,下面逐一介紹。
NodePort
Nodeport是Service的三種類型之一(ExternalName不常用故除外)乍丈,其他兩種是ClusterIP和LoadBalancer剂碴。當(dāng)Service工作在NodePort類型時,默認每個Node會在全部網(wǎng)絡(luò)接口開啟一個端口來轉(zhuǎn)發(fā)對集群內(nèi)服務(wù)的請求轻专。當(dāng)請求到來時忆矛,Node會轉(zhuǎn)發(fā)請求到集群中的服務(wù)。這樣就帶來一個問題铭若,請求的目標(biāo)Node可能會Down掉或其他別的原因?qū)е戮W(wǎng)絡(luò)不能訪問洪碳,NodePort還有一個問題就是對外暴露的端口有限制,默認端口范圍是30,000-32,767叼屠。這就限制了可以對外暴露服務(wù)的個數(shù)瞳腌,使用這些不易記錄的端口訪問服務(wù)也是讓人頭疼的問題,這就引入了下一個Service類型:LoadBalancer镜雨。
LoadBalancer
大多數(shù)公有云平臺都支持創(chuàng)建這種類型的服務(wù)嫂侍,每個服務(wù)可以支持多種協(xié)議和多個端口,使用單個IP來訪問。因為需要在集群外訪問內(nèi)部服務(wù)挑宠,所以這個IP地址是公有的菲盾,這會產(chǎn)生額外的費用。如果暴露的服務(wù)很多各淀,使用時需要慎重懒鉴。在私有云環(huán)境中,不能創(chuàng)建此類的服務(wù)碎浇,可以創(chuàng)建NodePort類型的服務(wù)然后使用HAproxy來充當(dāng)Load Balancer临谱,這樣和公有云平臺的LoadBalancer差別不大。Service的三種類型:ClusterIP奴璃、NodePort悉默、LoadBalancer,后一種是前一種的增強苟穆,NodePort類型Service會創(chuàng)建ClusterIP類型Service抄课,LoadBalancer類型Service會創(chuàng)建NodePort和ClusterIP類型Service。Service組件依賴操作系統(tǒng)中的iptables或ipvs雳旅,這是Service的靈魂跟磨。有一點需要注意,當(dāng)使用NodePort類型的服務(wù)時岭辣,請求會直接轉(zhuǎn)發(fā)給實際的Pod而不用轉(zhuǎn)發(fā)給Service的Cluster IP(kube-proxy工作在iptables模式)吱晒,具體實現(xiàn)方法可以在搜索引擎上搜“NodePort類型Service的工作原理”甸饱。
Ingress
前面介紹的內(nèi)容都圍繞Service沦童,主要解決網(wǎng)絡(luò)層的問題,Ingress的出現(xiàn)主要是解決應(yīng)用層的問題叹话。Ingress實際上充當(dāng)一個反向代理的角色偷遗,和Nginx的功能很類似。Kubernetes中廣泛使用的Nginx Ingress其本質(zhì)就是一個Nginx服務(wù)驼壶。Ingress依賴LoadBalancer類型的Service氏豌,因為它自己沒有暴露集群內(nèi)服務(wù)到外部的能力。這里以Nginx Ingress為例热凹,介紹它的工作原理泵喘,其他類型的Ingress可以參考其官方文檔介紹。

通過Ingress暴露集群內(nèi)服務(wù)(圖片采集官網(wǎng))

Nginx Ingress主要包含兩個部分:Ingress Controller和Nginx般妙,Controller通過Watch的方式訪問API服務(wù)纪铺,從中采集它感興趣的資源更新,例如Ingress資源碟渺,然后操作Nginx鲜锚,修改配置文件nginx.conf,更新證書、重啟Nginx等芜繁。它就像是一個Nginx的管理者旺隙,工程師發(fā)送指令到集群,Controller從API服務(wù)器接收到工程師發(fā)送的指令骏令,然后操作Nginx蔬捷。大體工作流程就是這樣。
上圖中有一個“Public Endpoint”組件榔袋,它可以通過LoadBalancer類型的Service來實現(xiàn)抠刺,下面yaml片段來自阿里云上真實的nginx-ingress服務(wù)(IP地址和端口做了脫敏操作):

......
spec:
  clusterIP: 172.14.13.67
  externalTrafficPolicy: Cluster
  ports:
  - name: http
    nodePort: 31800
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    nodePort: 31700
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: ingress-nginx
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 47.215.177.38

集群部署Ingress資源后,進入集群流量的第一站就是Nginx Ingress中的Nginx服務(wù)摘昌,由它做HTTP層的負載均衡速妖,還有TLS終結(jié)等工作。
總結(jié)
文章對NodePort和LoadBalancer類型的Service做了簡單介紹聪黎,在測試環(huán)境中如果需要快速將服務(wù)從集群內(nèi)暴露出來罕容,可以使用NodePort類型的Service,生產(chǎn)環(huán)境稿饰,如果使用了阿里云或騰訊云可以使用LoadBalancer類型的Service并配合Ingress锦秒,如果沒有也可以使用NodePort類型的Service并配置Haproxy等來實現(xiàn)負載均衡。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喉镰,一起剝皮案震驚了整個濱河市旅择,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侣姆,老刑警劉巖生真,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捺宗,居然都是意外死亡柱蟀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門蚜厉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來长已,“玉大人,你說我怎么就攤上這事昼牛∈跷停” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵贰健,是天一觀的道長胞四。 經(jīng)常有香客問我,道長霎烙,這世上最難降的妖魔是什么撬讽? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任蕊连,我火速辦了婚禮,結(jié)果婚禮上游昼,老公的妹妹穿的比我還像新娘甘苍。我一直安慰自己,他們只是感情好烘豌,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布载庭。 她就那樣靜靜地躺著,像睡著了一般廊佩。 火紅的嫁衣襯著肌膚如雪囚聚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天标锄,我揣著相機與錄音顽铸,去河邊找鬼。 笑死料皇,一個胖子當(dāng)著我的面吹牛谓松,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播践剂,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鬼譬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了逊脯?” 一聲冷哼從身側(cè)響起优质,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎军洼,沒想到半個月后巩螃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡歉眷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年牺六,在試婚紗的時候發(fā)現(xiàn)自己被綠了颤枪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汗捡。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖畏纲,靈堂內(nèi)的尸體忽然破棺而出扇住,到底是詐尸還是另有隱情,我是刑警寧澤盗胀,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布艘蹋,位于F島的核電站,受9級特大地震影響票灰,放射性物質(zhì)發(fā)生泄漏女阀。R本人自食惡果不足惜宅荤,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浸策。 院中可真熱鬧冯键,春花似錦、人聲如沸庸汗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚯舱。三九已至改化,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枉昏,已是汗流浹背陈肛。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留兄裂,地道東北人燥爷。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像懦窘,于是被迫代替她去往敵國和親前翎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容