AlbConfig的Listeners欄位用於配置ALB的監聽。本文介紹Listeners欄位說明以及如何通過AlbConfig來建立、修改和更新監聽。
前提條件
已建立兩個不同可用性區域的交換器,並且與叢集處於同一VPC。具體操作,請參見建立和管理交換器。
已為叢集安裝ALB Ingress Controller組件。具體操作,請參見管理ALB Ingress Controller組件。
說明若需要在ACK專有叢集中通過ALB Ingress訪問服務,在部署服務前需要為ALB Ingress Controller授權。具體操作,請參見為ACK專有叢集授予ALB Ingress Controller存取權限。
已建立AlbConfig資源。具體操作,請參見建立AlbConfig。
已通過kubectl工具串連叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
Listeners欄位說明
名詞解釋
對象設定檔:用於定義和描述Kubernetes對象的檔案,其中包含了對象的規範和配置資訊。
現有對象設定檔:已經應用到Kubernetes叢集中的對象設定檔。
last-applied-configuration欄位:Kubernetes對象中的註解欄位,用於記錄對象最後一次的配置資訊。它不會隨著對象配置的變化而即時更新。
Listeners欄位更新方式
Listeners欄位屬於數群組類型的配置,一般採用替換方式進行配置更新。當您更新Listeners欄位時,新的配置內容會完全替換現有的配置內容。詳情見下表:
序號 | 條件 | 結果 | ||
對象是否在對象設定檔中 | 對象是否在現有對象設定檔中 | 對象是否在last-applied-configuration欄位中 | ||
① | 是 | 是 | -(無需關注) | 將對象設定檔中的值應用於現有設定檔,來更新現有對象的特定欄位。 |
② | 是 | 否 | -(無需關注) | 使用對象設定檔中的值來建立一個新的對象,而不是更新現有對象的配置。 |
③ | 否 | -(無需關注) | 是 | 從現有對象設定檔中移除某個欄位。這意味著該欄位將從現有對象配置中刪除,實際上該欄位可能會被重設為預設值。 |
④ | 否 | 是 | 否 | 表示從現有對象設定檔中移除某個欄位。 |
樣本說明
當對象設定檔、現有對象設定檔和last-applied-configuration
欄位的Listeners範例程式碼分別為如下配置:
# 對象設定檔給出了如下期望的配置值。
listeners:
- port: 8001
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8005 # 添加8005
protocol: HTTP
# 現有對象設定檔展示了實際存在對象的配置。
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # 刪除8002
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8004 # 刪除8004
protocol: HTTP
# last-applied-configuration記錄了對象的最後一次應用配置。
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # 刪除8002
protocol: HTTP
- port: 8003
protocol: HTTP
最終AlbConfig的Listeners欄位將更新為如下結果:
# Listeners設定檔的結果
listeners:
- port: 8001
protocol: HTTP
- port: 8003
protocol: HTTP
- port: 8005
protocol: HTTP
8001和8003符合條件①,執行保留。
8005符合條件②,執行添加。
8002符合條件③,執行刪除。
8004符合條件④,執行刪除。
建立監聽
監聽是ALB執行個體用來處理實際流量的頂層入口,使得ALB執行個體能夠根據應用程式層資訊智能地分發流量。
執行命令kubectl edit albconfig <Albconfig_Name>
,在Albconfig中設定port
和protocol
即可建立對應的監聽,port
和protocol
是監聽的唯一屬性。一旦修改了port
、protocol
以及其他監聽的屬性,系統將會把原有的監聽刪除,然後建立一個新的監聽來替代它。
HTTP協議自動相容WebSocket,不需要特殊設定即可。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
...
listeners:
- port: 80
protocol: HTTP # protocol的可選項為HTTP、HTTPS、QUIC。
...
指定認證
配置ALB時,如果需要為HTTPS協議啟用加密和身分識別驗證,執行命令kubectl edit albconfig <Albconfig_Name>
,在Albconfig中將certificates
參數指定為認證的ID,以便為監聽指定一個認證,用於HTTPS流量的加密和解密。
如果在配置中沒有指定認證,那麼在建立ALB時,監聽將不會立即建立。相反,它將會等到有Ingress關聯,並根據網域名稱自動探索認證後才會建立監聽。這意味著監聽的建立會根據網域名稱自動探索認證的情況進行延遲。
更多認證配置方式,請參見配置HTTPS認證以實現加密通訊。
ALB會將第一個認證設定為預設認證,只有當預設認證到期或不再適用時,ALB才會考慮使用其他認證進行請求的加密。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
...
listeners:
- caEnabled: false
certificates:
- CertificateId: 756****-cn-hangzhou # 認證ID。
IsDefault: true
port: 443
protocol: HTTPS
...
指定TLS安全性原則
執行命令kubectl edit albconfig <Albconfig_Name>
,在Albconfig中為securityPolicyId
參數配置安全性原則ID。AlbConfig配置HTTPS監聽時,支援指定TLS安全性原則。TLS安全性原則包含自訂策略和系統預設策略。更多資訊,請參見TLS安全性原則。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb-demo
spec:
config:
...
listeners:
- port: 443
protocol: HTTPS
securityPolicyId: tls_cipher_policy_1_1 # 安全性原則ID。
...
設定監聽請求逾時時間
執行命令kubectl edit albconfig <Albconfig_Name>
,在Albconfig中通過requestTimeout
參數指定監聽的串連請求逾時時間,以避免用戶端長時間等待沒有響應的請求。
串連請求逾時時間是指在用戶端發出請求後,如果在指定的時間內後端伺服器一直沒有給出響應,負載平衡將放棄等待並向用戶端返回一個HTTP 504錯誤碼。
請求逾時時間的單位為秒,取值範圍為[1,180]。
未指定串連請求逾時時間時,預設逾時時間為60秒。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
requestTimeout: 60 # 指定監聽的串連請求逾時時間,取值範圍為[1,180]。未指定串連請求逾時時間,則將使用預設逾時時間60秒。
...
使用資料壓縮功能
資料壓縮是一種最佳化技術,可以減少傳輸的資料量,提高網路傳輸效率和效能。執行命令kubectl edit albconfig <Albconfig_Name>
,在Albconfig中設定參數gzipEnabled
,指定相關監聽是否開啟資料壓縮。目前,Brotli和Gzip兩種資料壓縮演算法被廣泛使用。
Brotli支援壓縮所有類型。
Gzip支援壓縮的類型包括text/plain、text/css、application/javascript、application/x-javascript、application/rss+xml、application/atom+xml、application/xml和application/json。
以下YAML程式碼範例為關閉資料壓縮。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
gzipEnabled: false # true表示對特定檔案類型進行壓縮,false表示不會對任何檔案類型進行壓縮。
...
擷取來訪者用戶端IP
執行命令kubectl edit albconfig <Albconfig_Name>
,在Albconfig中通過X-Forwarded-For
頭欄位擷取用戶端的真實IP。
僅HTTP和HTTPS監聽支援配置此參數。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForEnabled: true # XForwardedForEnabled暫不支援關閉。
...
擷取監聽訪問協議
執行命令kubectl edit albconfig <Albconfig_Name>
,在Albconfig中通過X-Forwarded-For
頭欄位擷取執行個體的監聽協議。
僅HTTP和HTTPS監聽支援配置此參數。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForProtoEnabled: true # true表示擷取執行個體的監聽協議,false表示不擷取執行個體的監聽協議。
...
擷取監聽Server Load Balancer執行個體ID
執行命令kubectl edit albconfig <Albconfig_Name>
,在Albconfig中通過XForwardedForSLBIdEnabled
頭欄位擷取Server Load Balancer執行個體的ID。
僅HTTP和HTTPS監聽支援配置此參數。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBIdEnabled: true # true表示擷取Server Load Balancer執行個體的ID,false表示不擷取Server Load Balancer執行個體的ID。
...
擷取監聽的連接埠
執行命令kubectl edit albconfig <Albconfig_Name>
,在Albconfig中通過XForwardedForSLBPortEnabled
頭欄位擷取執行個體的監聽連接埠。
僅HTTP和HTTPS監聽支援配置此參數。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBPortEnabled: true # true表示擷取Server Load Balancer執行個體用戶端的連接埠,false表示不擷取Server Load Balancer執行個體用戶端的連接埠。
...
指定可信的代理IP
執行命令kubectl edit albconfig <Albconfig_Name>
,在Albconfig中通過XForwardedForClientSourceIpsEnabled
配置項允許應用型負載平衡ALB從X-Forwarded-For
頭部欄位中擷取真實用戶端IP。通過XForwardedForClientSourceIpsTrusted
配置項,可以指定一組可信的代理IP。應用型負載平衡ALB將從X-Forwarded-For
欄位中的IP列表末尾開始向前遍曆,選擇第一個不在可信IP列表的IP作為用戶端的實際IP,該IP會被用於源IP限速等情境。
僅HTTP和HTTPS監聽支援配置此參數。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForClientSourceIpsEnabled: true # true表示允許ALB從X-Forwarded-For頭欄位中尋找真實用戶端IP,此時必須配置XForwardedForClientSourceIpsTrusted寫入格式正確的內容;false表示不允許ALB從X-Forwarded-For頭欄位中尋找真實用戶端IP。
XForwardedForClientSourceIpsTrusted: 192.168.x.x;192.168.x.x/16 # 請輸入正確格式的IP或網段,並以 ; 分隔,IP或網段之間無需添加空格。僅在XForwardedForClientSourceIpsEnabled為true時生效。
...
設定存取控制
執行命令kubectl edit albconfig <Albconfig_Name>
,在Albconfig中通過aclConfig
參數可以為ALB監聽啟用存取控制功能,以實現對用戶端請求的精確控制並管理請求轉寄。您可以通過設定入方向的允許或拒絕規則來限制特定IP地址。更多存取控制配置,請參見配置ACL實現存取控制。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
aclConfig: # 為ALB監聽啟用存取控制功能。
aclEntries:
- 127.0.0.1/32 # 用於設定存取控制條目IP位址區段,且IP位址區段必須是完整的CIDR地址
aclType: White # 用於設定監聽的ACL為黑名單或白名單。取值為Black或White。
...
刪除監聽
一個執行個體可能對應多個監聽。執行命令kubectl edit albconfig <Albconfig_Name>
,在Albconfig中將想要刪除的監聽從albconfig.spec.listeners
欄位中刪除即可。
刪除監聽之前必須移除監聽下的全部Ingress,否則無法成功移除監聽,並會產生相關報錯。
# 刪除監聽前的配置。
listeners:
- port: 8001
protocol: HTTP
- port: 8002 # 刪除8002監聽。
protocol: HTTP
# 刪除監聽後的配置。
listeners:
- port: 8001
protocol: HTTP