配置网关

入站网关(Gateway)是从网关类(Gateway Class)部署的实例。它创建监听器以捕获指定域名和端口上的外部流量。结合路由规则,它可以将指定的外部流量路由到相应的后端实例。

创建入站网关以实现更细粒度的网络资源分配。

术语

资源名称概述使用说明
网关类在标准网关 API 文档中,网关类被定义为创建网关的模板。不同的模板可以为不同的业务场景创建入站网关,从而促进快速的流量管理。平台包括专用的网关类。
入站网关入站网关对应于特定的资源实例,用户可以独占使用该入站网关的所有监听和计算资源。它是对监听器有效的路由规则的配置。当网关检测到外部流量时,将根据路由规则将其分配到后端实例。可以视为负载均衡器实例。
路由规则路由规则定义了一系列从网关到服务的流量分配指南。当前网关 API 中支持的标准路由规则类型包括 HTTPRoute、TCPRoute、UDPRoute 等。平台当前支持监听 HTTP、HTTPS、TCP 和 UDP 协议。

先决条件

平台管理员必须确保集群支持 LoadBalancer 类型的内部路由。对于公有云集群,必须安装 LoadBalancer 服务控制器。在非公有云集群中,平台提供外部地址池功能,允许 LoadBalancer 类型的内部路由在配置完成后自动从外部地址池中获取 IP 以供外部访问。

示例网关和 Alb2 自定义资源(CR)

# demo-gateway.yaml
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
  namespace: k-1
  name: test
  annotations:
    cpaas.io/display-name: ces
    listeners.cpaas.io/creationTimestamp: '["2025-05-26T02:05:56.135Z"]'
    listeners.cpaas.io/display-name: '[""]'
  labels:
    alb.cpaas.io/alb-ref: test-o93q7
spec:
  gatewayClassName: exclusive-gateway
  listeners:
    - allowedRoutes:
        namespaces:
          from: All
      name: gateway-metric
      protocol: TCP
      port: 11782
---
apiVersion: crd.alauda.io/v2beta1
kind: ALB2
metadata:
  namespace: k-1
  name: test-o93q7
spec:
  type: nginx
  config:
    enableAlb: false
    networkMode: container
    resources:
      limits:
        cpu: 200m
        memory: 256Mi
      requests:
        cpu: 200m
        memory: 256Mi
    vip:
      enableLbSvc: true
      lbSvcAnnotations: {}
    gateway:
      mode: standalone
      name: test # # [!code callout]
  1. 请参见下面的网关类介绍。
  2. alb2 名称格式为 {gatewayName}-{random}
  3. gateway 名称。

通过 Web 控制台创建网关

  1. 进入 容器平台

  2. 在左侧导航栏中,点击 网络 > 入站网关

  3. 点击 创建入站网关

  4. 根据以下说明配置特定参数。

    参数描述
    名称入站网关的名称。
    网关类网关类定义了网关的行为,类似于存储类(StorageClasses)的概念;它是一个集群资源。
    专用:入站网关将对应于特定的资源实例,用户可以利用该网关的所有监听和计算资源。
    规格您可以根据需要选择推荐的使用场景或自定义资源限制。
    访问地址入站网关的地址,默认情况下自动获取。
    内部路由注释用于声明 LoadBalancer 类型内部路由的配置或能力。有关特定注释信息,请参阅 LoadBalancer 类型内部路由注释说明
  5. 点击 创建

通过 CLI 创建网关

kubectl apply -f demo-gateway.yaml

查看平台创建的资源

入站网关创建后,平台会自动创建许多资源。请勿删除以下资源。

默认创建的资源名称
ALB2 类型资源name-lb-random
Deploymentname-lb-random
内部路由
  • name-lb-random
  • name-lb-random-lb-random
配置字典
  • name-lb-random-port-info
  • name-lb-random
服务账户name-lb-random-serviceaccount

更新网关

NOTE

更新入站网关将导致 3-5 分钟的服务中断。请在适当的时间进行此操作。

通过 Web 控制台更新网关

  1. 访问 容器平台

  2. 在左侧导航栏中,点击 网络 > 入站网关

  3. 点击 ⋮ > 更新

  4. 根据需要更新入站网关配置。

    注意:请根据业务需求合理设置规格。

  5. 点击 更新

添加监听器

监控指定域名下的流量,并根据绑定的路由规则将其转发到后端实例。

先决条件

  • 如果需要监控 HTTP 协议,请提前联系管理员准备 域名

  • 如果需要监控 HTTPS 协议,请提前联系管理员准备 域名证书

通过 Web 控制台添加监听器

  1. 在左侧导航栏中,点击 网络 > 入站网关

  2. 点击 入站网关名称

  3. 点击 添加监听器

  4. 根据以下说明配置特定参数。

    参数描述
    监听器协议和端口当前支持监控 HTTP、HTTPS、TCP 和 UDP 协议,您可以自定义输入要监控的端口,例如:80

    注意
    • 当端口相同时,HTTP、HTTPS 和 TCP 监听器类型不能共存;只能选择其中一种协议。
    • 当使用 HTTP 或 HTTPS 协议时,如果端口相同,域名必须不同。
    域名选择当前命名空间中可用的域名,用于监控访问该域名的网络流量。
    提示:TCP 和 UDP 协议不支持选择域名。
  5. 点击 创建

通过 CLI 添加监听器

kubectl patch gateway test \
  -n k-1 \
  --type=merge \
  -p '{
    "metadata": {
      "annotations": {
        "listeners.cpaas.io/creationTimestamp": "[\"2025-05-26T02:05:56.135Z\",\"2025-05-26T03:33:52.431Z\"]",
        "listeners.cpaas.io/display-name": "[\"\",\"\" ]"
      }
    },
    "spec": {
      "listeners": [
        {
          "allowedRoutes": {
            "namespaces": {
              "from": "All"
            }
          },
          "name": "gateway-metric",
          "protocol": "TCP",
          "port": 11782
        },
        {
          "allowedRoutes": {
            "namespaces": {
              "from": "All"
            }
          },
          "name": "demo-listener",
          "protocol": "HTTP",
          "port": 8088,
          "hostname": "developer.test.cn"
        }
      ]
    }
  }'

创建路由规则

路由规则为入站流量提供路由策略,类似于入站规则(Kubernetes Ingress)。它们将网关监控的网络流量暴露给集群的内部路由(Kubernetes Service),促进路由转发策略。关键区别在于它们针对不同的服务对象:入站规则服务于 Ingress Controller,而路由规则服务于 Ingress Gateway。

一旦在 Ingress Gateway 中设置了监听,网关将实时监控来自指定域名和端口的流量。路由规则可以根据需要将入站流量转发到后端实例。

示例 HTTPRoute 自定义资源(CR)

# example-httproute.yaml
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
  namespace: k-1
  name: example-http-route
  annotations:
    cpaas.io/display-name: ""
spec:
  hostnames:
    - developer.test.cn
  parentRefs:
    - kind: Gateway
      namespace: k-1
      name: test
      sectionName: demo-listener
  rules:
    - matches:
        - path:
            type: Exact
            value: "/demo"
      filters: []
      backendRefs:
        - kind: Service
          name: test-service
          namespace: k-1
          port: 80
          weight: 100
  1. 可用的类型有:HTTPRouteTCPRouteUDPRoute
  2. Gateway 监听器名称。
NOTE

如果 HTTPRoute 类型路由规则中没有匹配 Path 对象的规则,将自动添加一个匹配规则,模式为 PathPrefix,值为 /。

通过 Web 控制台创建路由

  1. 访问 容器平台

  2. 在左侧导航栏中,点击 网络 > 路由规则

  3. 点击 创建路由规则

  4. 按照以下说明配置一些参数。

    参数描述
    路由类型当前支持的路由类型有:HTTPRoute、TCPRoute、UDPRoute。
    提示:HTTPRoute 支持发布到 HTTP 和 HTTPS 协议监听器。
    发布到监听器在左侧选择框中,选择已创建的 Ingress Gateway,在右侧选择框中,选择已创建的 Listener。平台将把创建的路由规则发布到下面的监听器,使网关能够将捕获的流量转发到指定的后端实例。

    注意:不允许将路由规则发布到端口为 11782 的监听器或已挂载 TCP 或 UDP 路由的监听器。
    匹配您可以添加一个或多个匹配规则,以捕获符合要求的流量。例如,捕获指定路径的流量捕获指定方法的流量等。

    注意
    • 点击 添加;当添加多个路由规则时,规则之间的关系为 'AND',所有规则必须匹配才能生效。
    • 点击 添加匹配;当添加多组路由规则时,组之间的关系为 'OR',任意组匹配均可生效。
    • TCPRoute 和 UDPRoute 不支持配置匹配规则。
    • 当匹配对象为 path,且匹配方法为 ExactPathPrefix 时,输入的 value 必须以 "/" 开头,并禁止使用 "//"、"/./"、"/../"、"%2f"、"%2F"、"#"、"/.."、"/." 等字符。
    操作您可以添加一个或多个操作来处理捕获的流量。
    • 头部:HTTP 消息的头部包含许多元数据,提供有关请求或响应的附加信息。通过修改头部字段,服务器可以影响请求和响应的处理方式。
    • 重定向:匹配的 URL 将以指定的方式处理,然后请求将重新发起。
    • 重写:匹配的 URL 将以指定的方式处理,然后请求将重定向到不同的资源路径或文件名。


    注意
    • 点击 添加;当添加多个操作规则时,平台将根据规则的显示顺序依次执行所有操作。
    • TCPRoute 和 UDPRoute 不支持配置操作规则。
    • 在同一路由规则内,不能有多个 Header 类型的操作具有相同的 value
    • 在同一路由规则内,只能存在一种类型的 RedirectRewrite,且只能存在一种模式的 FullPathPrefixPath
    • 如果希望使用 PrefixPath 操作,请先添加一个 PathPrefix 模式的匹配规则。
    后端实例规则生效后,将根据当前命名空间中选择的内部路由和端口转发到后端实例。您还可以设置权重,权重值越高,被轮询的概率越大。
    提示:权重旁边的百分比表示转发到该实例的概率,计算方式为当前权重值与所有权重值之和的比值。
  5. 点击 创建

通过 CLI 创建路由

kubectl apply -f example-httproute.yaml