Kubernetes Ingress 教程

下面將詳細(xì)介紹ingress 的基本概念、原生 ingress 資源對象以及ingress controller 涉及的概念委乌。

Kubernetes Ingress 是一種資源床牧,用于添加Rules以將流量從外部源路由到 kubernetes 集群中運(yùn)行的應(yīng)用程序。

主要包括下面幾個(gè)方面的內(nèi)容:

  1. 什么是 Kubernetes Ingress遭贸?
  2. 在 Kubernetes Ingress 之前戈咳?
  3. Kubernetes Ingress 是如何工作的?
  4. Kubernetes 入口資源
  5. Kubernetes 入口控制器
  6. 入口控制器如何工作壕吹?
  7. 入口和入口控制器架構(gòu)
  8. Kubernetes 入口控制器列表
  9. 部署你的第一個(gè)入口控制器
  10. Kubernetes Ingress 常見問題解答

Ingress是指進(jìn)入集群的流量著蛙,egress是指離開集群的流量。

image.png

Ingress 是原生的 Kubernetes 資源耳贬,如 pod踏堡、deployments 等。使用 ingress咒劲,您可以維護(hù) DNS 路由配置顷蟆。入口控制器通過從存儲在 etcd 中的入口對象讀取路由規(guī)則來進(jìn)行實(shí)際路由。

讓我們通過一個(gè)高級示例來了解Ingress腐魂。

在沒有 Kubernetes ingress 的情況下帐偎,要將應(yīng)用程序暴露給外界,您將向部署添加服務(wù)類型 Loadbalancer挤渔。這是它的樣子肮街。(我已經(jīng)顯示了 nodePort 只是為了顯示流量)

image.png

在相同的實(shí)現(xiàn)中,對于Ingress判导,在負(fù)載均衡器和 kubernetes 服務(wù)端點(diǎn)之間有一個(gè)反向代理層(入口控制器實(shí)現(xiàn))嫉父。

這是Ingress實(shí)現(xiàn)的一個(gè)非常高級的視圖沛硅。在后面的部分中,我們將看到涵蓋所有關(guān)鍵概念的詳細(xì)架構(gòu)绕辖。

image.png

在 Kubernetes Ingress 之前摇肌?

在 Kubernetes Ingress 穩(wěn)定之前,自定義 Nginx 或 HAproxy kubernetes 部署將作為 Loadbalancer 服務(wù)公開仪际,用于將外部流量路由到內(nèi)部集群服務(wù)围小。

路由規(guī)則作為配置映射添加到 Nginx/HAProxy pod 中。每當(dāng) dns 發(fā)生變化或要添加新的路由條目時(shí)树碱,它都會在 configmap 中更新肯适,并且 pod 配置會重新加載,或者重新部署成榜。

Kubernetes ingress 也遵循類似的模式框舔,將路由規(guī)則維護(hù)為本地 Kubernetes ingress 對象而不是 configmap。

在 Nginx/HAProxy 的位置赎婚,我們有入口控制器刘绣、Nginx/HAProxy 的自定義版本等,它可以動(dòng)態(tài)獲取路由規(guī)則挣输。

此外纬凤,還有使用 consul 和其他服務(wù)發(fā)現(xiàn)工具的實(shí)現(xiàn),無需停機(jī)即可將 DNS 更改更新到 Nginx 或 HAproxy撩嚼,這帶來了作為入口的確切實(shí)現(xiàn)停士。

當(dāng)談到 openshift 時(shí),路由器(HAproxy 實(shí)現(xiàn))概念使得在集群外暴露服務(wù)端點(diǎn)變得容易绢馍。您所要做的就是進(jìn)行路由器配置(Openshift YAML 對象)向瓷,openshift 路由器會處理所有事情肠套。它類似于 Kubernetes 入口舰涌。

Kubernetes Ingress 是如何工作的?

如果您是初學(xué)者并試圖了解 ingress你稚,可能會對它的工作原理感到困惑瓷耙。

例如,您可能會問刁赖,嘿搁痛,我創(chuàng)建了入口規(guī)則,但我不確定如何將其映射到域名或?qū)⑼獠苛髁柯酚傻絻?nèi)部部署宇弛。

您需要非常清楚兩個(gè)關(guān)鍵概念才能理解這一點(diǎn)鸡典。

  1. Kubernetes Ingress Resource: Kubernetes Ingress Resource 負(fù)責(zé)存儲集群中的 DNS 路由規(guī)則。
  2. Kubernetes 入口控制器: Kubernetes 入口控制器(Nginx/HAProxy 等)負(fù)責(zé)通過訪問通過入口資源應(yīng)用的 DNS 規(guī)則來進(jìn)行路由枪芒。
image.png

讓我們詳細(xì)看看入口資源和入口控制器彻况。

Kubernetes 入口資源

Kubernetes Ingress 資源是一種本地 kubernetes 資源谁尸,您可以在其中指定 DNS 路由規(guī)則。這意味著纽甘,您將外部 DNS 流量映射到內(nèi)部 Kubernetes 服務(wù)端點(diǎn)良蛮。

它需要一個(gè)入口控制器來路由入口對象中指定的規(guī)則。讓我們來看看一個(gè)非澈酚基本的入口資源决瞳。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  namespace: dev
spec:
  rules:
  - host: test.apps.example.com
    http:
      paths:
      - backend:
          serviceName: hello-service
          servicePort: 80

上面的聲明意味著,所有對的調(diào)用都應(yīng)該命中駐留在 dev 命名空間中的test.apps.example.com命名服務(wù)左权。hello-service

如您所見皮胡,它只有路由規(guī)則。您可以為基于路徑的路由添加多個(gè)路由端點(diǎn)赏迟,您可以添加 TLS 配置等胸囱。

關(guān)于入口對象需要了解的關(guān)鍵事項(xiàng)。

  1. 入口對象需要入口控制器來路由流量瀑梗。
  2. 最重要的是烹笔,外部流量不會到達(dá)入口 API,而是會到達(dá)直接使用負(fù)載均衡器配置的入口控制器服務(wù)端點(diǎn)抛丽。

現(xiàn)在谤职,讓我們了解入口控制器。

Kubernetes 入口控制器

入口控制器不是原生的 Kubernetes 實(shí)現(xiàn)亿鲜。這意味著它在集群中不是默認(rèn)的允蜈。

我們需要為入口規(guī)則設(shè)置一個(gè)入口控制器。有幾個(gè)可用的開源和企業(yè)入口控制器蒿柳。

入口控制器通常是集群中的反向 Web 代理服務(wù)器實(shí)現(xiàn)饶套。在 kubernetes 術(shù)語中,它是一個(gè)反向代理服務(wù)器部署為kubernetes 部署暴露給服務(wù)類型 Loadbalancer垒探。

您可以將集群中的多個(gè)入口控制器映射到多個(gè)負(fù)載均衡器妓蛮。每個(gè)入口控制器都應(yīng)該有一個(gè)名為ingress-class 的唯一標(biāo)識符添加到注釋中。

入口控制器如何工作圾叼?

Nginx 是廣泛使用的入口控制器之一蛤克。

那么讓我們以 Nginx 入口控制器實(shí)現(xiàn)為例來了解它是如何工作的。

image.png
  1. Nginx controller pod 中的文件是一個(gè) lua 模板夷蚊,可以與Kubernetes ingress APInginx.conf通信并實(shí)時(shí)獲取流量路由的最新值构挤。這是模板文件。
  2. Nginx 控制器與 Kubernetes ingress API 對話惕鼓,以檢查是否為流量路由創(chuàng)建了任何規(guī)則筋现。
  3. 如果找到任何入口規(guī)則,Nginx 控制器會在/etc/nginx/conf.d每個(gè) nginx pod 內(nèi)的位置生成一個(gè)路由配置。
  4. 對于您創(chuàng)建的每個(gè)入口資源矾飞,Nginx 都會在內(nèi)部位置生成一個(gè)配置/etc/nginx/conf.d彻犁。
  5. /etc/nginx/nginx.conf文件包含來自etc/nginx/conf.d.
  6. 如果您使用新配置更新入口對象,Nginx 配置將再次更新并重新加載配置凰慈。

如果您使用 exec 連接到 Nginx ingress controller pod 并檢查該/etc/nginx/nginx.conf文件汞幢,您可以看到在 conf 文件中應(yīng)用的 ingress 對象中指定的所有規(guī)則。

入口和入口控制器架構(gòu)

這是解釋 kubernetes 集群上的入口和入口控制器設(shè)置的架構(gòu)圖微谓。

它顯示了將流量路由到兩個(gè)payment應(yīng)用auth程序的入口規(guī)則

現(xiàn)在森篷,如果您查看架構(gòu),它會更有意義豺型,并且您可能能夠理解每個(gè)入口工作流的工作原理仲智。

image.png

部署你的第一個(gè)入口控制器

為了更好地理解入口和入口控制器,您應(yīng)該親自動(dòng)手實(shí)現(xiàn)姻氨。

我已經(jīng)發(fā)布了關(guān)于設(shè)置 Nginx 入口控制器的詳細(xì)指南钓辆。

我還詳細(xì)介紹了一些基本概念,例如入口準(zhǔn)入控制器肴焊。

此外前联,我已經(jīng)給出了逐步的清單部署和解釋以獲得深刻的理解。

查看Nginx 入口控制器設(shè)置指南娶眷。

Kubernetes Ingress 常見問題解答

Ingress 是負(fù)載均衡器嗎似嗤?

Ingress 不是負(fù)載均衡器。它包含所有路由規(guī)則届宠、自定義標(biāo)頭和 TLS 配置烁落。入口控制器充當(dāng)負(fù)載平衡器。

為什么我需要入口控制器豌注?

入口控制器負(fù)責(zé)將外部流量實(shí)際路由到 kubernetes 服務(wù)端點(diǎn)伤塌。沒有入口控制器,添加到入口的路由規(guī)則將不起作用轧铁。

ingress 和 Nginx 有什么區(qū)別每聪?

Ingress 是一個(gè) kubernetes 對象。Nginx 用作入口控制器(反向代理)属桦。

我們可以使用入口將流量路由到多條路徑嗎熊痴?

是的他爸。使用單個(gè)入口定義聂宾,您可以添加多個(gè)基于路徑的路由配置。

ingress是否支持TLS配置诊笤?

是的系谐。您可以在入口對象定義中包含 TLS 配置。TLS 證書將作為 Kubernetes 秘密添加并在入口對象中引用。

結(jié)論

在本Kubernetes Ingress 教程中纪他,我們了解了 ingress 在 Kubernetes 中的工作原理鄙煤。及其相關(guān)組件。為生產(chǎn)選擇入口控制器取決于各種因素和要求茶袒。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梯刚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子薪寓,更是在濱河造成了極大的恐慌亡资,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件向叉,死亡現(xiàn)場離奇詭異锥腻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)母谎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門瘦黑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奇唤,你說我怎么就攤上這事幸斥。” “怎么了咬扇?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵睡毒,是天一觀的道長。 經(jīng)常有香客問我冗栗,道長演顾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任隅居,我火速辦了婚禮钠至,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胎源。我一直安慰自己棉钧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布涕蚤。 她就那樣靜靜地躺著宪卿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪万栅。 梳的紋絲不亂的頭發(fā)上佑钾,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機(jī)與錄音烦粒,去河邊找鬼休溶。 笑死代赁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的兽掰。 我是一名探鬼主播芭碍,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼孽尽!你這毒婦竟也來了窖壕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤杉女,失蹤者是張志新(化名)和其女友劉穎艇拍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宠纯,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卸夕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了婆瓜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片快集。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖廉白,靈堂內(nèi)的尸體忽然破棺而出个初,到底是詐尸還是另有隱情,我是刑警寧澤猴蹂,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布院溺,位于F島的核電站,受9級特大地震影響磅轻,放射性物質(zhì)發(fā)生泄漏珍逸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一聋溜、第九天 我趴在偏房一處隱蔽的房頂上張望谆膳。 院中可真熱鬧,春花似錦撮躁、人聲如沸漱病。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杨帽。三九已至,卻和暖如春嗤军,著一層夾襖步出監(jiān)牢的瞬間注盈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工型雳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留当凡,地道東北人山害。 一個(gè)月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓纠俭,卻偏偏與公主長得像沿量,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子冤荆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

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