日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過控制臺或Annotations自定義ALB Ingress的轉發規則

ALB Ingress支持自定義轉發規則。轉發規則包含轉發條件和轉發動作。您可以自定義轉發條件,指定請求的域名、路徑、請求頭、查詢字符串、請求方法、Cookie、源IP等。您也可以自定義轉發動作,配置固定響應、重定向、插入請求頭、刪除請求頭、流量鏡像、轉發至后端多服務器組和重寫。您可通過控制臺或在Ingress資源中配置Annotations字段配置自定義轉發規則。

場景索引

自定義規則

適用場景

轉發條件

轉發動作

轉發條件與動作實踐

場景一:基于域名的轉發條件和動作,轉發至指定的服務

前提條件

已安裝ALB Ingress Controller組件,且組件為v2.5.0及以上版本。具體操作,請參見管理組件

轉發條件

重要
  • 轉發規則的條件條目上限為10個,一旦達到規定數量上限,您將無法再添加更多的條件。

  • 轉發條件ResponseHeader和ResponseStatusCode僅在自定義響應方向轉發規則中有效。

轉發條件介紹

ALB Ingress支持在alb.ingress.kubernetes.io/conditions.<Service的名稱>注解中配置轉發條件。不同的路由規則塊之間是與的關系,同一個路由規則塊中的值是或的關系,例如,如果是兩個不同的Header規則塊,那么這兩個規則塊是與的關系,但是同一個Header規則塊中設置的值是或的關系。詳細的路由規則說明如下。

轉發條件

描述

域名

匹配請求域名,只有正確的域名的請求才能訪問服務。示例如下。

alb.ingress.kubernetes.io/conditions.host-example: |
  [{
      "type": "Host",
      "hostConfig": {
        "values": [
          "anno.example.com"
        ]
      }
  }]
  • type:匹配類型。設置為Host,表示匹配域名。

  • HostConfig:匹配的具體域名。如果設置了多個域名,則域名之間是或的關系。

路徑

匹配請求路徑,只有正確的路徑的請求才能訪問服務。示例如下。

alb.ingress.kubernetes.io/conditions.path-example: |
  [{
    "type": "Path",
    "pathConfig": {
      "values": [
        "/pathvalue1",
        "/pathvalue2"
      ]
    }
  }]
  • type:匹配類型。設置為Path,表示匹配請求路徑。

  • pathConfig:匹配的具體路徑。如果設置了多個路徑,則路徑之間是或的關系。

Header

匹配請求Header,只有正確的Header的請求才能訪問服務。示例如下。

alb.ingress.kubernetes.io/conditions.http-header-example: |
  [{
    "type": "Header",
    "headerConfig": {
      "key": "headername",
      "values": [
        "headervalue1",
        "headervalue2"
      ]
     }
  }]
  • type:匹配類型。設置為Header,表示匹配請求頭中的Header。

  • headerConfig:Header的鍵值對。如果設置了多個Header值,則Header之間是或的關系。

查詢字符串

匹配查詢字符串, 只有包含正確的查詢字符串的請求才能訪問服務。示例如下。

alb.ingress.kubernetes.io/conditions.query-string-example: |
  [{
    "type": "QueryString",
    "queryStringConfig": {
      "values": [
        {
           "key":"querystringkey1",
           "value":"querystringvalue2"
        }
      ]
    }
  }]
  • type:匹配類型。設置為QueryString,表示匹配請求的查詢字符串。

  • queryStringConfig:查詢字符串的鍵值對。鍵字符長度取值為[1,100],值字符長度取值為[1,100],支持小寫字母、可見字符和通配符星號(*)和英文半角問號(?),不支持空格和#[]{}\|<>&。如果設置了多個查詢字符串,則查詢字符串之間是或的關系。

請求方法

匹配請求方法,只有正確的請求方法的請求才能訪問服務。示例如下。

alb.ingress.kubernetes.io/conditions.http-method-example: |
  [{
    "type": "Method",
    "methodConfig": {
      "values": [
        "GET",
        "HEAD"
      ]
    }
  }]
  • type:匹配類型。設置為Method,表示匹配請求方法。

  • methodConfig:具體的請求方法,支持GET、POST、PUT、DELETE、HEAD、OPTIONS和PATCH。如果設置了多個請求方法,則請求方法之間是或的關系。

Cookie

匹配Cookie,只有包含正確的Cookie的請求才能訪問服務。示例如下。

alb.ingress.kubernetes.io/conditions.http-cookie-example: |
  [{
    "type": "Cookie",
    "cookieConfig": {
      "values": [
        {
           "key":"cookiekey1",
           "value":"cookievalue2"
        }
      ]
     }
  }]
  • type:匹配類型。設置為Cookie,表示匹配Cookie。

  • cookieConfig:Cookie的鍵值對。鍵字符長度取值為[1,100],值字符長度取值為[1,100],支持小寫字母、可見字符和通配符星號(*)和英文半角問號(?),不支持空格和#[]{}\|<>&。如果設置了多個Cookie,則Cookie之間是或的關系。

SourceIP

匹配請求源IP,只有正確的源IP的請求才能訪問服務。示例如下。

alb.ingress.kubernetes.io/conditions.source-ip-example: |
  [{
    "type": "SourceIp",
    "sourceIpConfig": {
      "values": [
        "192.168.0.0/16",
        "172.16.0.0/16"
      ]
    }
  }]
  • type:匹配類型。設置為SourceIP,表示匹配請求的源IP。

  • sourceIpConfig:請求的IP地址。如果設置了多個請求IP,則請求IP之間是或的關系。

ResponseHeader

匹配響應Header,只對攜帶正確的Header的響應執行轉發動作。示例如下。

alb.ingress.kubernetes.io/conditions.response-header-example: |
  [{
    "type": "ResponseHeader",
    "headerConfig": {
      "key": "headername",
      "values": [
        "headervalue1",
        "headervalue2"
      ]
     }
  }]
  • type:匹配類型。設置為ResponseHeader,表示匹配響應頭中的Header。

  • headerConfig:Header的鍵值對。如果設置了多個Header值,則Header之間是或的關系。

ResponseStatusCode

匹配響應狀態碼,只有返回正確的狀態碼才能訪問服務。示例如下。

alb.ingress.kubernetes.io/conditions.response-code-example: |
  [{
    "type": "ResponseStatusCode",
    "responseStatusCodeConfig": {
      "values": [
        "statuscode1",
        "statuscode2"
      ]
    }
  }]
  • type:匹配類型。設置為ResponseStatusCode,表示匹配響應狀態碼。

  • responseStatusCodeConfig:具體的響應狀態碼。如果設置了多個響應狀態碼,則響應狀態碼之間是或的關系。

場景一:基于SourceIP和Header實現流量分發

重要

同一條轉發規則的自定義條件設置的SourceIp數量限制為5個。

以下代碼塊定義了當請求的IP、Header和路徑符合配置時,才能實現目標流量分發。

即當請求源IP為192.168.0.0/16或172.16.0.0/16中的IP地址,請求Header中包含gray-hello,值必須為value1value2,請求路徑為/hello,請求才能路由到gray-hello服務,否則將路由到其他服務。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/order: "1"
   alb.ingress.kubernetes.io/conditions.gray-hello: |
     [{
       "type": "Header",
       "headerConfig": {
          "key":"gray-hello",
           "values": [
              "value1",
              "value2"
           ]
       }
      },
      {
         "type": "SourceIp",
         "sourceIpConfig": {
           "values": [
             "192.168.0.0/16",
             "172.16.0.0/16"
           ]
         }
     }]
  name: gray-hello
spec:
  ingressClassName: alb
  rules:
   - http:
      paths:
      - path: /hello
        pathType: ImplementationSpecific
        backend:
          service:
            name: gray-hello
            port:
              number: 88

alb.ingress.kubernetes.io/order:標識Ingress的優先級,數字越小,優先級越高。

場景二:基于域名、請求方法、Cookie實現流量分發

以下代碼塊定義了只有當請求的域名、請求方法和Cookie符合配置時,才能實現目標流量分發。

即當請求方法為GETHEAD,請求域名為example.com*.edu,請求Cookie的鍵為cookiekey1,值為cookievalue1,請求路徑為/test時,請求才能路由到service-a服務,否則將路由到service-b服務。

說明

基于域名的轉發規則支持泛域名匹配。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/conditions.service-a: |
     [{
       "type": "Cookie",
       "cookieConfig": {
         "values": [
           {
             "key":"cookiekey1",
             "value":"cookievalue1"
           }
        ]
       }
      },
      {
       "type": "Method",
       "methodConfig": {
         "values": [
           "GET",
           "HEAD"
         ]
       }
      },
     {
       "type": "Host",
       "hostConfig": {
           "values": [
              "example.com",
              "*.edu" 
           ]
       }
      }]
  name: ingress-example
spec:
  ingressClassName: alb
  rules:
   - http:
      paths:
      - path: /test
        pathType: ImplementationSpecific
        backend:
          service:
            name: service-a
            port:
              number: 88
      - path: /test
        pathType: ImplementationSpecific
        backend:
          service:
            name: service-b
            port:
              number: 88

場景三:基于查詢字符串、多個Header、多個路徑實現流量分發

以下代碼塊定義了只有當請求的查詢字符串、Header、路徑符合配置時,才能實現目標流量分發。

即當請求路徑是/pathvalue1/pathvalue2/test,查詢字符串的鍵為querystringkey1,值為querystringvalue2,請求Header中必須包含headerkey1headerkey2,請求Header中包含headerkey1,值必須為headervalue1headervalue2,請求Header包含headerkey2,值必須為headervalue3headervalue4,才能路由到service-a服務,否則將路由到service-b服務。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/conditions.service-a: |
     [{
       "type": "Path",
       "pathConfig": {
           "values": [
              "/pathvalue1",
              "/pathvalue2"
           ]
       }
      },
      {
       "type": "QueryString",
       "queryStringConfig": {
         "values": [
           {
             "key":"querystringkey1",
             "value":"querystringvalue2"
           }
        ]
       }
      },
     {
       "type": "Header",
       "headerConfig": {
          "key":"headerkey1",
           "values": [
              "headervalue1",
              "headervalue2"
           ]
       }
     },
     {
       "type": "Header",
       "headerConfig": {
          "key":"headerkey2",
           "values": [
              "headervalue3",
              "headervalue4"
           ]
       }
     }]
  name: ingress-example
spec:
  ingressClassName: alb
  rules:
   - http:
      paths:
      - path: /test
        pathType: ImplementationSpecific
        backend:
          service:
            name: service-a
            port:
              number: 88
      - path: /test
        pathType: ImplementationSpecific
        backend:
          service:
            name: service-b
            port:
              number: 88

轉發動作

轉發動作介紹

ALB Ingress支持使用alb.ingress.kubernetes.io/actions.<服務名稱>注解配置請求方向和響應方向的轉發動作。支持固定響應、重定向、插入請求頭、刪除請求頭、流量鏡像、轉發至后端多服務器組和重寫。通過定義這些轉發動作,您可以在ALB Ingress中靈活地管理請求和響應的轉發規則。

重要
  • alb.ingress.kubernetes.io/actions.<服務名稱>注解中的服務名稱必須和rule字段backend下的服務名稱一致。

  • 在同一條轉發規則中,重定向、固定響應、轉發至多服務器組等終結類型的轉發動作不能同時使用。

  • 配置重定向、固定響應、轉發至多服務器組時,rule字段backend下的servicePort的名稱必須為use-annotation

請求方向的轉發動作

轉發動作

描述

固定響應

設置通過ALB給客戶端返回固定響應內容,可以設置響應狀態碼,正文內容和正文類型。示例如下。

alb.ingress.kubernetes.io/actions.response-503: |
  [{
      "type": "FixedResponse",
      "FixedResponseConfig": {
          "contentType": "text/plain",
          "httpCode": "503",
          "content": "503 error text"
      }
  }]
  • type:轉發動作類型,設置為FixedResponse,表示配置固定響應。

  • contentType:響應正文類型。

  • httpCode:響應狀態碼。

  • content:響應正文。

重定向

通過HTTP 3xx狀態碼,指導客戶端跳轉到其他地址訪問服務。示例如下。

重要

除了httpCode,重定向的其他參數不能都設置為默認值。

alb.ingress.kubernetes.io/actions.redirect: |
  [{
      "type": "Redirect",
      "RedirectConfig": {
          "host": "${host}",
          "path": "${path}",
          "port": "443",
          "protocol": "${protocol}",
          "query": "${query}",
          "httpCode": "301"
      }
  }]
  • type:轉發動作類型,設置為Redirect,表示配置重定向。

  • host:跳轉的域名

  • path:跳轉的路徑。

  • port:跳轉的端口

  • protocol:跳轉的協議

  • query:跳轉的查詢字符串。

  • httpCode:狀態碼。

流量鏡像

設置流量鏡像轉發服務器組ID,將復制請求轉發至流量鏡像服務器組。示例如下。

重要
  • 流量鏡像轉發動作只能和轉發、寫入Header、刪除Header、流量限速共存,不能和重寫、固定響應、重定向共存。

  • 流量鏡像服務器組只支持通過ServerGroupID掛載。

alb.ingress.kubernetes.io/actions.traffic-mirror: |
      [{
          "type": "TrafficMirror",
          "TrafficMirrorConfig": {
              "TargetType" : "ForwardGroupMirror",
              "MirrorGroupConfig": {
                  "ServerGroupTuples" : [{
                      "ServerGroupID": "sgp-2auud2fxj1r46*****"
                  }]
              }
           }
      }]
  • type:轉發動作類型,設置為TrafficMirror,表示配置流量鏡像功能。

  • TargetType:鏡像的目標類型,當前只支持ForwardGroupMirror類型,即鏡像請求至服務器組。

  • ServerGroupID:流量鏡像服務器組ID。

轉發至后端多服務器組

設置將ALB請求轉發至后端多個服務器組,可以通過ServerGroupID指定后端掛載的服務器組,也可以通過ServiceName+ServicePort創建或掛載服務器組。可以設置請求轉發至各后端服務器組的權重,也支持開啟服務器組間會話保持。

重要
  • 標準版ALB實例最多掛載5個服務器組。

  • 如果同時通過ServerGroupIDServiceName+ServicePort掛載服務器組,優先根據ServerGroupID匹配后端服務器組。

  • 開啟服務器組間會話保持后,ALB Ingress會將屬于同一會話的請求轉發到同一后端。

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": 20
             },
             {
               "ServerGroupID": "sgp-slygpbvm2cydo*****",
               "Weight": 30
             }]
             "ServerGroupStickySession": {
              "Enabled": true,
              "Timeout": 80
             }
           }
       }]
  • type:轉發動作類型,設置為ForwardGroup,表示配置轉發至后端多服務器組。

  • ForwardConfig:后端轉發服務器組具體參數。如果設置了多個服務器組,請求按照權重轉發至各服務器組。

  • ServerGroupID:服務器組ID。

  • ServiceName:服務的名稱。

  • ServicePort:服務的端口。

  • Weight:請求轉發至各服務器組權重。

  • Enabled:是否開啟服務器組間會話保持。

  • Timeout:服務器組間會話保持超時時間。

重寫

設置ALB支持重寫,將覆蓋請求的域名、路徑和字符串。示例如下。

重要
  • 重寫轉發動作與注解項rewrite-target沖突,不可以重復。

  • 重寫目前不可與固定響應和重定向轉發動作共用。

alb.ingress.kubernetes.io/actions.rewrite: |
       [{
           "type": "Rewrite",
           "RewriteConfig": {
               "Host": "demo.domain.ingress.top",
               "Path": "/test",
               "Query": "querystring"
           }
       }]
  • type:轉發動作類型,設置為Rewrite時,表示當前ALB支持Rewrite重寫。

  • RewriteConfig:重寫的具體參數。

  • Host:重寫匹配的具體域名。

  • Path:重寫匹配的具體路徑。

  • Query:重寫匹配的具體字符串。

更多Rewrite重寫規則,請參見支持Rewrite重寫

插入請求頭

設置頭字段名稱和頭字段內容,將覆蓋請求中已有的頭變量。示例如下。

alb.ingress.kubernetes.io/actions.insert-header: |
  [{
      "type": "InsertHeader",
      "InsertHeaderConfig": {
          "key": "key",
          "value": "value",
          "valueType": "UserDefined"
      }
  }]
  • type:轉發動作類型,設置為InsertHeader,表示配置插入請求頭。

  • key:請求頭的字段名稱。

  • value:請求頭的字段內容。

  • valueType:值類型。

刪除請求頭

刪除頭字段名稱和頭字段內容。示例如下。

alb.ingress.kubernetes.io/actions.remove-header: |
     [{
         "type": "RemoveHeader",
         "RemoveHeaderConfig": {
             "key": "key"
         }
     }]

type:轉發動作類型,設置為RemoveHeader,表示配置刪除請求頭。

key:請求頭的字段名稱。

QPS限速

設置ALB的轉發規則時,可以同時配置總體請求速率限制和基于客戶端源IP的請求速率限制。

具體配置示例如下:

重要
  • QPS限速轉發動作需要和轉發至服務器組同時使用。

  • 當X-Forwarded-For請求標頭中包含多個IP地址時,例如X-Forwarded-For: <client-ip-address>, <proxy1>, <proxy2>, …,最左邊的地址是真實客戶端IP,如果您需要使用基于客戶端源IP限速功能,您需要在監聽打開查找真實客戶端源IP開關,以便ALB從X-Forwarded-For頭字段中查找真實客戶端源IP。更多信息,請參見XForwardedForConfig

 annotations:
    alb.ingress.kubernetes.io/actions.traffic-limit: |
      [{
          "type": "TrafficLimit",
          "TrafficLimitConfig": {
              "QPS": "1000",
              "QPSPerIp": "100"
          }
      }]
  • type:指定轉發動作的類型,此處設置為TrafficLimit,表示這是一個限速配置。

  • QPS:總體請求速率限制,即每秒可以處理的請求次數,取值范圍是[1,1000000]。當請求速率超出設置的規格后,那么超出部分的新建連接請求將被拒絕,并且客戶端將收到HTTP狀態碼503。

  • QPSPerIp:表示基于每個客戶端源IP的請求速率限制,取值范圍是[1,1000000]。當同時設置了QPS(總體限速)和QPSPerIp(基于客戶端源IP的限速)時,后者的值必須小于前者。當請求速率超出了設置的規格后,那么超出部分的請求將被拒絕,并且客戶端將收到HTTP狀態碼503。

響應方向的轉發動作

轉發動作

描述

插入請求頭

設置頭字段名稱和頭字段內容,將覆蓋請求中已有的頭變量。示例如下。

alb.ingress.kubernetes.io/actions.insert-header: |
  [{
      "type": "InsertHeader",
      "InsertHeaderConfig": {
          "key": "key",
          "value": "value",
          "valueType": "UserDefined"
      }
  }]
  • type:轉發動作類型,設置為InsertHeader,表示配置插入請求頭。

  • key:請求頭的字段名稱。

  • value:請求頭的字段內容。

  • valueType:值類型。

刪除請求頭

刪除頭字段名稱和頭字段內容。示例如下。

alb.ingress.kubernetes.io/actions.remove-header: |
     [{
         "type": "RemoveHeader",
         "RemoveHeaderConfig": {
             "key": "key"
         }
     }]

type:轉發動作類型,設置為RemoveHeader,表示配置刪除請求頭。

key:請求頭的字段名稱。

場景一:設置固定響應503狀態碼和內容

控制臺

  1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

  2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇網絡 > 路由

  3. 路由頁面,單擊創建 Ingress,在創建 Ingress對話框配置路由。

    配置項

    說明

    示例值

    網關類型

    可按需選擇ALB應用型負載均衡MSE云原生網關Nginx三種網關類型。

    關于三種網關的差異,請參見Nginx Ingress、ALB Ingress和MSE Ingress對比

    ALB應用型負載均衡

    名稱

    Ingress名稱。

    ingress

    Ingress Class

    Ingress所屬的IngressClass。

    alb

    規則

    單擊+ 添加規則可新增多個路由規則。

    • 域名:自定義域名。

    • 路徑映射:配置如下配置項。

      • 路徑:指定服務訪問的URL路徑。本例中不做配置,保留根路徑/

      • 匹配規則:支持前綴匹配(Prefix)完整匹配(Exact)默認(ImplementationSpecific)

      • 服務名稱:選擇目標服務,即K8s內的Service。

      • 端口:選擇服務需要暴露的端口。

    • Ingress支持同一個域名下配置多條路徑。單擊+ 添加路徑新增路徑。

    • 域名:不填寫

    • 路徑映射

      • 路徑:/

      • 匹配規則:默認(前綴匹配Prefix)

      • 服務名稱:response-503

      • 端口:80

    TLS配置

    開啟TLS配置開關,配置安全的路由服務。

    • 域名:自定義域名。

    • 保密字典:根據需要選擇對應的保密字典。

      如果您需要創建Secret,請執行如下操作。

      1. 保密字典右側,單擊創建

      2. 創建 Secret對話框,自定義保密字典的名稱CertKey,然后單擊確定

      3. 保密字典的下拉框,選擇已創建的Secret。

    單擊+ 新增TLS配置,可配置多條TLS。

    Ingress的更多用法,請參見Nginx Ingress高級用法

    關閉TLS配置,此示例中不需要配置TLS。

    更多配置

    • 灰度發布:開啟灰度發布開關。灰度規則可按照請求頭、Cookie 、權重三個維度進行設置。

      說明

      請求頭、Cookie 、權重可以只設置一種,若同時設置生效規則按請求頭、Cookie、權重順序匹配。

      • 按請求頭:基于Request Header的流量切分,設置后會添加注解nginx.ingress.kubernetes.io/canary-by-headernginx.ingress.kubernetes.io/canary-by-header-valuenginx.ingress.kubernetes.io/canary-by-header-pattern

      • 按Cookie:基于Cookie的流量切分,設置后會添加注解nginx.ingress.kubernetes.io/canary-by-cookie

      • 按權重:設置請求到指定服務的百分比(值為0~100的整數),設置后會添加注解nginx.ingress.kubernetes.io/canary-weight

    • 協議:指定后端服務的協議,設置后會添加注解nginx.ingress.kubernetes.io/backend-protocol

      支持HTTP、HTTPS、gRPC、gRPC四種服務協議。

    • 重寫路徑:將客戶端請求中的路徑重寫后發送到后端服務,設置后會添加注解nginx.ingress.kubernetes.io/rewrite-target

    關閉灰度發布,協議和重寫路徑保持默認。此示例中不需要配置灰度發布、協議、重新路徑。

    自定義轉發規則

    開啟自定義轉發規則,可精細化管理入站流量。

    說明

    轉發規則的條件條目上限為10個。

    • 轉發條件下拉框中選擇:

      • 域名

        匹配請求域名,如果設置了多個域名,則域名之間是或的關系。設置后會添加注釋alb.ingress.kubernetes.io/conditions.host-example

      • 路徑

        匹配請求路徑,如果設置了多個路徑,則路徑之間是或的關系。設置后會添加注釋alb.ingress.kubernetes.io/conditions.path-example

      • HTTP標頭

        以鍵值對形式匹配請求的頭部信息。例如,鍵是headername值是headervalue1。如果設置了多個Header值,則Header之間是或的關系。設置后會添加注釋alb.ingress.kubernetes.io/conditions.http-header-example

    • 轉發動作下拉框中選擇:

      返回固定響應

      設置通過ALB給客戶端返回固定響應內容,可以設置響應狀態碼,正文內容和正文類型。按需求配置響應狀態碼響應正文類型(可選)、響應正文(可選)

      響應正文類型

      • text/plain:表示無格式的內容類型。

      • text/css:表示XML格式的內容。

      • text/html:表示HTML格式的內容。

      • application/javascript:表示JavaScript格式的內容。

      • application/json:表示JSON格式內容類型。

    • 轉發條件:選擇路徑。(保持默認)

    • 轉發動作返回固響應

      • 響應狀態碼:503

      • 響應正文類型(可選)text/plain

      • 響應正文(可選):error

    注解

    您可自定義注解名稱和值,也可根據名稱選擇或搜索要配置的注解。Ingress的注解請參見ALB Ingress配置詞典

    單擊+添加注解,可對Ingress無上限地添加注解。

    無需配置,此示例不需要配置注解。

    標簽

    標簽的作用是為Ingress添加對應的標簽,標示該Ingress的特點。

    單擊+添加標簽,可對Ingress無上限地添加標簽。

    無需配置,此示例不需要配置標簽。

  4. 配置成功后,單擊確定

kubectl

以下代碼塊定義了請求服務時,將返回503狀態碼和503 error text

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: default
  name: ingress
  annotations:
    alb.ingress.kubernetes.io/actions.response-503: |
      [{
          "type": "FixedResponse",
          "FixedResponseConfig": {
              "contentType": "text/plain",
              "httpCode": "503",
              "content": "503 error text"
          }
      }]
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: response-503
                port:
                  name: use-annotation # servicePort的名稱必須為use-annotation。

場景二:使用301重定向到HTTPS端口

以下代碼塊定義了請求服務時,將重定向到服務的HTTPS端口。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: default
  name: ingress
  annotations:
    alb.ingress.kubernetes.io/actions.redirect: |
      [{
          "type": "Redirect",
          "RedirectConfig": {
              "host": "${host}",
              "path": "${path}",
              "port": "443",
              "protocol": "https",
              "query": "${query}",
              "httpCode": "301"
          }
      }]
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: redirect
                port:
                  name: use-annotation # servicePort的名稱必須為use-annotation。

場景三:插入source: alibaba請求頭

以下代碼塊定義了請求服務時,將使用source: alibaba覆蓋原有請求頭。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: default
  name: ingress
  annotations:
  # 注解中的服務為集群中事實存在的服務,且服務名稱必須和rule字段backend下的服務名稱一致。
    alb.ingress.kubernetes.io/actions.insert-header: |
      [{
          "type": "InsertHeader",
          "InsertHeaderConfig": {
              "key": "source",
              "value": "alibaba",
              "valueType": "UserDefined"
          }
      }]
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: insert-header
                port:
                  number: 80

場景四:流量鏡像至服務器組

以下代碼塊定義了請求服務時,將請求復制到流量鏡像服務器組

登錄應用型負載均衡ALB控制臺,在左側導航欄選擇應用型負載均衡 ALB > 服務器組,在服務器組頁面獲取服務器組ID。服務器組

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: traffic-mirror-ingress
  annotations:
  # mirror-svc必須為下方填入的backend.service之一。
  # ALB Ingress會將轉發至mirror-svc的流量鏡像到"ServerGroupID"中填入的后端服務器
  # 如果有多個Serice需要配置流量鏡像,請為每個Service分別填寫一條annotation
   alb.ingress.kubernetes.io/actions.mirror-svc: |
       [{
           "type": "TrafficMirror",
           "TrafficMirrorConfig": {
              "TargetType" : "ForwardGroupMirror",
              "MirrorGroupConfig": {
                  "ServerGroupTuples" : [{
                      "ServerGroupID": "sgp-2auud2fxj1r46*****"
                  }]
              }
           }
       }]
spec:
  ingressClassName: alb
  rules:
   - host: demo.domain.ingress.top
     http:
      paths:
      - path: /test
        pathType: Prefix
        backend:
          service:
            name: mirror-svc
            port:
              number: 80

場景五:請求轉發至多個后端服務器組

控制臺

  1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

  2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇網絡 > 路由

  3. 路由頁面,單擊創建 Ingress,在創建 Ingress對話框配置路由。

    配置項

    說明

    示例值

    網關類型

    可按需選擇ALB應用型負載均衡MSE云原生網關Nginx三種網關類型。

    關于三種網關的差異,請參見Nginx Ingress、ALB Ingress和MSE Ingress對比

    ALB應用型負載均衡

    名稱

    Ingress名稱。

    forward-ingress

    Ingress Class

    Ingress所屬的IngressClass。

    alb

    規則

    單擊+ 添加規則可新增多個路由規則。

    • 域名:自定義域名。

    • 路徑映射:配置如下配置項。

      • 路徑:指定服務訪問的URL路徑。本例中不做配置,保留根路徑/

      • 匹配規則:支持前綴匹配(Prefix)完整匹配(Exact)默認(ImplementationSpecific)

      • 服務名稱:選擇目標服務,即K8s內的Service。

      • 端口:選擇服務需要暴露的端口。

    • Ingress支持同一個域名下配置多條路徑。單擊+ 添加路徑新增路徑。

    • 域名:demo.domain.ingress.top

    • 路徑映射

      • 路徑:/path

      • 匹配規則:默認(前綴匹配Prefix)

      • 服務名稱:forward

      • 端口:80

    TLS配置

    開啟TLS配置開關,配置安全的路由服務。

    • 域名:自定義域名。

    • 保密字典:根據需要選擇對應的保密字典。如果您需要創建Secret,請執行如下操作。

    1. 保密字典右側,單擊創建

    2. 創建 Secret對話框,自定義保密字典的名稱CertKey,然后單擊確定

    3. 保密字典的下拉框,選擇已創建的Secret。

    關閉TLS配置,此示例中不需要配置TLS。

    更多配置

    • 灰度發布:開啟灰度發布開關。灰度規則可按照請求頭、Cookie 、權重三個維度進行設置。

      說明

      請求頭、Cookie 、權重可以只設置一種,若同時設置生效規則按請求頭、Cookie、權重順序匹配。

      • 按請求頭:基于Request Header的流量切分,設置后會添加注解nginx.ingress.kubernetes.io/canary-by-headernginx.ingress.kubernetes.io/canary-by-header-valuenginx.ingress.kubernetes.io/canary-by-header-pattern

      • 按Cookie:基于Cookie的流量切分,設置后會添加注解nginx.ingress.kubernetes.io/canary-by-cookie

      • 按權重:設置請求到指定服務的百分比(值為0~100的整數),設置后會添加注解nginx.ingress.kubernetes.io/canary-weight

    • 協議:指定后端服務的協議,設置后會添加注解nginx.ingress.kubernetes.io/backend-protocol

      支持HTTP、HTTPS、gRPC、gRPCS四種服務協議。

    • 重寫路徑:將客戶端請求中的路徑重寫后發送到后端服務,設置后會添加注解nginx.ingress.kubernetes.io/rewrite-target

    關閉灰度發布,協議和重寫路徑保持默認。此示例中不需要配置灰度發布、協議、重寫路徑。

    自定義轉發規則

    開啟自定義轉發規則,可精細化管理入站流量。

    說明

    轉發規則的條件條目上限為10個。

    • 轉發條件下拉框中選擇:

      • 域名

        匹配請求域名,如果設置了多個域名,則域名之間是或的關系。設置后會添加注釋alb.ingress.kubernetes.io/conditions.host-example

      • 路徑

        匹配請求路徑,如果設置了多個路徑,則路徑之間是或的關系。設置后會添加注釋alb.ingress.kubernetes.io/conditions.path-example

      • HTTP標頭

        以鍵值對形式匹配請求的頭部信息。例如,鍵是headername值是headervalue1。如果設置了多個Header值,則Header之間是或的關系。設置后會添加注釋alb.ingress.kubernetes.io/conditions.http-header-example

    • 轉發動作下拉框中選擇:

      轉發至

      轉發到后端多服務器組。在服務名稱中,請選擇目標服務。在端口中,選擇目標端口號。然后自定義配置權重值。

      說明
      • 如果是Flannel網絡插件集群則不支持ClusterIP類型服務。

      • 選擇轉發至,就不需要配置規則中的路徑映射。

    • 轉發條件:選擇域名。域名:demo.domain.ingress.top

    • 轉發動作轉發至

      • 服務名稱:tea-svc

      • 端口:80

      • 配置權重:80

    • 添加服務

      • 服務名稱:coffee-svc

      • 端口:80

      • 配置權重:20

    注解

    您可自定義注解名稱和值,也可根據名稱選擇或搜索要配置的注解。Ingress的注解請參見ALB Ingress配置詞典

    單擊+添加注解,可對Ingress無上限地添加注解。

    無需配置,此示例不需要配置注解。

    標簽

    標簽的作用是為Ingress添加對應的標簽,標示該Ingress的特點。

    單擊+添加標簽,可對Ingress無上限地添加標簽。

    無需配置,此示例不需要配置標簽。

  4. 配置完成,在創建Ingress頁面的左下角,單擊確定。

kubectl

以下代碼塊定義了請求服務時,將請求轉發至集群內的多個服務。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: forward-ingress
  annotations:
  # 注解中的服務為集群中事實存在的服務,且服務名稱必須和rule字段backend下的服務名稱一致。
    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 # servicePort的名稱必須為use-annotation。

場景六:重寫請求配置信息

以下代碼塊定義了請求服務時,重寫請求的域名、路徑和字符串。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: default
  name: rewrite-ingress
  annotations:
    alb.ingress.kubernetes.io/actions.rewrite: |
       [{
           "type": "Rewrite",
           "RewriteConfig": {
               "Host": "demo.domain.ingress.top",
               "Path": "/test",
               "Query": "queryString"
           }
       }]
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
          - path: /path
            pathType: Prefix
            backend:
              service:
                name: rewrite
                port: 80

場景七:基于ResponseHeader對響應方向的請求頭進行修改

重要
  • 自定義的ALB ingress轉發規則在默認情況下為請求方向,如果您希望創建響應方向的轉發規則,則需要將注解項 alb.ingress.kubernetes.io/rule-direction.<Service的名稱> 配置為Response(該注解項默認配置為Request)。

  • 當創建響應方向的轉發規則時,ingressSpec.rules.backend字段下的servicePort的名稱必須為use-annotation

以下代碼塊定義了當匹配到ResponseHeader時,即Header中包含response-hello,值必須為value1value2,那么將在Header中插入新的請求頭source: alibaba

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/rule-direction.response-header: Response
   alb.ingress.kubernetes.io/conditions.response-header: |
     [{
         "type": "ResponseHeader",
         "responseHeaderConfig": {
            "key": "response-hello",
            "values": [
               "value1",
               "value2"
            ]
         }
     }]
   alb.ingress.kubernetes.io/actions.response-header: |
     [{
         "type": "InsertHeader",
         "InsertHeaderConfig": {
             "key": "source",
             "value": "alibaba",
             "valueType": "UserDefined"
         }
     }]
  name: response-header
spec:
  ingressClassName: alb
  rules:
   - http:
      paths:
      - path: /
        pathType: ImplementationSpecific
        backend:
          service:
            name: response-header
            port:
              name: use-annotation # servicePort的名稱必須為use-annotation。

場景八:基于響應狀態碼對響應方向的請求頭進行修改

重要
  • 自定義的ALB ingress轉發規則在默認情況為請求方向,如果您希望創建響應方向的轉發規則,則需要將注解項 alb.ingress.kubernetes.io/rule-direction.<Service的名稱> 配置為Response(該注解項默認配置為Request)。

  • 當創建響應方向的轉發規則時,ingressSpec.rules.backend字段下的servicePort的名稱必須為use-annotation

以下代碼塊定義了僅當響應狀態碼為200或300時,才會對請求頭執行移除操作(將response-hello從請求Header中移除)。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/rule-direction.response-hello: Response
   alb.ingress.kubernetes.io/conditions.response-hello: |
     [{
       "type": "ResponseStatusCode",
       "responseStatusCodeConfig": {
         "values": [
             "200",
             "300"
         ]
       }
     }]
   alb.ingress.kubernetes.io/actions.response-hello: |
     [{
         "type": "RemoveHeader",
         "RemoveHeaderConfig": {
             "key": "response-hello"
         }
     }]
  name: response-hello
spec:
  ingressClassName: alb
  rules:
   - http:
      paths:
      - path: /*
        pathType: ImplementationSpecific
        backend:
          service:
            name: response-hello
            port:
              name: use-annotation # servicePort的名稱必須為use-annotation。

轉發條件與動作實踐

場景一:基于域名的轉發條件和動作,轉發至指定的服務

在本節中,介紹如何在ACK控制臺中,通過基于域名的轉發條件和配置相應的轉發動作,將流量轉發至指定的服務。

說明

在創建ALB Ingress前,請按照如下步驟部署服務、AlbConfig以及IngressClass。

  1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

  2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇網絡 > 路由

  3. 路由頁面,單擊創建 Ingress,在創建 Ingress對話框配置路由。

    配置項

    說明

    示例值

    網關類型

    可按需選擇ALB應用型負載均衡MSE云原生網關Nginx三種網關類型。

    關于三種網關的差異,請參見Nginx Ingress、ALB Ingress和MSE Ingress對比

    ALB應用型負載均衡

    名稱

    Ingress的名稱

    alb_ingress

    Ingress Class

    Ingress所屬的IngressClass

    alb

    規則

    單擊+ 添加規則可新增多個路由規則。

    • 域名:自定義域名。

    • 路徑映射:配置如下配置項。

      • 路徑:指定服務訪問的URL路徑。本例中不做配置,保留根路徑/

      • 匹配規則:支持前綴匹配(Prefix)完整匹配(Exact)默認(ImplementationSpecific)

      • 服務名稱:選擇目標服務,即K8s內的Service。

      • 端口:選擇服務需要暴露的端口。

    • Ingress支持同一個域名下配置多條路徑。單擊+ 添加路徑新增路徑。

    • 域名:*.example.com

    • 路徑映射

      • 路徑:/tes

      • 匹配規則:默認(ImplementationSpecific)

      • 服務名稱:tea-svc

      • 端口:80

    TLS配置

    開啟TLS配置開關,配置安全的路由服務。

    • 域名:自定義域名。

    • 保密字典:根據需要選擇對應的保密字典。

      如果您需要創建Secret,請執行如下操作。

      1. 保密字典右側,單擊創建

      2. 創建 Secret對話框,自定義保密字典的名稱CertKey,然后單擊確定

      3. 保密字典的下拉框,選擇已創建的Secret。

    單擊+ 新增TLS配置,可配置多條TLS。

    更多詳情,請參見配置HTTPS證書以實現加密通信

    關閉TLS配置,此示例中不需要配置TLS。

    更多配置

    • 灰度發布:開啟灰度發布開關。灰度規則可按照請求頭、Cookie 、權重三個維度進行設置。

      說明

      請求頭、Cookie 、權重可以只設置一種,若同時設置生效規則按請求頭、Cookie、權重順序匹配。

      • 按請求頭:基于Request Header的流量切分,設置后會添加注解nginx.ingress.kubernetes.io/canary-by-headernginx.ingress.kubernetes.io/canary-by-header-valuenginx.ingress.kubernetes.io/canary-by-header-pattern

      • 按Cookie:基于Cookie的流量切分,設置后會添加注解nginx.ingress.kubernetes.io/canary-by-cookie

      • 按權重:設置請求到指定服務的百分比(值為0~100的整數),設置后會添加注解nginx.ingress.kubernetes.io/canary-weight

    • 協議:指定后端服務的協議,設置后會添加注解nginx.ingress.kubernetes.io/backend-protocol

      支持HTTP、HTTPS、gRPC、gRPCS四種服務協議。

    • 重寫路徑:將客戶端請求中的路徑重寫后發送到后端服務,設置后會添加注解nginx.ingress.kubernetes.io/rewrite-target

    關閉灰度發布,協議和重寫路徑保持默認。此示例中不需要配置灰度發布、協議、重新路徑。

    自定義轉發規則

    開啟自定義轉發規則,可精細化管理入站流量。

    說明

    轉發規則的條件條目上限為10個。

    • 轉發條件下拉框中選擇:

      • 域名

        匹配請求域名,如果設置了多個域名,則域名之間是或的關系。設置后會添加注釋alb.ingress.kubernetes.io/conditions.host-example

      • 路徑

        匹配請求路徑,如果設置了多個路徑,則路徑之間是或的關系。設置后會添加注釋alb.ingress.kubernetes.io/conditions.path-example

        重要

        設置路徑轉發條件后,控制臺將會在Ingress中自動添加一條路徑為/created-by-<ALB-ID>的轉發規則。

      • HTTP標頭

        以鍵值對形式匹配請求的頭部信息。例如,鍵是headername值是headervalue1。如果設置了多個Header值,則Header之間是或的關系。設置后會添加注釋alb.ingress.kubernetes.io/conditions.http-header-example

    • 轉發動作下拉框中選擇:

      • 轉發至

        轉發到后端多服務器組。在服務名稱中,請選擇目標服務。在端口中,選擇目標端口號。然后自定義配置權重值。

        說明
        • 如果是Flannel網絡插件集群則不支持ClusterIP類型服務。

        • 選擇轉發至,就不需要配置規則中的路徑映射

    • 轉發條件:選擇域名路徑HTTP標頭

      • 域名:是example.com,單擊添加域名,或test.com。

    • 轉發動作:選擇轉發至

      • 服務名稱:tea-svc

      • 端口:80

      • 權重:100

    注解

    您可自定義注解名稱和值,也可根據名稱選擇或搜索要配置的注解。Ingress的注解請參見Annotations

    單擊+添加注解,可對Ingress無上限地添加注解。

    無需配置,此示例不需要配置注解。

    標簽

    標簽的作用是為Ingress添加對應的標簽,標示該Ingress的特點。

    單擊+添加標簽,可對Ingress無上限地添加標簽。

    無需配置,此示例不需要配置標簽。

  4. 配置完成,在創建Ingress頁面的左下角,單擊確定。

  5. 檢查Ingress創建成功:

    1. 在左側導航欄,選擇網絡 > 路由。可查看到名稱為cafe-ingress的Ingress已部署。

    2. 在cafe-ingress的端點列,可查看到端點信息。