AlbConfig的Listeners字段用于配置ALB的监听。本文介绍Listeners字段说明以及如何通过AlbConfig来创建、修改和更新监听。
前提条件
已创建ACK托管集群、ACK专有集群或ACK Serverless集群,Kubernetes版本为1.18及以上版本。具体操作,请参见创建Kubernetes托管版集群、创建Kubernetes专有版集群、容器服务 Serverless 版使用快速入门。
已创建两个不同可用区的交换机,并且与集群处于同一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关联,并根据域名自动发现证书后才会创建监听。这意味着监听的创建会根据域名自动发现证书的情况进行延迟。
更多证书配置方式,请参见使用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
...
参数 | 说明 |
CertificateId | 证书ID。本示例配置为756****-cn-hangzhou。CertificateId格式示例及说明如下:
|
IsDefault | 是否为默认证书。本文配置为true,表示是默认证书。 |
protocol | 支持监听的协议类型。本文配置为HTTPS,表示支持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 # true表示获取来访者真实IP,false表示不获取来访者真实IP。
...
获取监听访问协议
执行命令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表示不获取实例的监听协议。
...
获取监听负载均衡实例ID
执行命令kubectl edit albconfig <Albconfig_Name>
,在Albconfig中通过XForwardedForSLBIdEnabled
头字段获取负载均衡实例的ID。
仅HTTP和HTTPS监听支持配置此参数。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: default
spec:
config:
...
listeners:
- port: 80
protocol: HTTP
xForwardedForConfig:
XForwardedForSLBIdEnabled: true # true表示获取负载均衡实例的ID,false表示不获取负载均衡实例的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表示获取负载均衡实例客户端的端口,false表示不获取负载均衡实例客户端的端口。
...
指定可信的代理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: HTTPS
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