开发者社区 > 飞天洛神云网络 > 负载均衡 > 正文

在自建的k8s上用ALB ingress控制器时支持配置根据header、Cookie的转发规则吗?

请问在自建的k8s上面使用ALB ingress控制器时支持配置根据header头、Cookie的转发规则吗?在这个 https://github.com/alibaba/alibaba-load-balancer-controller/blob/main/docs/zh/usage.md 文档里面没有看到案例。

展开
收起
三分钟热度的鱼 2023-05-22 16:18:08 248 0
5 条回答
写回答
取消 提交回答
  • 是的,ALB Ingress Controller 支持根据 Header 头和 Cookie 的转发规则。您可以在 Ingress 中使用 annotations 来配置转发规则。下面是一些示例:

    1. 根据 Header 头进行转发:

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
       name: my-ingress
       annotations:
         nginx.ingress.kubernetes.io/server-snippet: |
           map $http_my_header $my_service {
             default my-default-service;
             value1 my-service-1;
             value2 my-service-2;
           }
           server {
             location / {
               proxy_pass http://$my_service;
             }
           }
      spec:
       rules:
       - host: example.com
         http:
           paths:
           - path: /
             pathType: Prefix
             backend:
               service:
                 name: my-default-service
                 port:
                   name: http
      

      在上面的示例中,根据 Header 头 my_header 的值来选择不同的后端服务。

    2. 根据 Cookie 进行转发:

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
       name: my-ingress
       annotations:
         nginx.ingress.kubernetes.io/server-snippet: |
           map $http_cookie $my_service {
             default my-default-service;
             value1 my-service-1;
             value2 my-service-2;
           }
           server {
             location / {
               proxy_pass http://$my_service;
             }
           }
      spec:
       rules:
       - host: example.com
         http:
           paths:
           - path: /
             pathType: Prefix
             backend:
               service:
                 name: my-default-service
                 port:
                   name: http
      

      在上面的示例中,根据 Cookie 的值来选择不同的后端服务。

    需要注意的是,ALB Ingress Controller 使用的是 Nginx 作为反向代理,因此您需要使用 Nginx 的语法来配置转发规则。另外,ALB Ingress Controller 目前还处于 Beta 版本,一些功能可能还不够完善,建议在生产环境中进行充分测试。

    2023-05-22 23:58:16
    赞同 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    您好,阿里云负载均衡ALB在Kubernetes上使用Ingress控制器时,支持使用Annotations来配置根据header头、Cookie等信息进行转发的规则。

    具体使用方法请参考以下操作步骤:

    1. 安装阿里云负载均衡ALB Ingress Controller 请参考该文档:https://github.com/alibaba/alb-ingress-controller/blob/master/docs/user_manual_CN.md

    2. 在Ingress规则的Annotations中,配置转发规则 在Ingress规则的Annotations中可以使用alb.ingress.kubernetes.io/target-group-attributes和alb.ingress.kubernetes.io/match-headers等Annotation来设置根据header头、Cookie等信息进行转发的规则,请参考以下示例:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: web
      annotations:
        alb.ingress.kubernetes.io/target-group-attributes: stickiness.enabled=true,stickiness.type=cookies,stickiness.lb_cookie.duration_seconds=60,stickiness.lb_cookie.name=test-cookie
        alb.ingress.kubernetes.io/match-headers: '"test-header"="test-value"'
    spec:
      rules:
      - host: example.com
        http:
          paths:
          - path: /web
            backend:
              serviceName: web
              servicePort: 80
    

    上述示例中,使用了以下Annotations进行了转发规则的配置:

    • alb.ingress.kubernetes.io/target-group-attributes: 设置负载均衡的sticky session功能,使用Cookie进行转发,并设置Cookie的名称和过期时间等参数;
    • alb.ingress.kubernetes.io/match-headers: 设置转发规则匹配的header头。在上述示例中,规则只会匹配header头中test-header字段值等于test-value的请求。

    在 ingress.kubernetes.io/annotations 和 alb.ingress.kubernetes.io/annotations中都可以使用Annotations设置转发规则,但是由于阿里云ALB使用的是alb.ingress.kubernetes.io/annotations,因此建议使用该方式进行配置。

    希望能对您有所帮助。

    2023-05-22 23:37:30
    赞同 展开评论 打赏
  • 开源版本控制器还没有完全支持这些能力,可以先看下canary能否满足需求。此回答整理自钉群“ALB客户交流群”

    2023-05-22 16:48:55
    赞同 展开评论 打赏
  • CSDN全栈领域优质创作者,万粉博主;InfoQ签约博主;华为云享专家;华为Iot专家;亚马逊人工智能自动驾驶(大众组)吉尼斯世界纪录获得者

    是的,阿里云负载均衡(ALB)Ingress控制器可以支持根据header、Cookie等转发规则进行配置。

    在使用ALB Ingress控制器时,您可以通过定义Ingress规则来实现根据header、Cookie等转发规则进行转发。具体来说,您需要在Ingress规则中指定目标服务的域名和路径,并使用HTTP请求头或Cookie字段作为转发条件。例如,以下是一个基于header的转发规则示例:

    
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: my-ingress
    spec:
      rules:
        - host: example.com
          http:
            paths:
              - path: /myapp
                pathType: Prefix
                backend:
                  service:
                    name: myservice
                    port:
                      name: http
              - path: /myapp/login
                pathType: Prefix
                backend:
                  service:
                    name: myservice
                    port:
                      name: login
                # 使用header字段作为转发条件
                headerFields:
                  - requestHeaders:
                    - key: X-User-Id
                        valueArray: "101,202"
                    - key: X-Auth-Token
                        valueArray: "abc123,xyz456"
                  - responseHeaders:
                    - key: Content-Type
                        value: "application/json"
                    # 使用Cookie字段作为转发条件
                    # cookieKeyName: "XSRF-TOKEN"
                    # cookieValuePath: "/"
    
    

    在上面的示例中,我们定义了两个不同的路由规则,分别使用了HTTP请求头和Cookie字段作为转发条件。其中,requestHeaders字段表示请求头中的字段,responseHeaders字段表示响应头中的字段;而cookieKeyNamecookieValuePath则表示Cookie字段的名称和值的路径。通过这种方式,我们可以根据不同的header、Cookie等转发条件将流量转发到不同的目标服务上。

    2023-05-22 16:39:23
    赞同 展开评论 打赏
  • ALB Ingress 控制器默认是支持根据 HTTP 请求的头信息和 Cookie 进行转发的,可以通过 Annotation 的方式进行配置。

    具体来说,你可以在 Ingress 中针对不同的转发规则,使用 HTTP Header 或 Cookie 进行匹配,并将请求按照一定的规则进行转发。

    以下是一些示例:

    1. 根据 request header 字段进行转发

    假如使用 header.user-agent 字段进行转发,则需在 Ingress 中加入如下配置:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-ingress
      annotations:
        nginx.ingress.kubernetes.io/service-upstream: "true"
        nginx.ingress.kubernetes.io/rewrite-target: '/'
        alibabacloud.com/alb-priority: "10"
        alibabacloud.com/alb-header-match: "header.user-agent==firefox"
    spec:
      rules:
      - host: fanqiang-alpha.com
        http:
          paths:
          - path: /hello
            pathType: Exact
            backend:
              service:
                name: hello-svc
                port:
                  name: http
    

    此配置表示,对于请求的 header.user-agent 字段为 "firefox" 的请求,将请求转发至 hello-svc:http 前端。

    1. 根据 Cookie 进行转发

    假如使用 cookie.lang 字段进行转发,则需在 Ingress 中加入如下配置:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-ingress
      annotations:
        nginx.ingress.kubernetes.io/service-upstream: "true"
        nginx.ingress.kubernetes.io/rewrite-target: '/'
        alibabacloud.com/alb-priority: "10"
        alibabacloud.com/alb-cookie-match: "cookie.lang==en"
    spec:
      rules:
      - host: fanqiang-alpha.com
        http:
          paths:
          - path: /hello
            pathType: Exact
            backend:
              service:
                name: hello-svc
                port:
                  name: http
    

    此配置表示,对于请求的 cookie.lang 字段为 "en" 的请求,将请求转发至 hello-svc:http 前端。

    总之,你可以通过使用 alibabacloud.com/alb-header-matchalibabacloud.com/alb-cookie-match Annotations 来为 Ingress 配置过滤规则。

    2023-05-22 16:39:23
    赞同 展开评论 打赏

阿里云负载均衡(Server Load Balancer,简称SLB)是云原生时代应用高可用的基本要素。通过将流量分发到不同的后端服务来扩展应用系统的服务吞吐能力,消除单点故障并提升应用系统的可用性。 阿里云SLB包含面向4层的网络型负载均衡NLB、面向7层的应用型负载均衡ALB和传统型负载均衡CLB,是阿里云官方云原生网关。

相关产品

  • 负载均衡
  • 相关电子书

    更多
    ACK 云原生弹性方案—云原生时代的加速器 立即下载
    ACK集群类型选择最佳实践 立即下载
    企业运维之云原生和Kubernetes 实战 立即下载

    相关镜像