k8s?Ingress實(shí)現(xiàn)流量路由規(guī)則控制的定義格式類型
前言
在 Kubernetes 中,Ingress 是一個(gè)非常重要的概念。它可以將外部流量路由到 Kubernetes 集群內(nèi)的不同服務(wù)。
Ingress 可以讓你更加方便地管理 HTTP 和 HTTPS 流量,并且可以配置負(fù)載均衡、SSL 證書等功能。本文將會(huì)介紹 Ingress 的定義、類型、更新、以及相關(guān)的控制器和類別。
什么是 Ingress

通常情況下,service 和 pod 的 IP 僅可在集群內(nèi)部訪問。集群外部的請(qǐng)求需要通過負(fù)載均衡轉(zhuǎn)發(fā)到 service 在 Node 上暴露的 NodePort 上,然后再由 kube-proxy 通過邊緣路由器 (edge router) 將其轉(zhuǎn)發(fā)給相關(guān)的 Pod 或者丟棄。
Ingress 是 Kubernetes 的一個(gè) API 對(duì)象,它定義了如何將外部流量路由到 Kubernetes 集群內(nèi)的不同服務(wù)。它可以通過 HTTP 和 HTTPS 協(xié)議進(jìn)行流量路由,并且支持域名和路徑的匹配。
Ingress 是一個(gè)非常強(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 對(duì)象的 API 版本,kind字段表示對(duì)象的類型,metadata字段包含了 Ingress 對(duì)象的元數(shù)據(jù),例如對(duì)象名稱和標(biāo)簽等,spec字段則包含了 Ingress 對(duì)象的配置信息,例如規(guī)則和后端服務(wù)等。
Ingress 的類型有哪幾種?
Kubernetes 支持多種不同類型的 Ingress,每種類型都有自己的特點(diǎn)和用途。下面是一些常見的 Ingress 類型:
1. Simple fanout
簡單的 Fanout Ingress 會(huì)將流量路由到指定的多個(gè)服務(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 會(huì)將流量路由到指定的服務(wù)上,具體的服務(wù)由請(qǐng)求的 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
下面是一個(gè)基于 Host header 路由請(qǐng)求的 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 會(huì)將流量路由到指定的服務(wù)上,具體的服務(wù)由請(qǐng)求的 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 對(duì)象的定義文件,然后執(zhí)行kubectl apply命令即可。例如,假設(shè)我們想要將simple-fanout-ingress的路徑/service1修改為/service3,則可以編輯 Ingress 對(duì)象的定義文件,然后執(zhí)行以下命令:
$ kubectl apply -f ingress.yaml
其中,ingress.yaml是 Ingress 對(duì)象的定義文件。
更新后:
$ 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 是一個(gè)運(yùn)行在 Kubernetes 集群內(nèi)的服務(wù),它可以監(jiān)聽 Kubernetes API 服務(wù)器上的 Ingress 對(duì)象,并將外部流量路由到 Kubernetes 集群內(nèi)的不同服務(wù)。
每種類型的 Ingress 都需要特定的 Ingress Controller 來處理。例如,簡單的 Fanout Ingress 需要使用 Nginx Ingress Controller,而基于名稱的虛擬主機(jī) Ingress 則需要使用 Traefik Ingress Controller。
Ingress Class
Ingress Class 是一個(gè)可選的字段,它可以讓你更加精細(xì)地控制 Ingress 對(duì)象的路由方式。
每個(gè) Ingress 對(duì)象都可以指定一個(gè) Ingress Class,這個(gè) Ingress Class 可以對(duì)應(yīng)不同的 Ingress Controller,并且可以讓你更加方便地控制路由方式。
總結(jié)
Ingress 是 Kubernetes 中非常重要的一個(gè)資源對(duì)象,它可以將外部流量路由到 Kubernetes 集群內(nèi)的不同服務(wù),并且支持多種不同類型的路由方式。
換言之,Ingress 就是為進(jìn)入集群的請(qǐng)求提供路由規(guī)則的集合,可以給 service 提供集群外部訪問的 URL、負(fù)載均衡、SSL 終止、HTTP 路由等功能。
以上就是k8s Ingress 實(shí)現(xiàn)流量路由規(guī)則控制的詳細(xì)內(nèi)容,更多關(guān)于k8s Ingress 實(shí)現(xiàn)流量路由規(guī)則控制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
RFO SIG之openEuler AWS AMI 制作詳解
這篇文章主要為大家介紹了RFO SIG之openEuler AWS AMI 制作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Rainbond部署組件Statefulset的使用官方文檔
這篇文章主要為大家介紹了官方文檔Rainbond部署組件Statefulset的使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
詳解Rainbond云原生平臺(tái)簡化Kubernetes業(yè)務(wù)問題排查
這篇文章主要介紹了詳解Rainbond云原生平臺(tái)簡化Kubernetes業(yè)務(wù)問題排查,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
tkestack/gpu-manager在k8s1.23版本之后的使用方法
這篇文章主要介紹了tkestack/gpu-manager在k8s1.23版本之后的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
Rancher部署配置開源Rainbond云原生應(yīng)用管理平臺(tái)
這篇文章主要為大家介紹了Rancher部署配置開源Rainbond云原生應(yīng)用管理平臺(tái),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04

