在Knative中使用ALB网关实现流量分发

在大规模Web应用、需要精细化流量分发、需要自动弹性伸缩等对HTTP/HTTPS请求有复杂路由需求的应用中,推荐您基于ALB网关实现Knative服务的流量分发和路由。ALB是专门面向HTTP、HTTPS和QUIC等应用层负载场景的负载均衡服务,具备超强弹性及大规模七层流量处理能力。ALB网关是一款全托管免运维的网关,提供自动弹性能力,支持多种服务灰度策略。

前提条件

步骤一:部署ALB网关

在Knative中部署ALB网关时,您可以使用Knative自动创建的ALB实例,也可以指定您已有的ALB实例。

部署ALB网关时自动创建ALB

您可以在部署Knative的过程中配置ALB网关。如果您已经部署了Knative,也可以通过修改Knative配置文件来配置ALB网关。

部署Knative时配置ALB网关

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Knative

  3. 组件管理页签,单击一键部署Knative。在部署Knative页面,选择ALB服务网关并选择至少两个虚拟交换机,然后按照页面指引完成Knative的部署。

    关于创建虚拟交换机的具体操作,请参见创建交换机

修改Knative配置文件部署ALB网关

对于已部署的Knative,您可以通过修改Knative配置文件来配置ALB网关。关于如何部署Knative,请参见在ACK集群中部署Knative在ACK Serverless集群中部署Knative

  1. 执行以下命令,编辑config-network.yaml文件。

    kubectl -n knative-serving edit configmap config-network
  2. 参照以下格式修改并保存config-network.yaml文件

    修改ingress.class: alb.ingress.networking.knative.dev并设置vswitch-ids后,保存并退出config-network文件即可配置ALB网关。关于ALB支持的地域和可用区,请参见ALB支持的地域与可用区

    apiVersion: v1
    data:
      ...
      ingress.class: alb.ingress.networking.knative.dev # 表示使用ALB作为Ingress控制器。
      vswitch-ids: vsw-uf6kbvc7mccqia2pi****,vsw-uf66scyuw2fncpn38**** # 此处的参数请替换为您已创建的两个不同可用区交换机ID,系统在创建ALB时自动绑定VSwitch。
      ...
    kind: ConfigMap
    metadata:
      name: config-network
      namespace: knative-serving
      ...

使用已有ALB部署ALB网关

您可以通过修改Knative配置文件来使用已有的ALB实例配置ALB网关。

  1. 执行以下命令,编辑config-network.yaml文件。

    kubectl -n knative-serving edit configmap config-network
  2. 参照以下格式修改并保存config-network.yaml文件。

    在配置文件中修改ingress.class: alb.ingress.networking.knative.dev并设置albconfig为已有ALB。此时不需要配置vswitch-ids

    apiVersion: v1
    data:
      ...
      ingress.class: alb.ingress.networking.knative.dev # 表示使用ALB作为Ingress控制器。
      albconfig: alb-dev-albconfig # 用于指定已存在的ALB配置名称,若无需新建ALB而是使用现有ALB,则需填写此项。
      ...
    kind: ConfigMap
    metadata:
      name: config-network
      namespace: knative-serving
      ...

步骤二:通过ALB网关访问部署的服务

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Knative

  3. Knative页面的服务管理页签,选择命名空间default,单击使用模板创建,将以下YAML示例粘贴至模板,然后单击创建

    下面示例YAML创建了一个名为helloworld-go的Knative服务。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-go
    spec:
      template:
        spec:
          containers:
          - image: registry-vpc.cn-beijing.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
            env:
            - name: TARGET
              value: "Knative"
  4. 服务管理页面的默认域名访问网关列,分别获取helloworld-go服务的域名和网关地址。

  5. 执行以下命令,访问helloworld-go服务。

    curl -H "host: helloworld-go.default.example.com" http://alb-******.cn-beijing.alb.aliyuncs.com	 # 替换为实际的网关IP和域名。

    预期输出:

    Hello Knative!

(可选)步骤三:查看服务监控数据

Knative提供开箱即用的可观测能力,在Knative页面,单击监控大盘页签,即可查看目标Knative服务的监控数据情况。如何开启Knative监控大盘,请参见查看Knative服务监控大盘

相关文档