通过AlbConfig配置ALB监听

AlbConfig的Listeners字段用于配置ALB的监听。本文介绍Listeners字段说明以及如何通过AlbConfig来创建、修改和更新监听。

前提条件

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中设置portprotocol即可创建对应的监听,portprotocol是监听的唯一属性。一旦修改了portprotocol以及其他监听的属性,系统将会把原有的监听删除,然后创建一个新的监听来替代它。

说明

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表示不获取实例的监听协议。
  ...

获取监听负载均衡实例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: 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