通过ALB Ingress实现混合挂载、跨地域挂载和本地IDC挂载

ALB Ingress支持使用alb.ingress.kubernetes.io/actions.<服务名称>注解配置后端转发服务器组。后端转发服务器组支持通过服务名称或服务器组ID挂载,实现K8s集群内Pod和集群外ECS实例混合挂载。通过ALB和云企业网CEN(Cloud Enterprise Network)转发路由器等产品的组合配置,可以使ALB将请求转发至其他地域VPC内的服务器,实现跨地域挂载。或使ALB将请求转发到本地IDC服务器,实现本地IDC挂载。本文介绍如何通过ALB Ingress实现混合挂载、跨地域挂载和本地IDC挂载。

索引

注意事项

  • alb.ingress.kubernetes.io/actions.<服务名称>注解中的服务名称必须和rule字段backend服务名称保持一致。

  • 配置后端转发服务器组时,rule字段backend下的服务端口名称需要为use-annotation

  • 使用alb.ingress.kubernetes.io/actions.<服务名称>注解支持将多个服务器组挂载在ALB实例上。

  • 基础版ALB实例最多挂载5个服务器组。

  • 同时通过ServerGroupIDServiceName+ServicePort挂载服务器组时,优先根据ServerGroupID匹配后端服务器组。

场景一:请求转发至ACK或ACK Serverless集群内多个Service

前提条件

场景示例

如下图所示,ALB Ingress多服务器组转发动作,支持通过配置ServiceName+ServicePort创建或挂载多个后端服务器组,将请求转发至集群内多个Service。

场景一

操作步骤

  1. 配置ALB Ingress。

    部署以下内容到tea-ingress.yaml文件中。在定义请求服务时,将请求转发至集群内多个Service。

    # 将请求根据主机名和路径转发到不同的后端服务组,并按照权重进行流量分配。
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: tea-ingress
      annotations:
        alb.ingress.kubernetes.io/actions.forward: |
           [{
               "type": "ForwardGroup",
               "ForwardConfig": {
                 "ServerGroups" : [{
                   "ServiceName": "tea-svc",
                   "Weight": 80,
                   "ServicePort": 80
                 },
                 {
                   "ServiceName": "coffee-svc",
                   "Weight": 20,
                   "ServicePort": 80
                 }]
               }
           }]
    spec:
      ingressClassName: alb
      rules:
       - host: demo.domain.ingress.top
         http:
          paths:
          - path: /path
            pathType: Prefix
            backend:
              service:
                name: forward
                port:
                  name: use-annotation
  2. 通过命令行方式访问服务。具体操作,请参见访问服务

场景二:请求同时转发至ACK或ACK Serverless集群内Pod及集群外ECS

前提条件

场景示例

如下图所示,ALB Ingress多服务器组转发动作支持您在ALB控制台或OpenAPI创建服务器组,将当前VPC网络中的ECS实例挂载在服务器组,通过获取服务器组ID并在Ingress上配置,将请求同时转发至集群内Pod和集群外ECS,实现ECS实例和K8s集群混合挂载。

image.png

操作步骤

  1. 配置ALB Ingress。

    部署以下内容到tea-ingress.yaml文件中。在定义请求服务时,同时将请求转发至集群内Pod和集群外ECS。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: tea-ingress
      annotations:
        alb.ingress.kubernetes.io/actions.forward: |
           [{
               "type": "ForwardGroup",
               "ForwardConfig": {
                 "ServerGroups" : [{
                   "ServiceName": "tea-svc",
                   "Weight": 30,
                   "ServicePort": 80
                 },
                 {
                   "ServiceName": "coffee-svc",
                   "Weight": 20,
                   "ServicePort": 80
                 },
                 {
                   "ServerGroupID": "sgp-71aexb9y93ypo*****",
                   "Weight": 30
                 },
                 {
                   "ServerGroupID": "sgp-slygpbvm2cydo*****",
                   "Weight": 20
                 }]
               }
           }]
    spec:
      ingressClassName: alb
      rules:
       - host: demo.domain.ingress.top
         http:
          paths:
          - path: /path
            pathType: Prefix
            backend:
              service:
                name: forward
                port:
                  name: use-annotation
  2. 通过命令行方式访问服务。具体操作,请参见访问服务

场景三:请求转发至集群内Pod以及集群外跨地域VPC上的ECS

前提条件

场景示例

如下图所示,ALB Ingress多服务器组转发动作支持您在ALB控制台或OpenAPI创建服务器组,通过云企业网CEN创建跨地域VPC连接,将跨地域VPC网络中的ECS实例挂载在服务器组。获取服务器组ID并在Ingress上配置,将请求同时转发至集群内Pod和集群外跨地域VPC上的ECS实例,实现跨地域挂载服务器。

场景三

例如,ACK或ACK Serverless集群已在阿里云西南1(成都)地域VPC1专有网络中,通过ALB Config在该专有网络中创建ALB实例。用户通过ALB、CEN等产品组合配置,将访问请求转发至跨地域(阿里云华东1(杭州)地域)线下VPC2内的ECS实例上。

异地挂载

操作步骤

  1. 配置云企业网CEN,创建跨地域VPC连接。

    具体操作,请参见使用ALB挂载跨地域VPC内的服务器

    说明

    ALB Ingress用户无需在ALB控制台为ALB实例配置监听,在步骤3通过ALB Ingress配置监听。

  2. 将跨地域VPC内云服务器ECS添加到ALB服务器组中。

    具体操作,请参见添加后端服务器

  3. 通过alb.ingress.kubernetes.io/actions.<服务名称>注解配置转发动作,挂载已创建好的指定服务器组。定义请求服务时,将请求转发至集群内Pod及集群外跨地域VPC的ECS服务器。

    部署以下内容到tea-ingress.yaml文件中。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: tea-ingress
      annotations:
        alb.ingress.kubernetes.io/actions.forward: |
           [{
               "type": "ForwardGroup",
               "ForwardConfig": {
                 "ServerGroups" :  [{
                   "ServiceName": "tea-svc",
                   "Weight": 30,
                   "ServicePort": 80
                 },
                 {
                   "ServiceName": "coffee-svc",
                   "Weight": 20,
                   "ServicePort": 80
                 },
                 {
                   "ServerGroupID": "sgp-71aexb9y93ypo*****",
                   "Weight": 30
                 },
                 {
                   "ServerGroupID": "sgp-slygpbvm2cydo*****",
                   "Weight": 20
                 }]
               }
           }]
    spec:
      ingressClassName: alb
      rules:
       - host: demo.domain.ingress.top
         http:
          paths:
          - path: /path
            pathType: Prefix
            backend:
              service:
                name: forward
                port:
                  name: use-annotation

场景四:请求转发至集群内Pod及本地IDC服务器

前提条件

注意事项

使用ALB挂载IDC服务器的注意事项,请参见注意事项

场景示例

如下图所示,ALB Ingress多服务器组转发动作支持您在ALB控制台或OpenAPI创建服务器组,通过云企业网CEN物理专线和边界路由器VBR,将本地IDC服务器挂载在服务器组中。获取服务器组ID并在Ingress上配置,将请求同时转发至集群内Pod和线下IDC服务器,实现线下挂载服务器。

场景四

例如,ACK或ACK Serverless集群在阿里云西南1(成都)地域VPC1专有网络中,通过ALB Config在该专有网络中创建ALB实例。您可通过ALB、CEN、VBR物理专线等产品组合配置,将访问请求转发至该地域的IDC服务器中。如下图所示。

挂载本地IDC

操作步骤

  1. 配置云企业网CEN,将ALB实例所在VPC1和VBR连接至转发路由器,本地IDC通过VBR接入阿里云网络。具体操作,请参见使用ALB挂载IDC服务器

    说明

    ALB Ingress用户不需要在ALB控制台为ALB实例配置监听,在步骤2通过ALB Ingress配置监听。

  2. 通过alb.ingress.kubernetes.io/actions.<服务名称>注解配置转发动作,挂载已创建好的指定服务器组。定义请求服务时,将请求转发至集群内Pod及集群外线下IDC服务器。

    部署以下内容到tea-ingress.yaml文件中。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: tea-ingress
      annotations:
        alb.ingress.kubernetes.io/actions.forward: |
           [{
               "type": "ForwardGroup",
               "ForwardConfig": {
                 "ServerGroups" :  [{
                   "ServiceName": "tea-svc",
                   "Weight": 30,
                   "ServicePort": 80
                 },
                 {
                   "ServiceName": "coffee-svc",
                   "Weight": 20,
                   "ServicePort": 80
                 },
                 {
                   "ServerGroupID": "sgp-ihydxb9y93ypo*****",
                   "Weight": 30
                 },
                 {
                   "ServerGroupID": "sgp-pd0ipbvm2cydo*****",
                   "Weight": 20
                 }]
               }
           }]
    spec:
      ingressClassName: alb
      rules:
       - host: demo.domain.ingress.top
         http:
          paths:
          - path: /path
            pathType: Prefix
            backend:
              service:
                name: forward
                port:
                  name: use-annotation