Kubernetes Ingress 教程

下面將詳細(xì)介紹ingress 的基本概念、原生 ingress 資源對(duì)象以及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 路由配置。入口控制器通過從存儲(chǔ)在 etcd 中的入口對(duì)象讀取路由規(guī)則來進(jìn)行實(shí)際路由。

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

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

image.png

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

這是Ingress實(shí)現(xiàn)的一個(gè)非常高級(jí)的視圖。在后面的部分中,我們將看到涵蓋所有關(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í),它都會(huì)在 configmap 中更新,并且 pod 配置會(huì)重新加載,或者重新部署。

Kubernetes ingress 也遵循類似的模式,將路由規(guī)則維護(hù)為本地 Kubernetes ingress 對(duì)象而不是 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 對(duì)象),openshift 路由器會(huì)處理所有事情。它類似于 Kubernetes 入口。

Kubernetes Ingress 是如何工作的?

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

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

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

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

讓我們?cè)敿?xì)看看入口資源和入口控制器。

Kubernetes 入口資源

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

它需要一個(gè)入口控制器來路由入口對(duì)象中指定的規(guī)則。讓我們來看看一個(gè)非?;镜娜肟谫Y源。

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

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

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

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

  1. 入口對(duì)象需要入口控制器來路由流量。
  2. 最重要的是,外部流量不會(huì)到達(dá)入口 API,而是會(huì)到達(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)識(shí)符添加到注釋中。

入口控制器如何工作?

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

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

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

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

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

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

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

現(xiàn)在,如果您查看架構(gòu),它會(huì)更有意義,并且您可能能夠理解每個(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 對(duì)象。Nginx 用作入口控制器(反向代理)。

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

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

ingress是否支持TLS配置?

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

結(jié)論

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容