通過AlbConfig配置ALB實(shí)例
AlbConfig是由ALB Ingress Controller提供的CRD資源,ALB Ingress Controller使用AlbConfig配置ALB實(shí)例和監(jiān)聽。本文介紹如何創(chuàng)建、修改、更新AlbConfig以及開啟日志服務(wù)等操作。
功能索引
ALB實(shí)例配置 | |
監(jiān)聽配置 |
前提條件
已為集群安裝ALB Ingress Controller組件。具體操作,請參見管理ALB Ingress Controller組件。
說明若需要在ACK專有集群中通過ALB Ingress訪問服務(wù),在部署服務(wù)前需要為ALB Ingress Controller授權(quán)。具體操作,請參見為ACK專有集群授予ALB Ingress Controller訪問權(quán)限。
已創(chuàng)建兩個(gè)不同可用區(qū)的交換機(jī),并且與集群處于同一VPC。具體操作,請參見創(chuàng)建和管理交換機(jī)。
已通過kubectl工具連接集群。具體操作,請參見獲取集群KubeConfig并通過kubectl工具連接集群。
注意事項(xiàng)
推薦優(yōu)先使用
kubectl edit
命令直接修改、更新資源的配置。如果必須使用kubectl apply
命令來修改、更新資源,請?jiān)趫?zhí)行kubectl apply
命令之前先執(zhí)行kubectl diff
命令預(yù)覽變更點(diǎn),確保變更符合預(yù)期,然后再執(zhí)行kubectl apply
命令將變更應(yīng)用到Kubernetes集群。低版本Nginx Ingress Controller無法識別Ingress資源中的
spec:ingressClassName
字段。如果集群中同時(shí)存在Nginx Ingress和ALB Ingress,會存在Ingress資源被低版本Nginx Ingress Controller調(diào)諧的風(fēng)險(xiǎn)。因此,請及時(shí)升級Nginx Ingress Controller版本,或通過Annotation注解項(xiàng)指定ALB Ingress對應(yīng)的ingressClass。具體操作,請參見升級Nginx Ingress Controller組件或ALB Ingress服務(wù)高級用法。
創(chuàng)建AlbConfig
一個(gè)AlbConfig對應(yīng)一個(gè)ALB實(shí)例,如果您需要使用多個(gè)ALB實(shí)例,可以通過創(chuàng)建多個(gè)AlbConfig實(shí)現(xiàn)。創(chuàng)建AlbConfig操作如下。
如果您在安裝ALB Ingress Controller組件時(shí),為ALB云原生網(wǎng)關(guān)實(shí)例來源選擇了新建或使用已有選項(xiàng),Controller會自動創(chuàng)建一個(gè)名為“alb”的AlbConfig和名為“alb”的IngressClass資源。
創(chuàng)建并拷貝以下內(nèi)容到alb.yaml文件中,用于創(chuàng)建AlbConfig。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: name: alb addressType: Internet zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # 替換為您的虛擬交換機(jī)的ID - vSwitchId: vsw-uf6nun9tql5t8nh15**** listeners: - port: 80 protocol: HTTP
參數(shù)
說明
spec.config.name
表示ALB實(shí)例的名稱。
spec.config.addressType
表示負(fù)載均衡的地址類型。取值如下:
Internet
(默認(rèn)值):ALB實(shí)例會擁有公網(wǎng)IP地址,DNS域名被解析到公網(wǎng)IP,因此可以在公網(wǎng)環(huán)境下訪問。Intranet
:ALB實(shí)例將只擁有私網(wǎng)IP地址,DNS域名被解析到私網(wǎng)IP,因此只能在其所在的VPC內(nèi)被訪問。
重要addressType
參數(shù)僅在創(chuàng)建AlbConfig時(shí)被解析,后續(xù)更新AlbConfig不產(chǎn)生效果。spec.config.zoneMappings
用于設(shè)置ALB Ingress使用的虛擬交換機(jī)ID。在多個(gè)可用區(qū)的地域中,您至少需要指定兩個(gè)處于不同可用區(qū)的交換機(jī)。對于只包含單個(gè)可用區(qū)的地域,指定一個(gè)交換機(jī)ID即可。指定的交換機(jī)必須在ALB當(dāng)前所支持的可用區(qū)內(nèi),且與集群處于同一VPC。關(guān)于ALB Ingress支持的地域與可用區(qū),請參見ALB支持的地域與可用區(qū)。
重要在多個(gè)可用區(qū)的地域中,您至少需要指定兩個(gè)處于不同可用區(qū)的交換機(jī)。
zoneMappings
參數(shù)僅在創(chuàng)建AlbConfig時(shí)被解析,后續(xù)更新AlbConfig不產(chǎn)生效果。
為集群安裝ALB Ingress Controller組件時(shí),可以選擇創(chuàng)建默認(rèn)的AlbConfig。AlbConfig的配置參數(shù)除
vSwitchID
外,其他參數(shù)將會按照以下的默認(rèn)配置創(chuàng)建。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb # AlbConfig名稱。 spec: config: accessLogConfig: logProject: "" logStore: "" addressAllocatedMode: Dynamic # 在AlbConfig中,可以通過addressAllocatedMode參數(shù)指定ALB實(shí)例IP模式,可取值為Dynamic(動態(tài)IP模式)和Fixed(固定IP模式)。 addressType: Internet billingConfig: internetBandwidth: 0 internetChargeType: "" payType: PostPay deletionProtectionEnabled: true edition: Standard forceOverride: false zoneMappings: - vSwitchId: #... - vSwitchId: #... status: loadBalancer: dnsname: alb-s2em8fr9debkg5****.cn-shenzhen.alb.aliyuncs.com id: alb-s2em8fr9debkg5****
執(zhí)行以下命令,創(chuàng)建AlbConfig。
kubectl apply -f alb.yaml
預(yù)期輸出:
AlbConfig.alibabacloud.com/alb created
執(zhí)行以下命令,查看AlbConfig資源。
kubectl get AlbConfig
預(yù)期輸出:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb alb-****** alb-******.<regionID>.alb.aliyuncs.com 28m
說明創(chuàng)建HTTPS監(jiān)聽并為其配置證書后,
PORT&PROTOCOL
和CERTID
中才會顯示內(nèi)容,內(nèi)容為空是正常現(xiàn)象。
復(fù)用已有ALB實(shí)例
如果您希望復(fù)用已有ALB實(shí)例,需要在創(chuàng)建AlbConfig時(shí)指定ALB實(shí)例ID,且已有的ALB實(shí)例必須是通過應(yīng)用型負(fù)載均衡ALB控制臺創(chuàng)建的標(biāo)準(zhǔn)版或WAF增強(qiáng)版實(shí)例。不支持復(fù)用基礎(chǔ)版ALB實(shí)例。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: reuse-alb
spec:
config:
id: **** # 通過ALB控制臺創(chuàng)建的標(biāo)準(zhǔn)版或WAF增強(qiáng)版ALB實(shí)例ID。
forceOverride: false
listenerForceOverride: false
參數(shù)說明如下:
參數(shù) | 說明 |
|
重要 在復(fù)用場景下,不建議您手動修改監(jiān)聽名稱,以免錯(cuò)誤地將監(jiān)聽置于或脫離ACK的控制。由AlbConfig創(chuàng)建或更新的監(jiān)聽由ACK管理,且監(jiān)聽名稱的默認(rèn)格式為 |
| 表示復(fù)用模式下是否強(qiáng)制覆蓋ALB實(shí)例屬性。
|
| 表示復(fù)用模式下是否強(qiáng)制覆蓋監(jiān)聽屬性。
|
更新AlbConfig
對于已經(jīng)通過AlbConfig創(chuàng)建的ALB實(shí)例,更改實(shí)例配置時(shí)推薦使用kubectl edit
命令進(jìn)行更新。更新AlbConfig操作如下。
執(zhí)行以下命令,查看AlbConfig名稱。
kubectl get AlbConfig
預(yù)期輸出:
NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb alb-****** alb-******.<regionID>.alb.aliyuncs.com 28m
執(zhí)行以下命令編輯AlbConfig。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替換AlbConfig的名稱
在AlbConfig配置文件中,更新AlbConfig的相關(guān)內(nèi)容。例如,修改
spec.config.name
字段的參數(shù),將ALB實(shí)例的名稱修改為new_alb
。... spec: config: name: new_alb # 更新后的名稱。 ...
使用IngressClass關(guān)聯(lián)AlbConfig與Ingress
ALB Ingress使用Kubernetes原生的IngressClass資源確定AlbConfig與Ingress的關(guān)聯(lián)。通過在IngressClass資源中填入
創(chuàng)建并拷貝以下內(nèi)容到ingress_class.yaml文件中,用于創(chuàng)建IngressClass。
1.19及之后版本集群
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb # IngressClass關(guān)聯(lián)的AlbConfig的名稱
1.19版本之前集群
apiVersion: networking.k8s.io/v1beta1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb
執(zhí)行以下命令,創(chuàng)建IngressClass。
kubectl apply -f ingress_class.yaml
預(yù)期輸出:
ingressclass.networking.k8s.io/alb created
創(chuàng)建并拷貝以下內(nèi)容到ingress.yaml文件中。通過
ingressClassName
參數(shù)指定名稱為alb的IngressClass關(guān)聯(lián)AlbConfig。1.19及之后版本集群
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: cafe-ingress spec: ingressClassName: alb # Ingress關(guān)聯(lián)的IngressClass的名稱 rules: - http: paths: # 配置Context Path。 - path: /tea pathType: ImplementationSpecific backend: service: name: tea-svc port: number: 80 # 配置Context Path。 - path: /coffee pathType: ImplementationSpecific backend: service: name: coffee-svc port: number: 80
1.19版本之前集群
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: cafe-ingress spec: ingressClassName: alb rules: - http: paths: # 配置Context Path。 - path: /tea backend: serviceName: tea-svc servicePort: 80 # 配置Context Path。 - path: /coffee backend: serviceName: coffee-svc servicePort: 80
執(zhí)行以下命令,創(chuàng)建Ingress。
kubectl apply -f ingress.yaml
預(yù)期輸出:
ingress.networking.k8s.io/cafe-ingress created
完成上述步驟,就可以使用IngressClass關(guān)聯(lián)AlbConfig與Ingress。
創(chuàng)建并使用多個(gè)ALB實(shí)例
如果您希望同時(shí)使用多個(gè)ALB實(shí)例,在Ingress資源中通過spec.ingressClassName
指定不同的IngressClass,即可將Ingress關(guān)聯(lián)到不同的ALB實(shí)例。
創(chuàng)建并拷貝以下內(nèi)容到alb-2.yaml文件中,用于創(chuàng)建AlbConfig。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-2 spec: config: name: alb-2 # ALB實(shí)例名稱。 addressType: Internet # 負(fù)載均衡具有公網(wǎng)IP地址。 zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # 虛擬交換機(jī)的ID - vSwitchId: vsw-uf6nun9tql5t8nh15****
執(zhí)行以下命令,創(chuàng)建AlbConfig。
kubectl apply -f alb-2.yaml
預(yù)期輸出:
AlbConfig.alibabacloud.com/alb-2 created
創(chuàng)建并拷貝以下內(nèi)容到ingress_class2.yaml文件中,用于創(chuàng)建IngressClass。
1.19及之后版本集群
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb-2 spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb-2 # IngressClass關(guān)聯(lián)的AlbConfig的名稱
1.19版本之前集群
apiVersion: networking.k8s.io/v1beta1 kind: IngressClass metadata: name: alb-2 spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb-2 # IngressClass關(guān)聯(lián)的AlbConfig的名稱
執(zhí)行以下命令,創(chuàng)建IngressClass。
kubectl apply -f ingress_class2.yaml
預(yù)期輸出:
ingressclass.networking.k8s.io/alb-2 created
創(chuàng)建并拷貝以下內(nèi)容到ingress2.yaml文件中。通過
ingressClassName
參數(shù)指定不同的ALB實(shí)例。下方的示例中,就通過在ingressClassName
字段中填入alb-2
,將Ingress關(guān)聯(lián)到了名為alb-2的IngressClass,以及這個(gè)IngressClass所關(guān)聯(lián)的,名為alb-2的ALB實(shí)例。1.19及之后版本集群
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: cafe-ingress2 spec: ingressClassName: alb-2 rules: - http: paths: # 配置Context Path。 - path: /tea pathType: ImplementationSpecific backend: service: name: tea-svc port: number: 80 # 配置Context Path。 - path: /coffee pathType: ImplementationSpecific backend: service: name: coffee-svc port: number: 80
1.19版本之前集群
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: cafe-ingress2 spec: ingressClassName: alb-2 rules: - http: paths: # 配置Context Path。 - path: /tea backend: serviceName: tea-svc servicePort: 80 # 配置Context Path。 - path: /coffee backend: serviceName: coffee-svc servicePort: 80
執(zhí)行以下命令,創(chuàng)建Ingress。
kubectl apply -f ingress2.yaml
預(yù)期輸出:
ingress.networking.k8s.io/cafe-ingress2 created
使用IPv6地址
在創(chuàng)建ALB實(shí)例時(shí),通過在addressIpVersion
字段中填入DualStack
即可開啟雙棧,同時(shí)支持IPv4與IPv6。
addressIpVerison
參數(shù)僅在創(chuàng)建AlbConfig時(shí)被解析,后續(xù)更新AlbConfig不產(chǎn)生效果。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
addressIpVersion: DualStack # 開啟雙棧
...
指定TLS安全策略
當(dāng)前AlbConfig配置HTTPS監(jiān)聽時(shí),支持指定TLS安全策略。TLS安全策略包含自定義策略和系統(tǒng)默認(rèn)策略,更多信息,請參見TLS安全策略。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
#...
listeners:
- port: 443
protocol: HTTPS
securityPolicyId: tls_cipher_policy_1_1 # 指定的安全策略ID
#...
開啟日志服務(wù)訪問日志
如果您希望ALB Ingress能夠收集訪問日志Access Log,可以在AlbConfig中指定logProject
和logStore
。
創(chuàng)建集群時(shí),您選擇了自動創(chuàng)建或使用已有日志服務(wù)Project。您可登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇集群信息。然后,在集群資源頁簽,查看集群關(guān)聯(lián)的日志服務(wù) Project。
logStore
命名需要以alb_
開頭,若指定logStore
不存在,則會自動創(chuàng)建。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
accessLogConfig:
logProject: "k8s-log-xz92lvykqj1siwvif****"
logStore: "alb_****"
#...
您可以在集群資源頁簽單擊日志服務(wù) Project右側(cè)的名稱,查看收集的訪問日志。
刪除ALB實(shí)例
一個(gè)AlbConfig對應(yīng)一個(gè)ALB實(shí)例, 因此,如果ALB實(shí)例使用AlbConfig創(chuàng)建,則可以通過刪除AlbConfig實(shí)現(xiàn)刪除ALB實(shí)例。
刪除AlbConfig前,請刪除其關(guān)聯(lián)的所有Ingress資源。
執(zhí)行以下命令,刪除AlbConfig。
kubectl delete AlbConfig <AlbConfig_NAME> # <AlbConfig_NAME>替換AlbConfig的名稱
刪除復(fù)用ALB實(shí)例的AlbConfig
在創(chuàng)建AlbConfig時(shí)如果選擇復(fù)用已有ALB實(shí)例,因?yàn)閷?shí)例并非通過AlbConfig創(chuàng)建,刪除AlbConfig并不會刪除ALB實(shí)例。如果您希望刪除復(fù)用ALB實(shí)例的AlbConfig,請按照以下操作步驟操作。
使用
kubectl edit
命令修改AlbConfig,刪除此AlbConfig的所有監(jiān)聽,即刪除spec.listeners
字段下的所有條目。重要若您集群中安裝的ALB Ingress Controller組件版本為v2.10.0-aliyun.1及以前版本,請執(zhí)行該操作。否則,請?zhí)^該步驟。
執(zhí)行以下命令,刪除AlbConfig。
重要刪除AlbConfig前,請刪除其關(guān)聯(lián)的所有Ingress資源。
kubectl delete AlbConfig <AlbConfig_NAME> # <AlbConfig_NAME>替換AlbConfig的名稱
創(chuàng)建監(jiān)聽
監(jiān)聽(Listeners)是ALB實(shí)例用來處理實(shí)際流量的頂層入口。只有創(chuàng)建了監(jiān)聽,ALB實(shí)例才能對外開放端口,接收客戶端的請求。
在AlbConfig中設(shè)置port
和protocol
即可創(chuàng)建對應(yīng)的監(jiān)聽。一旦修改了port
、protocol
以及其他監(jiān)聽的屬性,系統(tǒng)將會把原有的監(jiān)聽刪除,然后創(chuàng)建一個(gè)新的監(jiān)聽來替代它。
監(jiān)聽可以使用三種應(yīng)用層協(xié)議:HTTP、HTTPS、QUIC。
不同協(xié)議的多個(gè)監(jiān)聽可以同時(shí)使用,但需要在Ingress資源中配置Annotation以保證Ingress同時(shí)適用于多個(gè)監(jiān)聽。具體操作,請參見配置自定義監(jiān)聽端口。
創(chuàng)建HTTP監(jiān)聽
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
...
listeners:
- port: 80
protocol: HTTP # protocol的可選項(xiàng)為HTTP、HTTPS、QUIC。
...
HTTP協(xié)議自動兼容WebSocket,不需要特殊設(shè)置即可。
創(chuàng)建HTTPS監(jiān)聽
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
...
listeners:
- port: 443
protocol: HTTPS
...
使用HTTPS監(jiān)聽時(shí),需要配置證書。具體操作,請參見配置HTTPS證書以實(shí)現(xiàn)加密通信。
創(chuàng)建QUIC監(jiān)聽
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
...
listeners:
- port: 443
protocol: QUIC
...
使用QUIC監(jiān)聽可以兼容客戶端使用HTTP/3協(xié)議進(jìn)行訪問。使用QUIC監(jiān)聽的更多細(xì)節(jié),請參見使用QUIC監(jiān)聽兼容HTTP/3協(xié)議。
設(shè)置監(jiān)聽連接請求超時(shí)時(shí)間
在AlbConfig中可以指定監(jiān)聽,設(shè)置連接請求超時(shí)時(shí)間(單位為秒,取值范圍為[1,180])。若在超時(shí)時(shí)間內(nèi)后端服務(wù)器一直沒有響應(yīng),ALB實(shí)例將放棄等待,給客戶端返回HTTP 504錯(cuò)誤碼。如果不指定連接請求超時(shí)時(shí)間,則默認(rèn)為60秒。YAML示例如下。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
requestTimeout: 40 # 若不填入值,默認(rèn)超時(shí)時(shí)間為60秒
...
使用數(shù)據(jù)壓縮功能
開啟該功能后,ALB實(shí)例會對某些特定文件類型進(jìn)行壓縮。gzipEnabled
取值如下:
true
:對特定文件類型進(jìn)行壓縮。false
:不會對任何文件類型進(jìn)行壓縮。
目前Brotli支持壓縮所有類型,Gzip支持壓縮的類型包括text/xml、text/plain、text/css、application/javascript、application/x-javascript、application/rss + xml、application/atom + xml、application/xml和application/json。
開啟數(shù)據(jù)壓縮的YAML示例如下:
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
gzipEnabled: true
...
獲取客戶端真實(shí)IP
開啟此功能后,ALB實(shí)例在轉(zhuǎn)發(fā)請求到后端服務(wù)時(shí),在HTTP請求頭中添加客戶端真實(shí)IP的字段。XForwardedForEnabled
取值如下:
true
:獲取來訪者真實(shí)IP。false
:不獲取來訪者真實(shí)IP。
僅HTTP和HTTPS監(jiān)聽支持配置此參數(shù)。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
#...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForEnabled: true
#...
獲取客戶端的端口
開啟此功能后,ALB實(shí)例在轉(zhuǎn)發(fā)請求到后端服務(wù)時(shí),在HTTP請求頭中添加客戶端端口字段。XForwardedForClientSrcPortEnabled
取值如下:
true
:獲取負(fù)載均衡實(shí)例客戶端的端口。false
:不獲取負(fù)載均衡實(shí)例客戶端的端口。
僅HTTP和HTTPS監(jiān)聽支持配置此參數(shù)。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForClientSrcPortEnabled: true
...
獲取ALB實(shí)例的監(jiān)聽協(xié)議
開啟此功能后,ALB實(shí)例在轉(zhuǎn)發(fā)請求到后端服務(wù)時(shí),在HTTP請求頭中添加ALB實(shí)例使用的監(jiān)聽協(xié)議字段。XForwardedForProtoEnabled
取值如下:
true
:獲取實(shí)例的監(jiān)聽協(xié)議。false
:不獲取實(shí)例的監(jiān)聽協(xié)議。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForProtoEnabled: true
...
獲取ALB實(shí)例的ID
開啟此功能后,ALB實(shí)例在轉(zhuǎn)發(fā)請求到后端服務(wù)時(shí),在HTTP請求頭中添加ALB實(shí)例的ID字段。XForwardedForSLBIdEnabled
取值如下:
true
:獲取負(fù)載均衡實(shí)例的ID。false
:不獲取負(fù)載均衡實(shí)例的ID。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBIdEnabled: true
...
獲取ALB實(shí)例的監(jiān)聽端口
開啟此功能后,ALB實(shí)例在轉(zhuǎn)發(fā)請求到后端服務(wù)時(shí),在HTTP請求頭中添加實(shí)例的監(jiān)聽端口字段。XForwardedForSLBPortEnabled
取值如下:
true
:獲取實(shí)例的監(jiān)聽端口。false
:不獲取實(shí)例的監(jiān)聽端口。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBPortEnabled: true
...
指定可信代理服務(wù)器的IP
在AlbConfig中通過XForwardedForClientSourceIpsEnabled
配置項(xiàng)允許ALB實(shí)例從X-Forwarded-For
頭部字段中獲取真實(shí)客戶端IP。通過XForwardedForClientSourceIpsTrusted
配置項(xiàng),可以指定一組可信代理服務(wù)器的IP。ALB實(shí)例將從X-Forwarded-For
字段中的IP列表末尾開始向前遍歷,選擇第一個(gè)不在可信IP列表的IP作為客戶端的實(shí)際IP。
例如,X-Forwarded-For
中的值為<客戶端真實(shí)IP,代理IP-1,代理IP-2>
,您可以在XForwardedForClientSourceIpsTrusted
中填入代理IP-1
與代理IP-2
,以此獲取真實(shí)的客戶端IP。
僅HTTP和HTTPS監(jiān)聽支持配置此參數(shù)。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForClientSourceIpsEnabled: true # true表示允許ALB從X-Forwarded-For頭字段中查找真實(shí)客戶端IP,此時(shí)必須配置XForwardedForClientSourceIpsTrusted寫入格式正確的內(nèi)容;false表示不允許ALB從X-Forwarded-For頭字段中查找真實(shí)客戶端IP。
XForwardedForClientSourceIpsTrusted: 192.168.x.x;192.168.x.x/16 # 請輸入正確格式的IP或網(wǎng)段,并以 ; 分隔,IP或網(wǎng)段之間無需添加空格。僅在XForwardedForClientSourceIpsEnabled為true時(shí)生效。
...
設(shè)置ACL訪問控制
通過AlbConfig可以為ALB監(jiān)聽啟用訪問控制功能,通過設(shè)置入方向的允許或拒絕規(guī)則,對客戶端請求精確控制,管理請求轉(zhuǎn)發(fā)。關(guān)于ACL的更多信息,請參見配置ACL實(shí)現(xiàn)訪問控制。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
#...
listeners:
- port: 80
protocol: HTTP
aclConfig:
aclEntries:
- 127.0.0.1/32
aclType: White
#...
字段說明如下:
aclType
:用于設(shè)置監(jiān)聽的ACL為黑名單或白名單。取值為Black
和White
,分別表示黑名單和白名單。aclEntries
:用于設(shè)置訪問控制條目IP地址段,例如127.0.0.1/32。