ALB Ingress支援自訂轉寄規則。轉寄規則包含轉寄條件和轉寄動作。您可以自訂轉寄條件,指定請求的網域名稱、路徑、要求標頭、查詢字串、要求方法、Cookie、源IP等。您也可以自訂轉寄動作,配置固定響應、重新導向、插入要求標頭、刪除要求標頭、流量鏡像、轉寄至後端多伺服器組和重寫。您可通過控制台或在Ingress資源中配置Annotations
欄位配置自訂轉寄規則。
情境索引
自訂規則 | 適用情境 |
轉寄條件 | |
轉寄動作 | |
轉寄條件與動作實踐 |
前提條件
已安裝ALB Ingress Controller組件,且組件為v2.5.0及以上版本。具體操作,請參見管理組件。
轉寄條件
轉寄規則的條件條目上限為10個,一旦達到規定數量上限,您將無法再添加更多的條件。
轉寄條件ResponseHeader和ResponseStatusCode僅在自訂回應程式向轉寄規則中有效。
轉寄條件介紹
ALB Ingress支援在alb.ingress.kubernetes.io/conditions.<Service的名稱>
註解中配置轉寄條件。不同的路由規則塊之間是與的關係,同一個路由規則塊中的值是或的關係,例如,如果是兩個不同的Header規則塊,那麼這兩個規則塊是與的關係,但是同一個Header規則塊中設定的值是或的關係。詳細的路由規則說明如下。
轉寄條件 | 描述 |
網域名稱 | 匹配請求網域名稱,只有正確的網域名稱的請求才能訪問服務。樣本如下。
|
路徑 | 匹配請求路徑,只有正確的路徑的請求才能訪問服務。樣本如下。
|
Header | 匹配請求Header,只有正確的Header的請求才能訪問服務。樣本如下。
|
查詢字串 | 匹配查詢字串, 只有包含正確的查詢字串的請求才能訪問服務。樣本如下。
|
要求方法 | 匹配要求方法,只有正確的要求方法的請求才能訪問服務。樣本如下。
|
Cookie | 匹配Cookie,只有包含正確的Cookie的請求才能訪問服務。樣本如下。
|
SourceIP | 匹配請求源IP,只有正確的源IP的請求才能訪問服務。樣本如下。
|
ResponseHeader | 匹配響應Header,只對攜帶正確的Header的響應執行轉寄動作。樣本如下。
|
ResponseStatusCode | 匹配響應狀態代碼,只有返回正確的狀態代碼才能訪問服務。樣本如下。
|
情境一:基於SourceIP和Header實現流量分發
同一條轉寄規則的自訂條件設定的SourceIp數量限制為5個。
以下代碼塊定義了當請求的IP、Header和路徑符合配置時,才能實現目標流量分發。
即當請求源IP為192.168.0.0/16或172.16.0.0/16中的IP地址,請求Header中包含gray-hello,值必須為value1或value2,請求路徑為/hello,請求才能路由到gray-hello服務,否則將路由到其他服務。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/order: "1"
alb.ingress.kubernetes.io/conditions.gray-hello: |
[{
"type": "Header",
"headerConfig": {
"key":"gray-hello",
"values": [
"value1",
"value2"
]
}
},
{
"type": "SourceIp",
"sourceIpConfig": {
"values": [
"192.168.0.0/16",
"172.16.0.0/16"
]
}
}]
name: gray-hello
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /hello
pathType: ImplementationSpecific
backend:
service:
name: gray-hello
port:
number: 88
alb.ingress.kubernetes.io/order:標識Ingress的優先順序,數字越小,優先順序越高。
情境二:基於網域名稱、要求方法、Cookie實現流量分發
以下代碼塊定義了只有當請求的網域名稱、要求方法和Cookie符合配置時,才能實現目標流量分發。
即當要求方法為GET或HEAD,請求網域名稱為example.com或*.edu,請求Cookie的鍵為cookiekey1,值為cookievalue1,請求路徑為/test時,請求才能路由到service-a服務,否則將路由到service-b服務。
基於網域名稱的轉寄規則支援泛網域名稱匹配。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.service-a: |
[{
"type": "Cookie",
"cookieConfig": {
"values": [
{
"key":"cookiekey1",
"value":"cookievalue1"
}
]
}
},
{
"type": "Method",
"methodConfig": {
"values": [
"GET",
"HEAD"
]
}
},
{
"type": "Host",
"hostConfig": {
"values": [
"example.com",
"*.edu"
]
}
}]
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-a
port:
number: 88
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-b
port:
number: 88
情境三:基於查詢字串、多個Header、多個路徑實現流量分發
以下代碼塊定義了只有當請求的查詢字串、Header、路徑符合配置時,才能實現目標流量分發。
即當請求路徑是/pathvalue1、/pathvalue2或/test,查詢字串的鍵為querystringkey1,值為querystringvalue2,請求Header中必須包含headerkey1和headerkey2,請求Header中包含headerkey1,值必須為headervalue1或headervalue2,請求Header包含headerkey2,值必須為headervalue3或headervalue4,才能路由到service-a服務,否則將路由到service-b服務。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/conditions.service-a: |
[{
"type": "Path",
"pathConfig": {
"values": [
"/pathvalue1",
"/pathvalue2"
]
}
},
{
"type": "QueryString",
"queryStringConfig": {
"values": [
{
"key":"querystringkey1",
"value":"querystringvalue2"
}
]
}
},
{
"type": "Header",
"headerConfig": {
"key":"headerkey1",
"values": [
"headervalue1",
"headervalue2"
]
}
},
{
"type": "Header",
"headerConfig": {
"key":"headerkey2",
"values": [
"headervalue3",
"headervalue4"
]
}
}]
name: ingress-example
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-a
port:
number: 88
- path: /test
pathType: ImplementationSpecific
backend:
service:
name: service-b
port:
number: 88
轉寄動作
轉寄動作介紹
ALB Ingress支援使用alb.ingress.kubernetes.io/actions.<服務名稱>
註解配置請求方向和回應程式向的轉寄動作。支援固定響應、重新導向、插入要求標頭、刪除要求標頭、流量鏡像、轉寄至後端多伺服器組和重寫。通過定義這些轉寄動作,您可以在ALB Ingress中靈活地管理請求和響應的轉寄規則。
alb.ingress.kubernetes.io/actions.<服務名稱>
註解中的服務名稱必須和rule
欄位backend
下的服務名稱一致。在同一條轉寄規則中,重新導向、固定響應、轉寄至多伺服器組等終結類型的轉寄動作不能同時使用。
配置重新導向、固定響應、轉寄至多伺服器組時,
rule
欄位backend
下的servicePort的名稱必須為use-annotation。
請求方向的轉寄動作
轉寄動作 | 描述 |
固定響應 | 設定通過ALB給用戶端返回固定響應內容,可以設定響應狀態代碼,本文內容和本文類型。樣本如下。
|
重新導向 | 通過HTTP 3xx狀態代碼,指導用戶端跳轉到其他地址訪問服務。樣本如下。 重要 除了httpCode,重新導向的其他參數不能都設定為預設值。
|
流量鏡像 | 設定流量鏡像轉寄伺服器組ID,將複製請求轉寄至流量鏡像伺服器組。樣本如下。 重要
|
轉寄至後端多伺服器組 | 設定將ALB請求轉寄至後端多個伺服器組,可以通過ServerGroupID指定後端掛載的伺服器組,也可以通過ServiceName+ServicePort建立或掛載伺服器組。可以佈建要求轉寄至各後端伺服器組的權重,也支援開啟伺服器組間會話保持。 重要
|
重寫 | 設定ALB支援重寫,將覆蓋請求的網域名稱、路徑和字串。樣本如下。 重要
更多Rewrite重寫規則,請參見支援Rewrite重寫。 |
插入要求標頭 | 設定頭欄位名稱和頭欄位內容,將覆蓋請求中已有的頭變數。樣本如下。
|
刪除要求標頭 | 刪除頭欄位名稱和頭欄位內容。樣本如下。
|
QPS限速 | 設定ALB的轉寄規則時,可以同時配置總體請求速率限制和基於用戶端源IP的請求速率限制。 具體配置樣本如下: 重要
|
回應程式向的轉寄動作
轉寄動作 | 描述 |
插入要求標頭 | 設定頭欄位名稱和頭欄位內容,將覆蓋請求中已有的頭變數。樣本如下。
|
刪除要求標頭 | 刪除頭欄位名稱和頭欄位內容。樣本如下。
|
情境一:設定固定響應503狀態代碼和內容
控制台
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在路由頁面,單擊建立 Ingress,在建立 Ingress對話方塊配置路由。
配置項
說明
樣本值
網關類型
可按需選擇ALB應用型負載平衡、MSE雲原生網關和Nginx三種網關類型。
關於三種網關的差異,請參見Nginx Ingress、ALB Ingress和MSE Ingress對比。
ALB應用型負載平衡
名稱
Ingress名稱。
ingress
Ingress Class
Ingress所屬的IngressClass。
alb
規則
單擊+ 添加規則可新增多個路由規則。
網域名稱:自訂網域名。
路徑映射:配置如下配置項。
路徑:指定服務訪問的URL路徑。本例中不做配置,保留根路徑/。
匹配規則:支援首碼匹配(Prefix)、完整匹配(Exact)和預設(ImplementationSpecific)。
服務名稱:選擇目標服務,即K8s內的Service。
連接埠:選擇服務需要暴露的連接埠。
Ingress支援同一個網域名稱下配置多條路徑。單擊+ 添加路徑新增路徑。
網域名稱:不填寫
路徑映射:
路徑:/
匹配規則:預設(首碼匹配Prefix)
服務名稱:response-503
連接埠:80
TLS配置
開啟TLS配置開關,配置安全的路由服務。
網域名稱:自訂網域名。
保密字典:根據需要選擇對應的保密字典。
如果您需要建立Secret,請執行如下操作。
在保密字典右側,單擊建立。
在建立 Secret對話方塊,自訂保密字典的名稱、Cert、Key,然後單擊確定。
在保密字典的下拉框,選擇已建立的Secret。
單擊+ 新增TLS配置,可配置多條TLS。
Ingress的更多用法,請參見Nginx Ingress進階用法。
關閉TLS配置,此樣本中不需要配置TLS。
更多配置
灰階發布:開啟灰階發布開關。灰階規則可按照要求標頭、Cookie 、權重三個維度進行設定。
說明
要求標頭、Cookie 、權重可以只設定一種,若同時設定生效規則按要求標頭、Cookie、權重順序匹配。
按要求標頭:基於Request Header的流量切分,設定後會添加註解
nginx.ingress.kubernetes.io/canary-by-header
、nginx.ingress.kubernetes.io/canary-by-header-value
或nginx.ingress.kubernetes.io/canary-by-header-pattern
。按Cookie:基於Cookie的流量切分,設定後會添加註解
nginx.ingress.kubernetes.io/canary-by-cookie
。按權重:佈建要求到指定服務的百分比(值為0~100的整數),設定後會添加註解
nginx.ingress.kubernetes.io/canary-weight
。
協議:指定後端服務的協議,設定後會添加註解
nginx.ingress.kubernetes.io/backend-protocol
。支援HTTP、HTTPS、gRPC、gRPC四種服務合約。
重寫路徑:將用戶端請求中的路徑重寫後發送到後端服務,設定後會添加註解
nginx.ingress.kubernetes.io/rewrite-target
。
關閉灰階發布,協議和重寫路徑保持預設。此樣本中不需要配置灰階發布、協議、重新路徑。
自訂轉寄規則
開啟自訂轉寄規則,可精細化管理入站流量。
說明轉寄規則的條件條目上限為10個。
在轉寄條件下拉框中選擇:
網域名稱:
匹配請求網域名稱,如果設定了多個網域名稱,則網域名稱之間是或的關係。設定後會添加註釋
alb.ingress.kubernetes.io/conditions.host-example
。路徑:
匹配請求路徑,如果設定了多個路徑,則路徑之間是或的關係。設定後會添加註釋
alb.ingress.kubernetes.io/conditions.path-example
。HTTP標題:
以索引值對形式匹配請求的頭部資訊。例如,鍵是:
headername
值是:headervalue1
。如果設定了多個Header值,則Header之間是或的關係。設定後會添加註釋alb.ingress.kubernetes.io/conditions.http-header-example
。
在轉寄動作下拉框中選擇:
返回固定響應
設定通過ALB給用戶端返回固定響應內容,可以設定響應狀態代碼,本文內容和本文類型。按需求配置響應狀態代碼,響應本文類型(可選)、響應本文(可選)。
響應本文類型:
text/plain:表示無格式的內容類型。
text/css:表示XML格式的內容。
text/html:表示HTML格式的內容。
application/javascript:表示JavaScript格式的內容。
application/json:表示JSON格式內容類型。
轉寄條件:選擇路徑。(保持預設)
轉寄動作:返回固響應
響應狀態代碼:503
響應本文類型(可選):text/plain
響應本文(可選):error
註解
您可自訂註解名稱和值,也可根據名稱選擇或搜尋要配置的註解。Ingress的註解請參見ALB Ingress配置詞典。
單擊+添加註解,可對Ingress無上限地添加註解。
無需配置,此樣本不需要配置註解。
標籤
標籤的作用是為Ingress添加對應的標籤,標示該Ingress的特點。
單擊+添加標籤,可對Ingress無上限地添加標籤。
無需配置,此樣本不需要配置標籤。
配置成功後,單擊確定。
kubectl
以下代碼塊定義了請求服務時,將返回503狀態代碼和503 error text
。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.response-503: |
[{
"type": "FixedResponse",
"FixedResponseConfig": {
"contentType": "text/plain",
"httpCode": "503",
"content": "503 error text"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: response-503
port:
name: use-annotation # servicePort的名稱必須為use-annotation。
情境二:使用301重新導向到HTTPS連接埠
以下代碼塊定義了請求服務時,將重新導向到服務的HTTPS連接埠。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
alb.ingress.kubernetes.io/actions.redirect: |
[{
"type": "Redirect",
"RedirectConfig": {
"host": "${host}",
"path": "${path}",
"port": "443",
"protocol": "https",
"query": "${query}",
"httpCode": "301"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: redirect
port:
name: use-annotation # servicePort的名稱必須為use-annotation。
情境三:插入source: alibaba要求標頭
以下代碼塊定義了請求服務時,將使用source: alibaba覆蓋原有要求標頭。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: ingress
annotations:
# 註解中的服務為叢集中事實存在的服務,且服務名稱必須和rule欄位backend下的服務名稱一致。
alb.ingress.kubernetes.io/actions.insert-header: |
[{
"type": "InsertHeader",
"InsertHeaderConfig": {
"key": "source",
"value": "alibaba",
"valueType": "UserDefined"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: insert-header
port:
number: 80
情境四:流量鏡像至伺服器組
以下代碼塊定義了請求服務時,將提取複寫到流量鏡像伺服器組
登入應用型負載平衡ALB控制台,在左側導覽列選擇 ,在伺服器組頁面擷取伺服器組ID。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: traffic-mirror-ingress
annotations:
# mirror-svc必須為下方填入的backend.service之一。
# ALB Ingress會將轉寄至mirror-svc的流量鏡像到"ServerGroupID"中填入的後端伺服器
# 如果有多個Serice需要配置流量鏡像,請為每個Service分別填寫一條annotation
alb.ingress.kubernetes.io/actions.mirror-svc: |
[{
"type": "TrafficMirror",
"TrafficMirrorConfig": {
"TargetType" : "ForwardGroupMirror",
"MirrorGroupConfig": {
"ServerGroupTuples" : [{
"ServerGroupID": "sgp-2auud2fxj1r46*****"
}]
}
}
}]
spec:
ingressClassName: alb
rules:
- host: demo.domain.ingress.top
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: mirror-svc
port:
number: 80
情境五:請求轉寄至多個後端伺服器組
控制台
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在路由頁面,單擊建立 Ingress,在建立 Ingress對話方塊配置路由。
配置項
說明
樣本值
網關類型
可按需選擇ALB應用型負載平衡、MSE雲原生網關和Nginx三種網關類型。
關於三種網關的差異,請參見Nginx Ingress、ALB Ingress和MSE Ingress對比。
ALB應用型負載平衡
名稱
Ingress名稱。
forward-ingress
Ingress Class
Ingress所屬的IngressClass。
alb
規則
單擊+ 添加規則可新增多個路由規則。
網域名稱:自訂網域名。
路徑映射:配置如下配置項。
路徑:指定服務訪問的URL路徑。本例中不做配置,保留根路徑/。
匹配規則:支援首碼匹配(Prefix)、完整匹配(Exact)和預設(ImplementationSpecific)。
服務名稱:選擇目標服務,即K8s內的Service。
連接埠:選擇服務需要暴露的連接埠。
Ingress支援同一個網域名稱下配置多條路徑。單擊+ 添加路徑新增路徑。
網域名稱:demo.domain.ingress.top
路徑映射:
路徑:/path
匹配規則:預設(首碼匹配Prefix)
服務名稱:forward
連接埠:80
TLS配置
開啟TLS配置開關,配置安全的路由服務。
網域名稱:自訂網域名。
保密字典:根據需要選擇對應的保密字典。如果您需要建立Secret,請執行如下操作。
在保密字典右側,單擊建立。
在建立 Secret對話方塊,自訂保密字典的名稱、Cert、Key,然後單擊確定。
在保密字典的下拉框,選擇已建立的Secret。
關閉TLS配置,此樣本中不需要配置TLS。
更多配置
灰階發布:開啟灰階發布開關。灰階規則可按照要求標頭、Cookie 、權重三個維度進行設定。
說明
要求標頭、Cookie 、權重可以只設定一種,若同時設定生效規則按要求標頭、Cookie、權重順序匹配。
按要求標頭:基於Request Header的流量切分,設定後會添加註解
nginx.ingress.kubernetes.io/canary-by-header
、nginx.ingress.kubernetes.io/canary-by-header-value
或nginx.ingress.kubernetes.io/canary-by-header-pattern
。按Cookie:基於Cookie的流量切分,設定後會添加註解
nginx.ingress.kubernetes.io/canary-by-cookie
。按權重:佈建要求到指定服務的百分比(值為0~100的整數),設定後會添加註解
nginx.ingress.kubernetes.io/canary-weight
。
協議:指定後端服務的協議,設定後會添加註解
nginx.ingress.kubernetes.io/backend-protocol
。支援HTTP、HTTPS、gRPC、gRPCS四種服務合約。
重寫路徑:將用戶端請求中的路徑重寫後發送到後端服務,設定後會添加註解
nginx.ingress.kubernetes.io/rewrite-target
。
關閉灰階發布,協議和重寫路徑保持預設。此樣本中不需要配置灰階發布、協議、重寫路徑。
自訂轉寄規則
開啟自訂轉寄規則,可精細化管理入站流量。
說明轉寄規則的條件條目上限為10個。
在轉寄條件下拉框中選擇:
網域名稱:
匹配請求網域名稱,如果設定了多個網域名稱,則網域名稱之間是或的關係。設定後會添加註釋
alb.ingress.kubernetes.io/conditions.host-example
。路徑:
匹配請求路徑,如果設定了多個路徑,則路徑之間是或的關係。設定後會添加註釋
alb.ingress.kubernetes.io/conditions.path-example
。HTTP標題:
以索引值對形式匹配請求的頭部資訊。例如,鍵是:
headername
值是:headervalue1
。如果設定了多個Header值,則Header之間是或的關係。設定後會添加註釋alb.ingress.kubernetes.io/conditions.http-header-example
。
在轉寄動作下拉框中選擇:
轉寄至
轉寄到後端多伺服器組。在服務名稱中,請選擇目標服務。在連接埠中,選擇目標連接埠號碼。然後自訂配置權重值。
說明如果是Flannel網路外掛程式叢集則不支援ClusterIP類型服務。
選擇轉寄至,就不需要配置規則中的路徑映射。
轉寄條件:選擇網域名稱。網域名稱:demo.domain.ingress.top
轉寄動作:轉寄至
服務名稱:tea-svc
連接埠:80
配置權重:80
添加服務
服務名稱:coffee-svc
連接埠:80
配置權重:20
註解
您可自訂註解名稱和值,也可根據名稱選擇或搜尋要配置的註解。Ingress的註解請參見ALB Ingress配置詞典。
單擊+添加註解,可對Ingress無上限地添加註解。
無需配置,此樣本不需要配置註解。
標籤
標籤的作用是為Ingress添加對應的標籤,標示該Ingress的特點。
單擊+添加標籤,可對Ingress無上限地添加標籤。
無需配置,此樣本不需要配置標籤。
配置完成,在建立Ingress頁面的左下角,單擊確定。
kubectl
以下代碼塊定義了請求服務時,將請求轉寄至叢集內的多個服務。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: forward-ingress
annotations:
# 註解中的服務為叢集中事實存在的服務,且服務名稱必須和rule欄位backend下的服務名稱一致。
alb.ingress.kubernetes.io/actions.forward: |
[{
"type": "ForwardGroup",
"ForwardConfig": {
"ServerGroups" : [{
"ServiceName": "tea-svc",
"Weight": 80,
"ServicePort": 80
},
{
"ServiceName": "coffee-svc",
"Weight": 20,
"ServicePort": 80
}]
}
}]
spec:
ingressClassName: alb
rules:
- host: demo.domain.ingress.top
http:
paths:
- path: /path
pathType: Prefix
backend:
service:
name: forward
port:
name: use-annotation # servicePort的名稱必須為use-annotation。
情境六:重寫請求配置資訊
以下代碼塊定義了請求服務時,重寫請求的網域名稱、路徑和字串。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: default
name: rewrite-ingress
annotations:
alb.ingress.kubernetes.io/actions.rewrite: |
[{
"type": "Rewrite",
"RewriteConfig": {
"Host": "demo.domain.ingress.top",
"Path": "/test",
"Query": "queryString"
}
}]
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /path
pathType: Prefix
backend:
service:
name: rewrite
port: 80
情境七:基於ResponseHeader對回應程式向的要求標頭進行修改
自訂的ALB ingress轉寄規則在預設情況下為請求方向,如果您希望建立回應程式向的轉寄規則,則需要將註解項
alb.ingress.kubernetes.io/rule-direction.<Service的名稱>
配置為Response(該註解項預設配置為Request)。當建立回應程式向的轉寄規則時,
ingressSpec.rules.backend
欄位下的servicePort
的名稱必須為use-annotation
。
以下代碼塊定義了當匹配到ResponseHeader
時,即Header中包含response-hello
,值必須為value1
或value2
,那麼將在Header中插入新的要求標頭source: alibaba
。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/rule-direction.response-header: Response
alb.ingress.kubernetes.io/conditions.response-header: |
[{
"type": "ResponseHeader",
"responseHeaderConfig": {
"key": "response-hello",
"values": [
"value1",
"value2"
]
}
}]
alb.ingress.kubernetes.io/actions.response-header: |
[{
"type": "InsertHeader",
"InsertHeaderConfig": {
"key": "source",
"value": "alibaba",
"valueType": "UserDefined"
}
}]
name: response-header
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: response-header
port:
name: use-annotation # servicePort的名稱必須為use-annotation。
情境八:基於響應狀態代碼對回應程式向的要求標頭進行修改
自訂的ALB ingress轉寄規則在預設情況為請求方向,如果您希望建立回應程式向的轉寄規則,則需要將註解項
alb.ingress.kubernetes.io/rule-direction.<Service的名稱>
配置為Response(該註解項預設配置為Request)。當建立回應程式向的轉寄規則時,
ingressSpec.rules.backend
欄位下的servicePort
的名稱必須為use-annotation
。
以下代碼塊定義了僅當響應狀態代碼為200或300時,才會對要求標頭執行移除操作(將response-hello
從請求Header中移除)。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
alb.ingress.kubernetes.io/rule-direction.response-hello: Response
alb.ingress.kubernetes.io/conditions.response-hello: |
[{
"type": "ResponseStatusCode",
"responseStatusCodeConfig": {
"values": [
"200",
"300"
]
}
}]
alb.ingress.kubernetes.io/actions.response-hello: |
[{
"type": "RemoveHeader",
"RemoveHeaderConfig": {
"key": "response-hello"
}
}]
name: response-hello
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /*
pathType: ImplementationSpecific
backend:
service:
name: response-hello
port:
name: use-annotation # servicePort的名稱必須為use-annotation。
轉寄條件與動作實踐
情境一:基於網域名稱的轉寄條件和動作,轉寄至指定的服務
在本節中,介紹如何在ACK控制台中,通過基於網域名稱的轉寄條件和配置相應的轉寄動作,將流量轉寄至指定的服務。
在建立ALB Ingress前,請按照如下步驟部署服務、AlbConfig以及IngressClass。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在路由頁面,單擊建立 Ingress,在建立 Ingress對話方塊配置路由。
配置項
說明
樣本值
網關類型
可按需選擇ALB應用型負載平衡、MSE雲原生網關和Nginx三種網關類型。
關於三種網關的差異,請參見Nginx Ingress、ALB Ingress和MSE Ingress對比。
ALB應用型負載平衡
名稱
Ingress的名稱
alb_ingress
Ingress Class
Ingress所屬的IngressClass
alb
規則
單擊+ 添加規則可新增多個路由規則。
網域名稱:自訂網域名。
路徑映射:配置如下配置項。
路徑:指定服務訪問的URL路徑。本例中不做配置,保留根路徑/。
匹配規則:支援首碼匹配(Prefix)、完整匹配(Exact)和預設(ImplementationSpecific)。
服務名稱:選擇目標服務,即K8s內的Service。
連接埠:選擇服務需要暴露的連接埠。
Ingress支援同一個網域名稱下配置多條路徑。單擊+ 添加路徑新增路徑。
網域名稱:*.example.com
路徑映射:
路徑:/tes
匹配規則:預設(ImplementationSpecific)
服務名稱:tea-svc
連接埠:80
TLS配置
開啟TLS配置開關,配置安全的路由服務。
網域名稱:自訂網域名。
保密字典:根據需要選擇對應的保密字典。
如果您需要建立Secret,請執行如下操作。
在保密字典右側,單擊建立。
在建立 Secret對話方塊,自訂保密字典的名稱、Cert、Key,然後單擊確定。
在保密字典的下拉框,選擇已建立的Secret。
單擊+ 新增TLS配置,可配置多條TLS。
更多詳情,請參見配置HTTPS認證以實現加密通訊。
關閉TLS配置,此樣本中不需要配置TLS。
更多配置
灰階發布:開啟灰階發布開關。灰階規則可按照要求標頭、Cookie 、權重三個維度進行設定。
說明
要求標頭、Cookie 、權重可以只設定一種,若同時設定生效規則按要求標頭、Cookie、權重順序匹配。
按要求標頭:基於Request Header的流量切分,設定後會添加註解
nginx.ingress.kubernetes.io/canary-by-header
、nginx.ingress.kubernetes.io/canary-by-header-value
或nginx.ingress.kubernetes.io/canary-by-header-pattern
。按Cookie:基於Cookie的流量切分,設定後會添加註解
nginx.ingress.kubernetes.io/canary-by-cookie
。按權重:佈建要求到指定服務的百分比(值為0~100的整數),設定後會添加註解
nginx.ingress.kubernetes.io/canary-weight
。
協議:指定後端服務的協議,設定後會添加註解
nginx.ingress.kubernetes.io/backend-protocol
。支援HTTP、HTTPS、gRPC、gRPCS四種服務合約。
重寫路徑:將用戶端請求中的路徑重寫後發送到後端服務,設定後會添加註解
nginx.ingress.kubernetes.io/rewrite-target
。
關閉灰階發布,協議和重寫路徑保持預設。此樣本中不需要配置灰階發布、協議、重新路徑。
自訂轉寄規則
開啟自訂轉寄規則,可精細化管理入站流量。
說明轉寄規則的條件條目上限為10個。
在轉寄條件下拉框中選擇:
網域名稱:
匹配請求網域名稱,如果設定了多個網域名稱,則網域名稱之間是或的關係。設定後會添加註釋
alb.ingress.kubernetes.io/conditions.host-example
。路徑:
匹配請求路徑,如果設定了多個路徑,則路徑之間是或的關係。設定後會添加註釋
alb.ingress.kubernetes.io/conditions.path-example
。重要設定路徑轉寄條件後,控制台將會在Ingress中自動添加一條路徑為
/created-by-<ALB-ID>
的轉寄規則。HTTP標題:
以索引值對形式匹配請求的頭部資訊。例如,鍵是:
headername
值是:headervalue1
。如果設定了多個Header值,則Header之間是或的關係。設定後會添加註釋alb.ingress.kubernetes.io/conditions.http-header-example
。
在轉寄動作下拉框中選擇:
轉寄至
轉寄到後端多伺服器組。在服務名稱中,請選擇目標服務。在連接埠中,選擇目標連接埠號碼。然後自訂配置權重值。
說明如果是Flannel網路外掛程式叢集則不支援ClusterIP類型服務。
選擇轉寄至,就不需要配置規則中的路徑映射。
轉寄條件:選擇網域名稱、路徑及HTTP標題。
網域名稱:是example.com,單擊添加網域名稱,或test.com。
轉寄動作:選擇轉寄至。
服務名稱:tea-svc
連接埠:80
權重:100
註解
您可自訂註解名稱和值,也可根據名稱選擇或搜尋要配置的註解。Ingress的註解請參見Annotations。
單擊+添加註解,可對Ingress無上限地添加註解。
無需配置,此樣本不需要配置註解。
標籤
標籤的作用是為Ingress添加對應的標籤,標示該Ingress的特點。
單擊+添加標籤,可對Ingress無上限地添加標籤。
無需配置,此樣本不需要配置標籤。
配置完成,在建立Ingress頁面的左下角,單擊確定。
檢查Ingress建立成功:
在左側導覽列,選擇網路 > 路由。可查看到名稱為cafe-ingress的Ingress已部署。
在cafe-ingress的端點列,可查看到端點資訊。