2020-03-26 Kubernetes-Ingress Controller

Ingress Controller 和之前所講的DaemonSet 、Deployment等不同端姚,Ingress Controller不是Controller Manager中的一部分溜族,他只是一個或一組獨立的Pod資源讹俊,他通常就是一個運行著有七層代理能力或調(diào)度能力的應(yīng)用,比如:NGINX煌抒、HAproxy仍劈、Traefik、Envoy

之前所講到的Service他的工作原理是基于iptables或ipvs的寡壮,iptables和ipvs是四層代理的贩疙,四層代理有個缺陷就是他只是工作在tcp/ip協(xié)議棧讹弯。

如果外部請求是HTTPS的請求,Service是無法調(diào)度的这溅。如果構(gòu)建在內(nèi)部的服務(wù)是HTTP闸婴,還希望用Service調(diào)度的話,那么證書和私鑰的配置問題就來了芍躏。

外部解析一般是基于域名解析,解析到的地址也是調(diào)度器的地址降狠,而sso會話是和后端服務(wù)器建立的連接对竣,那么就應(yīng)該在每一臺后端服務(wù)器都配置證書。

SSO既貴又慢榜配,如果我們認(rèn)為內(nèi)部網(wǎng)絡(luò)是安全的否纬,就可以在接入層就卸載SSO會話,外部使用HTTPS通信蛋褥,而內(nèi)部使用HTTP通信临燃。所以要換一種調(diào)度方式
在Kubernetes中采用一種獨特的方式實現(xiàn)。

在提供服務(wù)的pod之前再加一層烙心,后端pod就采用明文的HTTP膜廊,中間加的那層調(diào)度器Pod運行一個七層的應(yīng)用比如NGINX、HAproxy淫茵、Traefik爪瓜、Envoy當(dāng)用戶請求時,先到達(dá)這個獨特的調(diào)度器匙瘪,而不是直接到達(dá)后端的Pod铆铆,Pod和Pod之間由于是在同一網(wǎng)段可以直接通信,無需經(jīng)過Service丹喻。

這個Pod就叫做Ingress Controller薄货。假如我們有三個節(jié)點,那么可以使用DaemonSet在每個節(jié)點之上都部署一個Ingress Controller碍论,但是如果有3000個節(jié)點呢谅猾?
DaemonSet不止可在每個節(jié)點上部署一個Pod副本,還可以在指定的節(jié)點上部署一個Pod副本骑冗,那么我們就可以單獨拿出來幾個幾點作為ingress Controller的專用節(jié)點赊瞬,把專用節(jié)點打上污點,讓其他Pod都調(diào)度不上來贼涩,只有DaemonSet定義的ingress可以在此之上部署巧涧,并且能容忍污點。

試想一種場景:

當(dāng)Ingress Controller調(diào)度不止一個Web服務(wù)的時候遥倦,我可以采用基于主機(jī)名的Virtual Host或URL映射的方式谤绳,但是當(dāng)無狀態(tài)的后端被Kill或增加減少的時候占锯,Pod IP地址必然發(fā)生變化,這時候Ingress Controller是如何跟著做動態(tài)的變更呢缩筛?

答案是 Ingress Controller仍需要借助Service的Selector功能幫助分類消略,關(guān)聯(lián)著后端所有符合條件的Pod,當(dāng)上述情況發(fā)生時瞎抛,他會將變化反映至Ingress資源艺演,(注意Ingress資源和Ingress Controller是兩個概念。)再由Ingress資源把變化信息注入到Ingress Controller的配置文件中(非常方便)桐臊,進(jìn)而觸發(fā)Ingress Controller重載配置文件的動作胎撤。

image.png

具體搭建步驟

配置一個Ingress Controller

1 · 創(chuàng)建一個名稱空間
kubectl create namespace ingress-nginx
2 · 創(chuàng)建一個configmap (用于配置文件注入)
3 · 配置rbac用于創(chuàng)建集群角色,權(quán)限控制断凶,為Ingress Controller提供他到達(dá)不了的namespace的權(quán)限
4 · with-rbac
5 · tcp-service
以上配置文件都可以到GitHub中Kubernetes官方站點的Ingress-Nginx的deploy文件夾下獲取
如果GitHub下載太慢可以選擇需要的文件下載

image.png

下載好后kubectl apply -f ./
直接指定目錄即可完成所有創(chuàng)建(前提要先創(chuàng)建namespace)
image.png

image.png

※※另一種簡便部署Ingress Controller的辦法

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
效果和以上是一樣的伤提,參考官網(wǎng)(需要翻墻)
https://kubernetes.github.io/ingress-nginx/

為確保Ingress Controller能夠接入外部流量第一種做法是為他添加一個類型為NodePort的Service,根據(jù)官網(wǎng)介紹 命令為
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

而另一種做法是將Ingress Controller與宿主機(jī)共享網(wǎng)絡(luò)名稱空間认烁,并且要確保宿主機(jī)的80和443端口沒有被占用肿男,因為Ingress Controller要監(jiān)聽這兩個端口。

由于官方給的配置文件端口是隨機(jī)的却嗡,建議下載下來手動指定端口30080和30443

此時在外部節(jié)點訪問NodeIp:30080應(yīng)該可以顯示404回顯舶沛, 代表Ingress Controller已經(jīng)配通,顯示default backend 404 是因為后端的規(guī)則還沒有寫窗价,接下來開始配置Ingress冠王。

創(chuàng)建 Ingress

創(chuàng)建之前應(yīng)先創(chuàng)建后端被調(diào)度的Pod及Service


image.png

把剛剛創(chuàng)建好的myapp通過Ingress發(fā)布出去,注意apiVersion比較獨特舌镶。


image.png

創(chuàng)建好之后柱彻,便將生成好的配置文件立即注入到Ingress Controller中了

image.png

進(jìn)入到Ingress Controller 中查看 nginx.conf
image.png

image.png

在從外部訪問之前要做好域名解析映射 vim /etc/hosts
訪問效果: ↓
image.png

拓展

在此Ingress Controller上我們嘗試再調(diào)度一個web,此次并且是HTTPS的Tomcat
首先部署三個Tomcat并配置一個Service


image.png

因為此次要做個通過HTTPS訪問的TOMCAT餐胀,所以我們要先做一個證書 哟楷,并且轉(zhuǎn)換成K8s能夠識別的格式


image.png

再做一個Ingress


image.png

應(yīng)用配置文件后返回到Ingress Controller看nginx.conf配置文件卖擅,已經(jīng)可以看到證書已被應(yīng)用惩阶。


image.png

訪問效果 : ↓
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末断楷,一起剝皮案震驚了整個濱河市崭别,隨后出現(xiàn)的幾起案子恐锣,更是在濱河造成了極大的恐慌舞痰,老刑警劉巖土榴,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異响牛,居然都是意外死亡玷禽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門呀打,熙熙樓的掌柜王于貴愁眉苦臉地迎上來论衍,“玉大人,你說我怎么就攤上這事聚磺。” “怎么了炬丸?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵瘫寝,是天一觀的道長。 經(jīng)常有香客問我稠炬,道長焕阿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任首启,我火速辦了婚禮暮屡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毅桃。我一直安慰自己褒纲,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布钥飞。 她就那樣靜靜地躺著,像睡著了一般彻秆。 火紅的嫁衣襯著肌膚如雪唇兑。 梳的紋絲不亂的頭發(fā)上扎附,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天针肥,我揣著相機(jī)與錄音慰枕,去河邊找鬼具帮。 笑死,一個胖子當(dāng)著我的面吹牛掘猿,可吹牛的內(nèi)容都是我干的稠通。 我是一名探鬼主播改橘,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碌识!你這毒婦竟也來了丸冕?” 一聲冷哼從身側(cè)響起胖烛,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎趟畏,沒想到半個月后赋秀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猎莲,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡樟遣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了瞻佛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伤柄。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡考抄,死狀恐怖川梅,靈堂內(nèi)的尸體忽然破棺而出贫途,到底是詐尸還是另有隱情姨裸,我是刑警寧澤傀缩,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站斤葱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏汤纸。R本人自食惡果不足惜蹲嚣,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一隙畜、第九天 我趴在偏房一處隱蔽的房頂上張望议惰。 院中可真熱鬧言询,春花似錦运杭、人聲如沸辆憔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绘沉。三九已至梆砸,卻和暖如春帖世,著一層夾襖步出監(jiān)牢的瞬間赂弓,已是汗流浹背盈魁。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工杨耙, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留珊膜,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像塑陵,于是被迫代替她去往敵國和親蜡励。 傳聞我的和親對象是個殘疾皇子巍虫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

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