ALB Ingress 基于火山引擎应用型负载均衡(Application Load Balancer,ALB),提供更加丰富的七层负载均衡能力。本文主要介绍通过 YAML 文件创建 ALBInstance,并配置 ALB Ingress 的相关操作。
背景信息
ALBInstance 是 ALB Ingress Controller 管理的 CRD 资源,ALB Ingress Controller 使用 ALBInstance 来配置和监听 ALB 实例。
说明
一个 ALBInstance 对应一个 ALB 实例,但一个 ALBInstance 可对应多个 Ingress,即 ALBInstance 与 Ingress 是一对多的对应关系。
前提条件
- 已开通 ALB 产品服务。若未开通,请首先登录您的火山引擎账号,然后单击 服务授权,并在弹出的页面中单击 立即授权,完成跨服务授权。
注意
如需使用证书中心的证书,请首先登录您的火山引擎账号,然后单击 服务授权,并在弹出的页面中单击 立即授权,完成跨服务授权。 - (可选)如需对接 ALB 标准版实例,请将 alb-ingress-controller 组件升级至 v0.31.1 及以上版本。详情请参见 升级组件。
创建 ALBInstance
对接已有 ALB 实例
使用如下 YAML 配置,创建 ALBInstance 并对接已有 ALB 实例。
apiVersion: loadbalancer.vke.volcengine.com/v1beta1
instanceID: "alb-2dgns526uiv41fi5***"
certificateSource: "alb"
certificateID: "cert-2wx20lm7uquww7oot***"
- domain: "example.com"
certificateSource: "alb"
certificateID: "cert-2wx20lo6vuww07oot***"
spec字段中的详细参数说明如下所示。
新建 ALB 实例
使用如下 YAML 配置,创建 ALBInstance 并同时创建新的 ALB 实例。
apiVersion: loadbalancer.vke.volcengine.com/v1beta1
- subnetId: "subnet-bp12mw1f8k3jg0****"
- subnetId: "subnet-bp12mw1f8k3jg1****"
bandwidthPackageID: "bwp-2d63yyj3ki4u858oz***"
certificateSource: "alb"
certificateID: "cert-2wx20lm7uquww7oot********"
certificateSource: "alb"
certificateID: "cert-2wx20lo6vuww07oot********"
spec字段中的详细参数说明如下所示。
配置 WAF 防护
说明
如果您需要为 ALB 配置 WAF 防护功能,需要:
- 已安装 alb-ingress-controller 组件,并升级至 v0.31.0 及以上版本。详情请参见 升级组件。
- 如果需要对已经创建的 ALB 实例配置 WAF 防护功能,可以到 ALB 控制台 进行操作。
使用 ALBInstance 创建新的 ALB 实例时,支持使用spec.instance中的wafConfig字段配置 ALB 实例的 WAF 防护功能。启用该功能后,ALB 实例会接入 Web 应用防火墙服务进行安全防护。当未配置wafConfig字段时,容器服务不会修改 ALB 侧的配置。本小节以创建私网类型的 ALB 为例,示例和说明如下:
apiVersion: loadbalancer.vke.volcengine.com/v1beta1
- subnetId: "subnet-22joc5bb2gnpc7r2***"
wafProtectionEnabled: "on"
spec.instance中wafConfig字段的参数说明如下所示。
说明
如果您需要为 ALB 配置访问日志投递功能,需要:
- 已安装 alb-ingress-controller 组件,并升级至 v0.31.0 及以上版本。详情请参见 升级组件。
- 如果需要对已经创建的 ALB 实例配置访问日志投递,可以到 ALB 控制台进行操作。
使用 ALBInstance 创建新的 ALB 实例时,支持使用spec.instance中的tlsAccessLogConfig字段配置 ALB 实例的访问日志投递功能。启用启该功能后,ALB 会将实例的访问日志投递至日志服务(TLS)中。当未配置tlsAccessLogConfig字段时,容器服务不会修改 ALB 侧的配置。本小节以创建私网类型的 ALB 为例,示例和说明如下:
apiVersion: loadbalancer.vke.volcengine.com/v1beta1
- subnetId: "subnet-22joc5bb2gnpc7r2***"
tlsAccessLogEnabled: "on"
tlsProjectID: "1155d3bb-4a85-4208***"
tlsTopicID: "7b0aa3b3-5d46-47e0-9a37***"
spec.instance中tlsAccessLogConfig字段的参数说明如下所示。
说明
如果您需要为 ALB 的监听器配置访问控制(ACL)功能,需要:
- 已安装 alb-ingress-controller 组件,并升级至 v0.31.0 及以上版本。详情请参见 升级组件。
使用 ALBInstance 对接已有 ALB 实例或创建新的 ALB 实例时,支持使用spec.listeners中的aclConfig字段配置 ALB 监听器的访问控制(ACL)功能。当未配置aclConfig字段时,容器服务不会修改 ALB 侧的配置。本小节以对接已有 ALB 实例为例,示例和说明如下:
apiVersion: loadbalancer.vke.volcengine.com/v1beta1
instanceID: "alb-2dgns526uiv41fi5***"
- "acl-2tgv80851uku81***"
- "acl-2tgv80660qiv41***"
spec.listeners中aclConfig字段的参数说明如下所示。
说明
如果您需要为 ALB 的监听器添加个性化配置,需要:
- 已安装 alb-ingress-controller 组件,并升级至 v0.31.0 及以上版本。详情请参见 升级组件。
使用 ALBInstance 对接已有 ALB 实例或创建新的 ALB 实例时,支持使用spec.listeners中的customizedConfig字段配置 ALB 监听器的个性化配置。当未配置customizedConfig字段时,容器服务不会修改 ALB 侧的配置。个性化配置支持创建并管理常规的 NGINX 配置策略,详情请参见 个性化配置。本小节以对接已有 ALB 实例为例,示例和说明如下: apiVersion: loadbalancer.vke.volcengine.com/v1beta1
instanceID: "alb-2dgns526uiv41fi5***"
customizedConfigEnabled: "on"
customizedCfgID: "ccfg-2dbdimgq77sao3r***"
spec.listeners中customizedConfig字段的参数说明如下所示。
当您在集群中创建 ALBInstance 后,可以使用如下方法确定 ALBInstance 的状态。
- 在集群管理页面的左侧导航栏中,选择 工作负载 > 对象浏览器。
- 在 对象浏览器 页面的 CRD 分类下,单击 albinstance。
-
- 在 albinstance 详情页面,查看创建的 ALBInstance 资源名称。
-
- 单击 操作 栏中的 编辑 Yaml,查看 ALBInstance 资源详情。其中status字段展示了 ALBInstance 资源的状态信息。
-
创建 ALB Ingress
注意
配置 ALB Ingress 时,paths.pathType参数仅用作校验,具体取值(Exact、Prefix 或 Regex)无实际意义。同时,在不同 ALB 实例类型时的默认动作不同:
- 当为 ALB 标准版实例时,无论paths.pathType为何取值,默认为 精确匹配 模式。如需实现 前缀匹配,请在paths.path中使用通配符*实现,例如将paths.path配置为/api/*。
- 当为 ALB 基础版实例时,无论paths.pathType为何取值,默认为 前缀匹配 模式。
基于域名转发
ALB Ingress 支持将不同的域名访问,转发到不同的后端。示例alb-ingress.yaml代码如下:
apiVersion: networking.k8s.io/v1
- host: first.example.com
- host: second.example.com
基于路径转发
ALB Ingress 支持将相同域名、不同路径的访问,转发到不同的后端。示例alb-ingress.yaml代码如下:
apiVersion: networking.k8s.io/v1
配置未指定 host 规则
ALB Ingress 支持配置未指定 host 规则。示例alb-ingress.yaml代码如下:
apiVersion: networking.k8s.io/v1
- host: first.example.com
- host: second.example.com
配置默认转发规则的后端服务器
示例alb-ingress.yaml代码如下:
apiVersion: networking.k8s.io/v1
说明
【邀测·申请试用】:当 ALB 为基础版时,功能仍处于邀测阶段,如需使用,请提交申请。 ALB Ingress 支持在 path 路径上定义正则表达式路径或非正则表达式路径,如下表所示。
说明
当您在 ALB Ingress 的 path 中使用 /~ 或 /~* 配置正则表达式路径时,VKE 传递给 ALB 时会去掉对应的 /。例如:当您撰写的路径为 /~/test/[a-z]* 时,实际转发给 ALB 的路径为 ~/test/[a-z]*。此时,类似于 /test/test 的路径即可命中该正则表达式。
示例alb-ingress.yaml代码如下:
apiVersion: networking.k8s.io/v1