k8s?Ingress實(shí)現(xiàn)流量路由規(guī)則控制的定義格式類型
前言
在 Kubernetes 中,Ingress 是一個非常重要的概念。它可以將外部流量路由到 Kubernetes 集群內(nèi)的不同服務(wù)。
Ingress 可以讓你更加方便地管理 HTTP 和 HTTPS 流量,并且可以配置負(fù)載均衡、SSL 證書等功能。本文將會介紹 Ingress 的定義、類型、更新、以及相關(guān)的控制器和類別。
什么是 Ingress
通常情況下,service 和 pod 的 IP 僅可在集群內(nèi)部訪問。集群外部的請求需要通過負(fù)載均衡轉(zhuǎn)發(fā)到 service 在 Node 上暴露的 NodePort 上,然后再由 kube-proxy 通過邊緣路由器 (edge router) 將其轉(zhuǎn)發(fā)給相關(guān)的 Pod 或者丟棄。
Ingress 是 Kubernetes 的一個 API 對象,它定義了如何將外部流量路由到 Kubernetes 集群內(nèi)的不同服務(wù)。它可以通過 HTTP 和 HTTPS 協(xié)議進(jìn)行流量路由,并且支持域名和路徑的匹配。
Ingress 是一個非常強(qiáng)大的功能,可以讓你更加方便地管理流量,并且可以輕松實(shí)現(xiàn)負(fù)載均衡、SSL 證書等功能。
Ingress 的定義格式
Ingress 的定義格式如下:
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: ingress-name annotations: key: value spec: rules: - host: example.com http: paths: - path: /path backend: serviceName: service-name servicePort: service-port
其中,apiVersion
字段表示 Ingress 對象的 API 版本,kind
字段表示對象的類型,metadata
字段包含了 Ingress 對象的元數(shù)據(jù),例如對象名稱和標(biāo)簽等,spec
字段則包含了 Ingress 對象的配置信息,例如規(guī)則和后端服務(wù)等。
Ingress 的類型有哪幾種?
Kubernetes 支持多種不同類型的 Ingress,每種類型都有自己的特點(diǎn)和用途。下面是一些常見的 Ingress 類型:
1. Simple fanout
簡單的 Fanout Ingress 會將流量路由到指定的多個服務(wù)上。它可以通過域名和路徑進(jìn)行匹配,并且支持負(fù)載均衡功能。
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: simple-fanout-ingress spec: rules: - host: example.com http: paths: - path: /service1 backend: serviceName: service1 servicePort: 80 - path: /service2 backend: serviceName: service2 servicePort: 80
2. Name-based virtual hosting
基于名稱的虛擬主機(jī) Ingress 會將流量路由到指定的服務(wù)上,具體的服務(wù)由請求的 Host 頭部決定。它可以通過域名進(jìn)行匹配,并且支持負(fù)載均衡和 SSL 證書等功能。
foo.example.com --| |-> foo.example.com s1:80 | 168.92.133.131 | bar.example.com --| |-> bar.example.com s2:80
下面是一個基于 Host header 路由請求的 Ingress:
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: name-based-virtual-hosting-ingress spec: rules: - host: foo.example.com http: paths: - backend: serviceName: service1 servicePort: 80 - host: bar.example.com http: paths: - backend: serviceName: service2 servicePort: 80
3. Path-based routing
基于路徑的路由 Ingress 會將流量路由到指定的服務(wù)上,具體的服務(wù)由請求的 URL 路徑?jīng)Q定。它可以通過路徑進(jìn)行匹配,并且支持負(fù)載均衡和 SSL 證書等功能。
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: path-based-routing-ingress spec: rules: - host: example.com http: paths: - path: /service1 backend: serviceName: service1 servicePort: 80 - path: /service2 backend: serviceName: service2 servicePort: 80
該如何實(shí)現(xiàn)更新 Ingress
更新 Ingress 非常簡單,只需要修改 Ingress 對象的定義文件,然后執(zhí)行kubectl apply
命令即可。例如,假設(shè)我們想要將simple-fanout-ingress
的路徑/service1
修改為/service3
,則可以編輯 Ingress 對象的定義文件,然后執(zhí)行以下命令:
$ kubectl apply -f ingress.yaml
其中,ingress.yaml
是 Ingress 對象的定義文件。
更新后:
$ kubectl get ing NAME RULE BACKEND ADDRESS test - 168.92.133.131 foo.example.com /foo s1:80 bar.example.com /bar s2:80
Ingress Controller
Ingress Controller 是一個運(yùn)行在 Kubernetes 集群內(nèi)的服務(wù),它可以監(jiān)聽 Kubernetes API 服務(wù)器上的 Ingress 對象,并將外部流量路由到 Kubernetes 集群內(nèi)的不同服務(wù)。
每種類型的 Ingress 都需要特定的 Ingress Controller 來處理。例如,簡單的 Fanout Ingress 需要使用 Nginx Ingress Controller,而基于名稱的虛擬主機(jī) Ingress 則需要使用 Traefik Ingress Controller。
Ingress Class
Ingress Class 是一個可選的字段,它可以讓你更加精細(xì)地控制 Ingress 對象的路由方式。
每個 Ingress 對象都可以指定一個 Ingress Class,這個 Ingress Class 可以對應(yīng)不同的 Ingress Controller,并且可以讓你更加方便地控制路由方式。
總結(jié)
Ingress 是 Kubernetes 中非常重要的一個資源對象,它可以將外部流量路由到 Kubernetes 集群內(nèi)的不同服務(wù),并且支持多種不同類型的路由方式。
換言之,Ingress 就是為進(jìn)入集群的請求提供路由規(guī)則的集合,可以給 service 提供集群外部訪問的 URL、負(fù)載均衡、SSL 終止、HTTP 路由等功能。
以上就是k8s Ingress 實(shí)現(xiàn)流量路由規(guī)則控制的詳細(xì)內(nèi)容,更多關(guān)于k8s Ingress 實(shí)現(xiàn)流量路由規(guī)則控制的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Kubernetes?Ingress實(shí)現(xiàn)細(xì)粒度IP訪問控制
這篇文章主要為大家介紹了Kubernetes?Ingress實(shí)現(xiàn)細(xì)粒度IP訪問控制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04青龍面板拉庫解決沒有或丟失依賴can‘t?find?module的保姆級教程(附青龍面板腳本倉庫)
這篇文章主要介紹了青龍面板拉庫解決沒有或丟失依賴can‘t?find?module的保姆級教程(附青龍面板腳本倉庫),需要的朋友可以參考下2022-05-05Kubernetes中使用臨時容器進(jìn)行故障排查的方法
在使用Kubernetes時,用戶常常會遇到一些錯誤和迷惑,下面這篇文章主要給大家介紹了關(guān)于Kubernetes中使用臨時容器進(jìn)行故障排查的相關(guān)資料,需要的朋友可以參考下2022-03-03在Kubernetes集群中搭建Istio微服務(wù)網(wǎng)格的過程詳解
這篇文章主要介紹了在Kubernetes集群中搭建Istio微服務(wù)網(wǎng)格,我們采用default配置檔部署istio網(wǎng)格,istioctl?install命令不指定任何配置檔默認(rèn)就是呀default配置檔,需要的朋友可以參考下2022-05-05使用k8tz解決pod內(nèi)的時區(qū)問題(坑的解決)
時區(qū)的不一致,會帶來很多困擾。即使代碼與時區(qū)無關(guān),但容器日志與系統(tǒng)日志時間相關(guān)聯(lián)排查問題也會讓人頭疼,這篇文章主要介紹了使用k8tz優(yōu)雅的解決pod內(nèi)的時區(qū)問題,需要的朋友可以參考下2022-10-10