从SLB Ingress迁移到ALB Ingress

自2023年02月28日起,容器服务ACK Serverless将下线SLB Ingress,您将无法通过集群安装和管理SLB Ingress Controller组件,并不再提供SLB Ingress技术支持。建议您尽快将SLB Ingress迁移到ALB Ingress。本文介绍如何从SLB Ingress迁移到ALB Ingress。

背景信息

由于SLB对7层支持能力较弱,例如,不支持HTTP标头改写、重定向、重写、限速等,并且需要您自行运维实例规格,导致SLB Ingress使用受到了很多限制。因此我们推出了专门面向7层的ALB Ingress网关,该网关提供更为强大的Ingress流量管理方式。

ALB Ingress基于阿里云应用型负载均衡ALB(Application Load Balancer)。相比于SLB Ingress,ALB Ingress具备处理复杂业务路由(支持Header、Cookie)和证书自动发现的能力,支持HTTP、HTTPS和QUIC协议,更好地满足在云原生应用场景下七层流量处理能力的需求。关于ALB与SLB功能对比,请参见负载均衡SLB产品家族介绍

迁移流程

image

迁移示例

本文使用以下Ingress,并将Ingress的端点解析到域名demo.ingress.vip,以此为例进行迁移介绍。

展开查看详细YAML

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-ingress
  namespace: default
spec:
  ingressClassName: slb
  rules:
    - host: demo.ingress.vip
      http:
        paths:
          - backend:
              service:
                name: nginx
                port:
                  number: 80
            path: /
            pathType: Prefix

在浏览器地址栏中输入demo.ingress.vip,浏览器显示Welcome to nginx!

步骤一:创建ALB Ingress

  1. 安装ALB Ingress Controller组件。具体操作,请参见管理ALB Ingress Controller组件

  2. 获取集群KubeConfig并通过kubectl工具连接集群

  3. 创建ALBConfig。

    1. 使用以下内容,创建albconfig.yaml

      apiVersion: alibabacloud.com/v1
      kind: AlbConfig
      metadata:
        name: alb-demo
      spec:
        config:
          name: alb-test
          addressType: Internet
          zoneMappings:
          - vSwitchId: vsw-wz9e2usil7e5an1xi****
          - vSwitchId: vsw-wz92lvykqj1siwvif****
        listeners:
          - port: 80
            protocol: HTTP

      zoneMappings:设置ALB Ingress交换机ID,您需要至少指定两个不同可用区交换机ID,且交换机必须与集群属于同一VPC。

    2. 执行以下命令,创建ALBConfig。

      kubectl apply -f albconfig.yaml
    3. 执行以下命令,查看ALB实例是否创建成功。

      kubectl get albconfig <albconfig的名称>

      预期输出:

      NAME       ALBID                    DNSNAME                                               PORT&PROTOCOL   CERTID   AGE
      alb-demo   alb-eeee6gtqbmrm19****   alb-eeee6gtqbmrm19****.cn-shenzhen.alb.aliyuncs.com                            27s
  4. 创建IngressClass。

    1. 使用以下内容,创建ingressclass.yaml

      apiVersion: networking.k8s.io/v1
      kind: IngressClass
      metadata:
        name: alb
      spec:
        controller: ingress.k8s.alibabacloud/alb
        parameters:
          apiGroup: alibabacloud.com
          kind: AlbConfig
          name: alb-demo

      parameters.name:ALBConfig名称,用于绑定ALBConfig。

    2. 执行以下命令,创建IngressClass。

      kubectl apply -f ingressclass.yaml
  5. 创建ALB Ingress。

    1. 使用以下内容,创建albingress.yaml

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: demo-ingress-alb
        namespace: default
      spec:
        ingressClassName: alb
        rules:
          - host: demo.ingress.vip
            http:
              paths:
                - backend:
                    service:
                      name: nginx
                      port:
                        number: 80
                  path: /
                  pathType: Prefix
      • name:Ingress名称,与SLB Ingress的名称不能相同。

      • ingressClassName:IngressClass的名称。

    2. 执行以下命令,创建ALB Ingress。

      kubectl apply -f albingress.yaml
    3. 执行以下命令,获取ALB Ingress的端点。

      kubectl get ing

      预期输出:

      NAME                CLASS   HOSTS              ADDRESS                                               PORTS   AGE
      demo-ingress       slb     demo.ingress.vip   120.79.**.**                                           80      35m
      demo-ingress-alb   alb     demo.ingress.vip   alb-eeee6gtqbmrm1****.cn-shenzhen.alb.aliyuncs.com   80      10m     46s

      从返回结果中获取ALB Ingress的端点,例如本文为alb-eeee6gtqbmrm1****.cn-shenzhen.alb.aliyuncs.com 。

    4. 执行以下命令,使用ALB Ingress访问Nginx。

      curl -H "Host: demo.ingress.vip" http://alb-eeee6gtqbmrm1****.cn-shenzhen.alb.aliyuncs.com

      预期输出:

      <!DOCTYPE html>
      <html>
      <head>
      <title>Welcome to nginx!</title>
      <style>
          body {
              width: 35em;
              margin: 0 auto;
              font-family: Tahoma, Verdana, Arial, sans-serif;
          }
      </style>
      .............

步骤二:切流到ALB Ingress

将demo.ingress.vip绑定的SLB端点修改为ALB的端点,实现使用ALB Ingress访问Nginx服务。

  1. 登录云解析控制台

  2. 域名解析页面,全部域名页签下,单击域名名称。

  3. 解析设置页面,单击目标解析记录操作列下的修改

  4. 修改记录对话框将记录值修改为ALB Ingress的端点(本文为alb-eeee6gtqbmrm1****.cn-shenzhen.alb.aliyuncs.com),然后单击确定

  5. 在浏览器地址栏中输入demo.ingress.vip

    nginx

    浏览器显示Welcome to nginx!,说明使用ALB Ingress访问Nginx服务成功,从SLB Ingress切流到ALB Ingress成功。

步骤三:删除SLB Ingress

  1. 删除SLB Ingress。

    1. 在集群管理页左侧导航栏,选择网络 > 路由

    2. 路由页面上方,选择命名空间,在SLB Ingress右侧操作列,选择更多 > 删除

    3. 在弹出的对话框,单击确定

  2. 卸载SLB Ingress Controller。

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

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

    3. 组件管理页面,单击其他页签,在SLB Ingress Controller卡片,单击卸载

    4. 在弹出的对话框,单击确定

FAQ

SLB Ingress是否支持平滑迁移到ALB Ingress?

由于ALB与SLB属于不同的负载均衡网关,不支持平滑迁移。