本文簡(jiǎn)單調(diào)研了騰訊云和華為云的關(guān)于ingress路徑匹配規(guī)則的實(shí)現(xiàn)的差異,了解這些,可以讓你的頭更大。
路徑匹配規(guī)則
目前官方k8s支持的路徑匹配規(guī)則只有以下三種類(lèi)型,但不同的云廠商通過(guò)自己實(shí)現(xiàn)對(duì)應(yīng)的ingress controller,往往還支持正則匹配等不同的路徑規(guī)則。
騰訊云ingress
本文主要調(diào)研了Tke的兩類(lèi)ingress,分別是應(yīng)用型CLB和Nginx ingress Controller,這兩類(lèi)ingress在頁(yè)面創(chuàng)建時(shí)均不支持選擇路徑匹配規(guī)則,而二者關(guān)于路徑匹配規(guī)則的實(shí)現(xiàn)又有所差異,但二者在騰訊云頁(yè)面上創(chuàng)建出來(lái)的ingress的yaml中路徑匹配字段均是ImplementationSpecific
。
Nginx Ingress
騰訊云的nginx ingress類(lèi)型是基于原生的Nginx ingress controller實(shí)現(xiàn)的。(別問(wèn)我是怎么知道的)
參考了Nginx ingress的官方文檔,Nginx ingress 支持顯示指定Exact
和Prefix
,也支持通過(guò)annotation+ImplementationSpecific
的方式去隱式指定正則匹配規(guī)則(kubernetes.github.io/ingress-ngi… ),如下所示:
為什么在Tke頁(yè)面上創(chuàng)建出來(lái)的ingress默認(rèn)就是ImplementationSpecific
規(guī)則,結(jié)合官方文檔上的描述,推測(cè)是因?yàn)?code>ImplementationSpecific比Exact
和Prefix
能夠兼容更多的字符類(lèi)型(kubernetes.github.io/ingress-ngi… )。
騰訊云上創(chuàng)建出來(lái)的ingress轉(zhuǎn)發(fā)規(guī)則,默認(rèn)的路徑匹配規(guī)則為ImplementationSpecific
,結(jié)合官方文檔說(shuō)明以及測(cè)試驗(yàn)證,確認(rèn)默認(rèn)情況下實(shí)際是按照前綴匹配規(guī)則來(lái)進(jìn)行匹配的。
應(yīng)用型CLB
按照騰訊云官方文檔上的描述(cloud.tencent.com/document/pr…),騰訊云上的應(yīng)用型CLB支持通過(guò)配置含特定字符的路徑來(lái)使用不同的路徑匹配規(guī)則,具體如下所示:
如果是以/
開(kāi)頭的話,按最長(zhǎng)前綴匹配,優(yōu)先精確匹配,而后模糊匹配。
Cce ingress
cce的ingress支持前綴匹配,精確匹配和正則匹配三種路徑匹配規(guī)則。按照官方文檔的描述(support.huaweicloud.com/cce_faq/cce…),cce是通過(guò)ingress中的property字段來(lái)標(biāo)明路徑匹配規(guī)則,而這個(gè)property字段在社區(qū)的ingress上是沒(méi)有的。
因此,我們使用client-go創(chuàng)建ingress時(shí)是打上了這個(gè)annotation的,而在cce云上直接創(chuàng)建的ingress是沒(méi)有這個(gè)annotation的。
這里提供一段轉(zhuǎn)換的代碼供大家參考:
type ccePathType struct {
Host string `json:"host"`
Path string `json:"path"`
MatchMode string `json:"matchmode"`
}
var ingressProperty []ccePathType
for i := range ingress.Spec.Rules {
if ingress.Spec.Rules[i].HTTP != nil {
for j := range ingress.Spec.Rules[i].HTTP.Paths {
ingressProperty = append(ingressProperty, ccePathType{
Host: ingress.Spec.Rules[i].Host,
Path: ingress.Spec.Rules[i].HTTP.Paths[j].Path,
MatchMode: matchModeMap[string(*ingress.Spec.Rules[i].HTTP.Paths[j].PathType)],
})
ingress.Spec.Rules[i].HTTP.Paths[j].PathType = (*networkingv1.PathType)(&implementationSpecificPathType)
}
}
}
cceIngressPropertyValue, err := json.Marshal(ingressProperty)
if err != nil {
return err
}
meta.SetAnnotation(ingress, "kubernetes.io/ingress.property", string(cceIngressPropertyValue))
-
騰訊云
+關(guān)注
關(guān)注
0文章
214瀏覽量
16820 -
CLB
+關(guān)注
關(guān)注
0文章
29瀏覽量
5964 -
華為云
+關(guān)注
關(guān)注
3文章
2654瀏覽量
17499
原文標(biāo)題:騰訊云和華為云的ingress路徑匹配規(guī)則把我繞暈了
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論