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 是一对多的对应关系。
k8s_
前缀的内容。k8s_
前缀的内容。listeners
字段的内容发生变化时,系统会自动调谐更新监听器与证书。使用如下 YAML 配置,创建 ALBInstance 并对接已有 ALB 实例。
apiVersion: loadbalancer.vke.volcengine.com/v1beta1 kind: ALBInstance metadata: name: alb # ALBInstance 资源名称 spec: instanceID: "alb-2dgns526uiv41fi5***" # 已有 ALB 实例的 ID。 listeners: - protocol: "HTTP" # 监听器的协议 port: 80 # 监听器协议为 HTTP 时的监听端口 - protocol: "HTTPS" # 监听器的协议 port: 443 # 监听器协议为 HTTPS 时的监听端口 certificateSource: "cert_center" # 监听器证书来源,取值:alb(ALB)、cert_center(证书中心) certificateID: "cert-2wx20lm7uquww7oot***" # 监听器协议为 HTTPS 时默认全域名使用的服务器证书 domainExtensions: - domain: "example.com" # 监听器协议为 HTTPS 时支持指定域名绑定服务器证书 certificateSource: "cert_center" # 监听器证书来源,取值:alb(ALB)、cert_center(证书中心) certificateID: "cert-2wx20lo6vuww07oot***" # 监听器协议为 HTTPS 时支持指定域名绑定服务器证书 enableHTTP2: true enableQUIC: true
spec
字段中的详细参数说明如下所示。
字段 | 类型 | 是否必选 | 描述 | 取值示例 | 是否支持修改 |
---|---|---|---|---|---|
instanceID | String | 是 | 指定已存在的 ALB 实例 ID。 | alb-2dgns526uiv41fi5*** | 否 |
listeners.protocol | String | 否 | 监听器协议。取值:
| HTTP | 是 |
listeners.port | Integer | 否 | 监听器端口。取值:
| 80 | 是 |
listeners.certificateSource | String | 否 | 监听器关联证书的来源。当监听器协议为
| cert_center | 是 |
listeners.certificateID | String | 否 | 监听器关联证书 ID。当监听器协议为HTTPS 时必选。 | cert-2wx20lm7uquww7*** | 是 |
listeners.domainExtensions.domain | String | 否 | HTTPS 监听器关联的扩展域名。 | test.com | 是 |
listeners.domainExtensions.certificateSource | String | 否 | 监听器扩展域名的证书来源,取值:
说明 【邀测·申请试用】:使用证书中心的证书创建 HTTPS 协议的 ALB Ingress 目前处于邀测阶段,如需使用,请联系客户经理。 | cert_center | 是 |
listeners.domainExtensions.certificateID | String | 否 | HTTPS 监听器扩展域名的服务器证书 ID。 | cert-2wx20lo6vuww07*** | 是 |
listeners.enableHTTP2 | Boolean | 否 | HTTP2.0 特性开关,该参数仅对 HTTPS 监听器有效。取值:
| true | 是 |
listeners.enableQUIC | Boolean | 否 | QUIC 特性开关,该参数仅对 HTTPS 监听器有效。取值:
| true | 是 |
说明
当您选择创建 HTTPS 协议的监听器时,需要首先完成 HTTPS 证书配置,详情请参见 配置 HTTPS 证书。
使用如下 YAML 配置,创建 ALBInstance 并同时创建新的 ALB 实例。
apiVersion: loadbalancer.vke.volcengine.com/v1beta1 kind: ALBInstance metadata: name: alb # ALBInstance 资源名称 spec: instance: name: "demo-alb" # ALB 实例名称 zoneMappings: # ALB 实例位于多可用区的子网列表 - subnetId: "subnet-bp12mw1f8k3jg0****" # 子网 ID,用于 ALB 实例在此可用区下的私网 IP 地址分配 - subnetId: "subnet-bp12mw1f8k3jg1****" addressType: "public" # 负载均衡类型。取值:public(公网类型)、 private(私网类型) eipSpec: isp: "BGP" # 公网负载均衡实例的 EIP 线路类型。取值:BGP bandwidth: 10 # 带宽上限。当 billingType 为 2 时,取值范围为 1~500Mbps;当 billingType 为 3 时,取值范围为 1~200Mbps billingType: 2 # 计费类型。取值:2(按量计费-按带宽上限)、3(按量计费-按实际流量) bandwidthPackageID: "bwp-2d63yyj3ki4u858oz***" # 共享带宽资源包 ID ipVersion: "ipv4" # IP 版本。取值:ipv4 deleteProtection: "on" # ALB 实例的删除保护功能,on 表示开启,off 表示关闭 blockCascadeDeletion: true # 删除 ALB Ingress 时,是否同步删除 ALBInstance listeners: - protocol: "HTTP" # 监听器的协议 port: 80 # 监听器协议为 HTTP 时的监听端口 - protocol: "HTTPS" # 监听器的协议 port: 443 # 监听器协议为 HTTPS 时的监听端口 certificateSource: "cert_center" # 监听器证书来源,取值:alb(ALB)、cert_center(证书中心) certificateID: "cert-2wx20lm7uquww7oot********" # 监听器协议为 HTTPS 时默认全域名使用的服务器证书 domainExtensions: - domain: "test.com" # 监听器协议为 HTTPS 时支持指定域名绑定服务器证书 certificateSource: "cert_center" # 监听器证书来源,取值:alb(ALB)、cert_center(证书中心) certificateID: "cert-2wx20lo6vuww07oot********" # 监听器协议为 HTTPS 时支持指定域名绑定服务器证书 enableHTTP2: true enableQUIC: true
spec
字段中的详细参数说明如下所示。
字段 | 类型 | 是否必选 | 描述 | 取值示例 | 是否支持修改 |
---|---|---|---|---|---|
instance.name | String | 是 | 新创建 ALB 的实例名称。 | alb | 否 |
instance.zoneMappings.N.subnetId | String | 是 | 子网 ID,ALB 实例在此可用区下的私网 IP 地址将从此子网网段中分配。 注意
| subnet-bp12mw1f8k3jg0*** | 否 |
instance.addressType | String | 否 | 新创建 ALB 的网络类型。取值:
| public | 否 |
instance.eipSpec.isp | String | 否 | 公网 ALB 实例的公网 IP 线路类型。包括:BGP、SingleLine_BGP、Static_BGP、Fusion_BGP、ChinaMobile、ChinaTelecom、ChinaUnicom、ChinaMobile_Value、ChinaUnicom_Value 和 ChinaTelecom_Value。详细参数解释,请参见 EIP 产品文档。 注意 除 BGP 外,其他线路类型均为 EIP 产品的邀测功能,如需使用,请 提交工单 或联系客户经理申请。 | BGP | 否 |
instance.eipSpec.bandwidth | Integer | 否 | 公网 ALB 实例的公网 IP 的带宽峰值。
说明 如果您通过工单提升了 EIP 的带宽上限,则此处的带宽取值范围会同步提升。详情请参见 EIP 使用限制。 | 10 | 否 |
instance.eipSpec.billingType | Integer | 否 | 公网 ALB 实例的公网 IP 的计费方式。取值:
| 2 | 否 |
instance.eipSpec.bandwidthPackageID | String | 否 | 共享带宽包 ID。 | - | 是 |
instance.ipVersion | String | 否 | IP 版本。取值固定为 ipv4。 | ipv4 | 否 |
instance.deleteProtection | String | 否 | ALB 实例的删除保护功能,取值:
| on | 是 |
blockCascadeDeletion | Boolean | 否 | 删除 ALB Ingress 时,是否同步删除对应的 ALBInstance,取值:
说明 当未配置该参数时,系统默认采用 | true | 是 |
listeners.protocol | String | 否 | 监听器协议。取值:
| HTTP | 是 |
listeners.port | Integer | 否 | 监听器端口。取值:
| 80 | 是 |
listeners.certificateSource | String | 否 | 监听器关联证书的来源。当监听器协议为
说明 【邀测·申请试用】:使用证书中心的证书创建 HTTPS 协议的 ALB Ingress 目前处于邀测阶段,如需使用,请联系客户经理。 | cert_center | 是 |
listeners.certificateID | String | 否 | 监听器关联的证书 ID。当监听器协议为HTTPS 时必选。 | cert-2wx20lm7uquww7*** | 是 |
listeners.domainExtensions.domain | String | 否 | HTTPS 监听器关联的扩展域名。 | test.com | 是 |
listeners.domainExtensions.certificateSource | String | 否 | 监听器扩展域名的证书来源,取值:
说明 【邀测·申请试用】:使用证书中心的证书创建 HTTPS 协议的 ALB Ingress 目前处于邀测阶段,如需使用,请联系客户经理。 | cert_center | 是 |
listeners.domainExtensions.certificateID | String | 否 | HTTPS 监听器扩展域名使用的服务器证书。 | cert-2wx20lo6vuww07*** | 是 |
listeners.enableHTTP2 | Boolean | 否 | HTTP2.0 特性开关,该参数仅对 HTTPS 监听器有效。取值:
| true | 是 |
listeners.enableQUIC | Boolean | 否 | QUIC 特性开关,该参数仅对 HTTPS 监听器有效。取值:
说明 该功能是 ALB 产品的邀测功能,如需使用,请 提交工单 申请。 | true | 是 |
说明
当您选择创建 HTTPS 协议的监听器时,需要首先完成 HTTPS 证书配置,详情请参见 配置 HTTPS 证书。
当您在集群中创建 ALBInstance 后,可以使用如下方法确定 ALBInstance 的状态。
登录 容器服务控制台。
单击左侧导航栏中的 集群。
在集群列表页面,单击目标集群。
在集群管理页面的左侧导航栏中,选择 工作负载 > 对象浏览器。
在 对象浏览器 页面的 CRD 分类下,单击 albinstance。
在 albinstance 详情页面,查看创建的 ALBInstance 资源名称。
单击 操作 栏中的 编辑 Yaml,查看 ALBInstance 资源详情。其中status
字段展示了 ALBInstance 资源的状态信息。
status
字段中不同的取值含义如下表所示。
字段 | 类型 | 含义 |
---|---|---|
phase | String | 表示 ALBInstance 资源状态:
|
instanceID | String | 表示关联的 ALB 实例 ID。 |
ingress | *v1.LoadBalancerIngress | 表示 ALB 的 IP 地址、监听器端口和协议。 |
ALB Ingress 支持将不同的域名访问,转发到不同的后端。示例alb-ingress.yaml
代码如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress # 路由规则的名称 namespace: default # 路由规则所属的命名空间 spec: ingressClassName: alb # ALBInstance 资源名称 rules: - host: first.example.com # 需要对外提供访问的域名 http: paths: - pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配) path: / # 请求匹配的路径 backend: service: name: service-demo-a # 需要对接的服务名称 port: number: 80 # 需要对接服务的端口号 - host: second.example.com # 需要对外提供访问的域名 http: paths: - pathType: Prefix # 路径匹配规则。取值:Exact(精确匹配)、Prefix(前缀匹配) path: / # 请求匹配的路径 backend: service: name: service-demo-b # 需要对接的服务名称 port: number: 80 # 需要对接服务的端口号
ALB Ingress 支持将相同域名、不同路径的访问,转发到不同的后端。示例alb-ingress.yaml
代码如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress # 路由规则的名称 namespace: default # 路由规则所属的命名空间 spec: ingressClassName: alb # ALBInstance 资源名称 rules: - host: example.com # 需要对外提供访问的域名 http: paths: - path: /foo # 请求匹配的路径 pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配) backend: service: name: service-demo-a # 需要对接的服务名称 port: number: 80 # 需要对接服务的端口号 - path: /bar # 请求匹配的路径 pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配) backend: service: name: service-demo-b # 需要对接的服务名称 port: number: 80 # 需要对接服务的端口号
ALB Ingress 支持配置未指定 host 规则。示例alb-ingress.yaml
代码如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress # 路由规则的名称 namespace: default # 路由规则所属的命名空间 spec: ingressClassName: alb # ALBInstance 资源名称 rules: - host: first.example.com # 需要对外提供访问的域名 http: paths: - pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配) path: / # 请求匹配的路径 backend: service: name: service-demo-a # 需要对接的服务名称 port: number: 80 # 需要对接服务的端口号 - host: second.example.com # 需要对外提供访问的域名 http: paths: - pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配) path: / # 请求匹配的路径 backend: service: name: service-demo-b # 需要对接的服务名称 port: number: 80 # 需要对接服务的端口号 - http: paths: - pathType: Prefix path: / backend: service: name: service-demo port: number: 80
示例alb-ingress.yaml
代码如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: alb-ingress # 路由规则的名称 namespace: default # 路由规则所属的命名空间 spec: ingressClassName: alb # ALBInstance 资源名称 rules: - http: paths: - pathType: Prefix path: / backend: service: name: service-demo port: number: 80
说明
【邀测·申请试用】:该功能在 VKE 和 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 kind: Ingress metadata: name: alb-ingress namespace: default spec: ingressClassName: alb rules: - host: example.com http: paths: - path: /~/test/[a-z]* # 使用正则表达式匹配路径 pathType: Prefix backend: service: name: service-demo port: number: 80