You need to enable JavaScript to run this app.
导航
通过 kubectl 创建 ALB Ingress
最近更新时间:2024.09.14 10:40:09首次发布时间:2023.11.17 14:23:37

ALB Ingress 基于火山引擎应用型负载均衡(Application Load Balancer,ALB),提供更加丰富的七层负载均衡能力。本文主要介绍通过 YAML 文件创建 ALBInstance,并配置 ALB Ingress 的相关操作。

背景信息

ALBInstance 是 ALB Ingress Controller 管理的 CRD 资源,ALB Ingress Controller 使用 ALBInstance 来配置和监听 ALB 实例。
alt

说明

一个 ALBInstance 对应一个 ALB 实例,但一个 ALBInstance 可对应多个 Ingress,即 ALBInstance 与 Ingress 是一对多的对应关系。

使用限制

  • 请勿擅自在 ALB 控制台上更改通过创建 ALB Ingress 维护的 ALB 实例、监听器、后端服务器组和转发规则,否则将造成集群中的 Ingress 服务异常,须自行承担责任。
  • 请勿修改监听器和后端服务器组的名称中带有k8s_前缀的内容。
  • 请勿修改转发规则描述中带有k8s_前缀的内容。
  • 若在 ALB 控制台上修改 ALB Ingress 指定或维护的资源和配置(例如:转发规则),可能存在配置被覆盖的风险。
  • 当 ALBInstance 中listeners字段的内容发生变化时,系统会自动调谐更新监听器与证书。
  • 当不同 ALBInstance 针对同一个域名提供了不同证书 ID 时,如果该域名已存在证书,则系统会根据 ALBInstance 指定证书的状态选择是否更新证书,包括:
    • 如果 ALBInstance 指定的证书不存在,则不会更新。
    • 如果 ALBInstance 指定的证书已过期,则不会更新。
    • 如果 ALB Ingress 指定的证书已存在且未过期,则会更新证书。
  • 使用应用型负载均衡(Application Load Balancer,ALB)产品,会产生云基础资源使用费用。详细信息,请参见 应用型负载均衡产品计费

前提条件

  • 已创建集群,详情请参见 创建集群
  • 已连接集群,详情请参见 连接集群
  • (可选)配置 HTTPS 协议的 ALB Ingress 时,需要提前完成证书配置。详情请参见 证书管理
  • (可选)如需使用证书中心的证书,请首先登录您的火山引擎账号,然后单击 服务授权,并在弹出的页面中单击 立即授权,完成跨服务授权。

创建 ALBInstance

对接已有 ALB 实例

使用如下 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字段中的详细参数说明如下所示。

字段类型是否必选描述取值示例是否支持修改
instanceIDString指定已存在的 ALB 实例 ID。alb-2dgns526uiv41fi5***

listeners.protocol

String

监听器协议。取值:

  • HTTP(默认值)
  • HTTPS

HTTP

listeners.port

Integer

监听器端口。取值:

  • 取值范围:1~65535
  • 默认值:80(HTTP)、443(HTTPS)

80

listeners.certificateSource

String

监听器关联证书的来源。当监听器协议为HTTPS时必选。取值:

  • alb:ALB 管理的证书。
  • cert_center:证书中心管理的证书。

cert_center

listeners.certificateIDString监听器关联证书 ID。当监听器协议为HTTPS时必选。cert-2wx20lm7uquww7***
listeners.domainExtensions.domainStringHTTPS 监听器关联的扩展域名。test.com

listeners.domainExtensions.certificateSource

String

监听器扩展域名的证书来源,取值:

  • alb:ALB 管理的证书。
  • cert_center:证书中心管理的证书。

说明

邀测·申请试用】:使用证书中心的证书创建 HTTPS 协议的 ALB Ingress 目前处于邀测阶段,如需使用,请联系客户经理。

cert_center

listeners.domainExtensions.certificateIDStringHTTPS 监听器扩展域名的服务器证书 ID。cert-2wx20lo6vuww07***

listeners.enableHTTP2

Boolean

HTTP2.0 特性开关,该参数仅对 HTTPS 监听器有效。取值:

  • true:启用 HTTP2.0 协议特性。
  • false:(默认值)禁用 HTTP2.0 协议特性。

true

listeners.enableQUIC

Boolean

QUIC 特性开关,该参数仅对 HTTPS 监听器有效。取值:

  • true:启用 QUIC 协议特性。
  • false:(默认值)禁用 QUIC 协议特性。

true

说明

当您选择创建 HTTPS 协议的监听器时,需要首先完成 HTTPS 证书配置,详情请参见 配置 HTTPS 证书

新建 ALB 实例

使用如下 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.nameString新创建 ALB 的实例名称。alb

instance.zoneMappings.N.subnetId

String

子网 ID,ALB 实例在此可用区下的私网 IP 地址将从此子网网段中分配。

注意

  • 允许配置多个不同的子网。
  • 多个不同的子网不允许位于同一可用区。

subnet-bp12mw1f8k3jg0***

instance.addressType

String

新创建 ALB 的网络类型。取值:

  • public:(默认值)公网
  • private:私网

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 的带宽峰值。

  • instance.eipSpec.billingType取值为 2 时,取值范围为 1~500,单位为 Mbps。
  • instance.eipSpec.billingType取值为 3 时,取值范围为 1~200,单位为 Mbps。

说明

如果您通过工单提升了 EIP 的带宽上限,则此处的带宽取值范围会同步提升。详情请参见 EIP 使用限制

10

instance.eipSpec.billingType

Integer

公网 ALB 实例的公网 IP 的计费方式。取值:

  • 2:(默认值)表示按量计费-按带宽上限计费。
  • 3,表示按量计费-按实际流量计费。

2

instance.eipSpec.bandwidthPackageIDString共享带宽包 ID。-
instance.ipVersionStringIP 版本。取值固定为 ipv4。ipv4

instance.deleteProtection

String

ALB 实例的删除保护功能,取值:

  • on:表示开启删除保护功能。
  • off:(默认值)表示禁用删除保护功能。

on

blockCascadeDeletion

Boolean

删除 ALB Ingress 时,是否同步删除对应的 ALBInstance,取值:

  • true:删除 ALB Ingress 时,不会同步删除对应的 ALBInstance。
  • false:删除 ALBInstance 关联的最后一个 ALB Ingress 时,会同步删除对应的 ALBInstance。

说明

当未配置该参数时,系统默认采用false逻辑,即删除 ALBInstance 关联的最后一个 ALB Ingress 时,会同步删除对应的 ALBInstance。

true

listeners.protocol

String

监听器协议。取值:

  • HTTP(默认值)
  • HTTPS

HTTP

listeners.port

Integer

监听器端口。取值:

  • 取值范围:1~65535
  • 默认值:80(HTTP)、443(HTTPS)

80

listeners.certificateSource

String

监听器关联证书的来源。当监听器协议为HTTPS时必选。取值:

  • alb:ALB 管理的证书。
  • cert_center:证书中心管理的证书。

说明

邀测·申请试用】:使用证书中心的证书创建 HTTPS 协议的 ALB Ingress 目前处于邀测阶段,如需使用,请联系客户经理。

cert_center

listeners.certificateIDString监听器关联的证书 ID。当监听器协议为HTTPS时必选。cert-2wx20lm7uquww7***
listeners.domainExtensions.domainStringHTTPS 监听器关联的扩展域名。test.com

listeners.domainExtensions.certificateSource

String

监听器扩展域名的证书来源,取值:

  • alb:ALB 管理的证书。
  • cert_center:证书中心管理的证书。

说明

邀测·申请试用】:使用证书中心的证书创建 HTTPS 协议的 ALB Ingress 目前处于邀测阶段,如需使用,请联系客户经理。

cert_center

listeners.domainExtensions.certificateIDStringHTTPS 监听器扩展域名使用的服务器证书。cert-2wx20lo6vuww07***

listeners.enableHTTP2

Boolean

HTTP2.0 特性开关,该参数仅对 HTTPS 监听器有效。取值:

  • true:启用 HTTP2.0 协议特性。
  • false:(默认值)禁用 HTTP2.0 协议特性。

true

listeners.enableQUIC

Boolean

QUIC 特性开关,该参数仅对 HTTPS 监听器有效。取值:

  • true:启用 QUIC 协议特性。
  • false:(默认值)禁用 QUIC 协议特性。

说明

该功能是 ALB 产品的邀测功能,如需使用,请 提交工单 申请。

true

说明

当您选择创建 HTTPS 协议的监听器时,需要首先完成 HTTPS 证书配置,详情请参见 配置 HTTPS 证书

查看 ALBInstance 名称和状态

当您在集群中创建 ALBInstance 后,可以使用如下方法确定 ALBInstance 的状态。

  1. 登录 容器服务控制台

  2. 单击左侧导航栏中的 集群

  3. 在集群列表页面,单击目标集群。

  4. 在集群管理页面的左侧导航栏中,选择 工作负载 > 对象浏览器

  5. 在 对象浏览器 页面的 CRD 分类下,单击 albinstance
    alt

  6. 在 albinstance 详情页面,查看创建的 ALBInstance 资源名称。
    alt

  7. 单击 操作 栏中的 编辑 Yaml,查看 ALBInstance 资源详情。其中status字段展示了 ALBInstance 资源的状态信息。
    alt

    status字段中不同的取值含义如下表所示。

    字段类型含义

    phase

    String

    表示 ALBInstance 资源状态:

    • Pending:表示关联的 ALBInstance 还未调谐完成。
    • Running:表示 ALBInstance 对应的配置都已经更新到服务端。
    • Configuring:表示 ALBInstance 处于调谐中。
    • Deleting:表示 ALBInstance 处于删除中。
    instanceIDString表示关联的 ALB 实例 ID。
    ingress*v1.LoadBalancerIngress表示 ALB 的 IP 地址、监听器端口和协议。

创建 ALB Ingress

基于域名转发

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 # 需要对接服务的端口号

配置未指定 host 规则

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