首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在 TKE 使用 EnvoyGateway 流量网关

在 TKE 使用 EnvoyGateway 流量网关

原创
作者头像
imroc
发布于 2025-02-27 02:03:36
发布于 2025-02-27 02:03:36
1280
举报

概述

EnvoyGateway 是基于 Envoy 实现 Gateway APIKubernetes 网关,你可以通过定义 Gateway API 中定义的 GatewayHTTPRoute 等资源来管理 Kubernetes 的南北向流量。

本文将介绍如何在 TKE 上安装 EnvoyGateway 并使用 Gateway API 来接入和管理流量转发。

:::tip说明

Kubernetes 提供了 Ingress API 来接入七层南北向流量,但功能很弱,每种实现都带了不同的 annotation 来增强 Ingress 的能力,灵活性和扩展性也较差,在社区的推进下,推出了 Gateway API 作为更好的解决方案,解决 Ingress API 痛点的同时,还统一了四七层南北向流量,同时也支持服务网格的东西向流量(参考 GAMMA),各个云厂商以及开源代理软件都在积极适配 Gateway API,可参考 Gateway API 的实现列表,其中 Envoy Gateway 便是其中一个很流行的实现。

在 TKE 上使用 EnvoyGateway 相比自带的 CLB Ingress 还有一个明显的优势,就是多个转发规则资源(如HTTPRoute)可以复用同一个 CLB,且可以跨命名空间。CLB Ingress 必须将所有转发规则写到同一个 Ingress 资源中,不方便管理,且如果不同后端 Service 跨命名空间了,则无法用同一个 Ingress (CLB)来管理了。

:::

操作步骤

安装 EnvoyGateway

方法一:通过应用市场安装

TKE 应用市场 搜索或在 网络 分类中找到 envoygateway,点击【创建应用】,命名空间选 envoy-gateway-system,若没有则先新建一个,完成其余配置后点击【创建】即可将 envoygateway 安装到集群中。

方法二:通过 Helm 安装

首先确保本机安装了 helm 并能操作 TKE 集群,参考 本地 Helm 客户端连接集群

然后再参考 EnvoyGateway 官方文档 使用 Helm 安装 进行安装。

配置 kubectl 访问集群

EnvoyGateway 使用的是 Gateway API 而不是 Ingress API,在 TKE 控制台无法直接创建,可通过 kubectl 命令进行创建,参考 连接集群 这篇文档配置 kubectl。

创建 GatewayClass

类似 Ingress 需要指定 IngressClass,Gateway API 中每个 Gateway 都需要引用一个 GatewayClassGatewayClass 相当于是网关实例除监听器外的配置(如部署方式、网关 Pod 的 template、副本数量、关联的 Service 等),所以先创建一个 GatewayClass

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: eg
spec:
  controllerName: gateway.envoyproxy.io/gatewayclass-controller

GatewayClass 是 non-namespaced 资源,无需指定命名空间。

创建 Gateway

每个 Gateway 对应一个 CLB,在 Gateway 上声明端口相当于在 CLB 上创建响应协议的监听器:

:::tip说明

Gateway 的所有字段参考 API Specification: Gateway

:::

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: test-gw
  namespace: test
spec:
  gatewayClassName: eg
  listeners:
  - name: http
    protocol: HTTP
    port: 8080
    allowedRoutes:
      namespaces:
        from: All

Gateway 可以指定命名空间,可以被 HTTPRoute 等路由规则跨命名空间引用。

Gateway 创建后,EnvoyGateway 会自动为其创建一个 LoadBalancer 类型的 Service,也就是一个 CLB。在 TKE 上,LoadBalancer 类型的 Service 默认是一个公网 CLB,如果要自定义,可参考常见问题中的如何自定义 CLB

如何获取 Gateway 对应的 CLB 地址呢?可以通过 kubectl get gtw 查看:

代码语言:bash
AI代码解释
复制
$ kubectl get gtw test-gw -n test
NAME      CLASS   ADDRESS         PROGRAMMED   AGE
test-gw   eg      139.155.64.52   True         358d

其中 ADDRESS 就是 CLB 的地址(IP 或域名)。

创建 HTTPRoute

HTTPRoute 用于定义 HTTP 转发规则(七层流量),也是 Gateway API 中最常用的转发规则,类似 Ingress API 中的 Ingress 资源。

下面给出一个示例:

:::tip说明

HTTPRoute 的所有字段参考API Specification: HTTPRoute

:::

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: nginx
  namespace: test
spec:
  parentRefs:
  - name: test-gw
    namespace: test
  hostnames:
  - "test.example.com"
  rules:
  - backendRefs:
    - name: nginx
      port: 80

:::info注意

  1. parentRefs 中指定要引用 Gateway(CLB),表示将该规则应用到这个 Gateway 中。
  2. hostnames 定义转发规则使用的的域名,确保该域名解析Gateway 对应的 CLB,这样可以通过域名访问集群内的服务。
  3. backendRefs 定义该条转发规则对应的后端 Service。

:::

创建 TCPRoute 和 UDPRoute

TCPRouteUDPRoute 用于定义 TCPUDP 转发规则(四层流量),类似 LoadBalancer 类型的 Service

下面是 TCPRoute 的示例:

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TCPRoute
metadata:
  name: foo
spec:
  parentRefs:
  - namespace: test
    name: test-gw
    sectionName: foo
  rules:
  - backendRefs:
    - name: foo
      port: 6000

:::info注意

  1. parentRefs 指定要引用的Gateway(CLB),表示将该 TCP 要监听到这个 Gateway 中。通常只使用 Gateway 中的一个端口,所以指定 sectionName 来指定使用哪个监听器暴露。
  2. backendRefs 定义该条转发规则对应的后端 Service。

:::

下面是 UDPRoute 的示例,与 TCPRoute 类似:

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: UDPRoute
metadata:
  name: bar
spec:
  parentRefs:
  - namespace: test
    name: test-gw
    sectionName: bar
  rules:
  - backendRefs:
    - name: bar
      port: 6000

引用的 Gateway 示例:

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: test-gw
  namespace: test
spec:
  gatewayClassName: eg
  listeners:
  - name: foo
    protocol: TCP
    port: 6000
    allowedRoutes:
      namespaces:
        from: All
  - name: bar
    protocol: UDP
    port: 6000
    allowedRoutes:
      namespaces:
        from: All

常见问题

如何自定义 CLB?

可通过创建 EnvoyProxy 自定义资源来自定义,下面是示例:

代码语言:yaml showLineNumbers
AI代码解释
复制
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
  name: proxy-config
  namespace: test
spec:
  provider:
    type: Kubernetes
    kubernetes:
      envoyDeployment:
        replicas: 1
        container:
          resources:
            requests:
              tke.cloud.tencent.com/eni-ip: "1"
            limits:
              tke.cloud.tencent.com/eni-ip: "1"
        pod:
          annotations:
            tke.cloud.tencent.com/networks: tke-route-eni
      envoyService:
        annotations:
          service.kubernetes.io/tke-existed-lbid: lb-5nhlk3nr
          service.cloud.tencent.com/direct-access: "true"

以上示例中:

  • 显式声明使用 VPC-CNI 网络模式且启用 CLB 直连 Pod。
  • 使用已有 CLB,指定了 CLB 的 ID。

相应的,GatewayClass 中需引用该 EnvoyProxy 配置:

代码语言:yaml showLineNumbers
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: eg
spec:
  controllerName: gateway.envoyproxy.io/gatewayclass-controller
  parametersRef:
    group: gateway.envoyproxy.io
    kind: EnvoyProxy
    name: proxy-config
    namespace: test

更多 CLB 相关的自定义可参考 Service Annotation 说明

举几个常见的自定义例子:

  1. 通过 service.cloud.tencent.com/specify-protocol 注解来修改监听器协议为 HTTPS 并正确引用 SSL 证书,以便让 CLB 能够接入 腾讯云 WAF
  2. 通过 service.kubernetes.io/qcloud-loadbalancer-internal-subnetid 注解指定 CLB 内网 IP,实现自动创建内网 CLB 来接入流量。
  3. 通过 service.kubernetes.io/service.extensiveParameters 注解自定义自动创建的 CLB 更多属性,如指定运营商、带宽上限、实例规格、网络计费模式等。

多个 HTTPRoute 如何复用同一个 CLB?

通常一个 Gateway 对象就对应一个 CLB,只要不同 HTTPRouteparentRefs 引用的是同一个 Gateway 对象,那么它们就会复用同一个 CLB。

:::info注意

如果多个 HTTPRoute 复用同一个 CLB,确保它们定义的 HTTP 规则不要冲突,否则可能转发行为可能不符预期。

:::

下面给个示例,第一个 HTTPRoute,引用 Gateway test-gw,使用域名 test1.example.com

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: test1
  namespace: test
spec:
  parentRefs:
    - group: gateway.networking.k8s.io
      kind: Gateway
      name: test-gw
      namespace: test
  hostnames:
    - "test1.example.com"
  rules:
    - backendRefs:
        - group: ""
          kind: Service
          name: test1
          port: 80

第二个 HTTPRoute,也引用 Gateway test-gw,域名则使用 test2.example.com

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: test2
  namespace: test
spec:
  parentRefs:
    - group: gateway.networking.k8s.io
      kind: Gateway
      name: test-gw
      namespace: test
  hostnames:
    - "test2.example.com"
  rules:
    - backendRefs:
        - group: ""
          kind: Service
          name: test2
          port: 80

如何实现四七层共用同一个 CLB?

使用 TKE 自带的 LoadBalancer 类型的 Service,可以实现多个 Service 复用同一个 CLB,也就是多个四层端口(TCP/UDP)复用同一个 CLB;使用 TKE 自带的 Ingress (CLB Ingress),无法与任何其它 IngressLoadBalancer 类型的 Service 复用同一个 CLB。所以,如果需要实现四七层共用同一个 CLB,直接使用 TKE 自带的 CLB Service 和 CLB Ingress 无法实现,而如果你安装了 EnvoyGateway 的话就可以实现。

下面给个示例, 首先 Gateway 的监听器声明四层和七层的端口:

:::tip注意

使用 name 给每个监听器取个名字,方便后续通过 sectionName 引用。

:::

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: test-gw
  namespace: test
spec:
  gatewayClassName: eg
  listeners:
  - name: http
    protocol: HTTP
    port: 80
    allowedRoutes:
      namespaces:
        from: All
  - name: https
    protocol: HTTPS
    port: 443
    allowedRoutes:
      namespaces:
        from: All
    tls:
      mode: Terminate
      certificateRefs:
      - kind: Secret
        group: ""
        name: https-cert
  - name: tcp-6000
    protocol: TCP
    port: 6000
    allowedRoutes:
      namespaces:
        from: All
  - name: udp-6000
    protocol: UDP
    port: 6000
    allowedRoutes:
      namespaces:
        from: All

HTTPRoute 里使用 Gateway 里的七层监听器(80 和 443):

:::tip注意

使用 sectionName 指定具体要绑定的监听器。

:::

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: test
  namespace: test
spec:
  parentRefs:
  - name: test-gw
    namespace: test
    sectionName: http
  - name: test-gw
    namespace: test
    sectionName: https
  hostnames:
  - "test.example.com"
  rules:
  - backendRefs:
    - group: ""
      kind: Service
      name: nginx
      port: 80

TCPRouteUDPRoute 里使用 Gateway 里的四层监听器(TCP/6000 和 UDP/6000):

:::tip注意

HTTPRoute 一样,使用 sectionName 指定具体要绑定的监听器。

:::

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TCPRoute
metadata:
  name: foo
spec:
  parentRefs:
  - namespace: test
    name: test-gw
    sectionName: tcp-6000
  rules:
  - backendRefs:
    - name: foo
      port: 6000
---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: UDPRoute
metadata:
  name: foo
spec:
  parentRefs:
  - namespace: test
    name: test-gw
    sectionName: udp-6000
  rules:
  - backendRefs:
    - name: foo
      port: 6000

如何实现自动重定向?

通过配置 HTTPRoutefilters 可实现自动重定向,下面给出示例。

路径前缀 /api/v1 替换成 /apis/v1

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: redirect-api-v1
  namespace: test
spec:
  hostnames:
  - test.example.com
  parentRefs:
  - name: test-gw
    namespace: test
    sectionName: https
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /api/v1
    filters:
    - type: RequestRedirect
      requestRedirect:
        path:
          type: ReplacePrefixMatch
          replacePrefixMatch: /apis/v1
        statusCode: 301

http://test.example.com/api/v1/pods 会被重定向到 http://test.example.com/apis/v1/pods

/foo 开头的统一重定向到 /bar

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: redirect-api-v1
  namespace: test
spec:
  hostnames:
  - test.example.com
  parentRefs:
  - name: test-gw
    namespace: test
    sectionName: https
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /foo
    filters:
    - type: RequestRedirect
      requestRedirect:
        path:
          type: ReplaceFullPath
          replaceFullPath: /bar
        statusCode: 301

https://test.example.com/foo/cayennehttps://test.example.com/foo/paprika 都会被重定向到 https://test.example.com/bar

HTTP 重定向到 HTTPS:

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: redirect-https
  namespace: test
spec:
  hostnames:
  - test.example.com
  parentRefs:
  - name: test-gw
    namespace: test
    sectionName: http
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /
    filters:
    - type: RequestRedirect
      requestRedirect:
        scheme: https
        statusCode: 301
        port: 443

http://test.example.com/foo 会被重定向到 https://test.example.com/foo

如何配置 HTTPS 或 TLS?

将证书和密钥存储在 Kubernetes 的 Secret 中:

:::tip说明

如果不想手动管理证书,希望证书自动签发,可考虑使用 cert-manager 来自动签发。参考 使用 cert-manager 为 DNSPod 的域名签发免费证书

:::

代码语言:yaml
AI代码解释
复制
apiVersion: v1
kind: Secret
metadata:
  name: test-cert
  namespace: test
type: kubernetes.io/tls
data:
  tls.crt: ***
  tls.key: ***

Gateway 的 listeners 中配置 TLS(HTTPS 或 TLS 协议),tls 字段里引用证书 Secret:

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: test-gw
  namespace: test
spec:
  gatewayClassName: eg
  listeners:
  - name: https
    protocol: HTTPS
    port: 443
    allowedRoutes:
      namespaces:
        from: All
    tls:
      mode: Terminate
      certificateRefs:
      - kind: Secret
        group: ""
        name: test-cert
  - name: tls
    protocol: TLS
    port: 9443
    allowedRoutes:
      namespaces:
        from: All
    tls:
      mode: Terminate
      certificateRefs:
      - kind: Secret
        group: ""
        name: test-cert

能否使用腾讯云上的 SSL 证书?

Gateway 引用的证书是 K8S 的证书 Secret,不能直接使用上传到腾讯云 SSL 证书管理的证书。

可以考虑将 SSL 证书导出为 pem 格式的证书,然后使用 kubectl 命令上传到 K8S 集群。

如何修改 HTTP Header?

HTTPRoute 中使用 RequestHeaderModifier 这个 filter 可以修改 HTTP 请求的 Header。

以下是修改请求 Header 的例子。

:::tip说明

对路径以 /foo 开头的请求修改 Header。

:::

增加 Header(使用 add):

代码语言:yaml
AI代码解释
复制
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  namespace: test
  name: foo-add-header
spec:
  hostnames:
  - test.example.com
  parentRefs:
  - name: test-gw
    namespace: test
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /foo
    filters:
    - type: RequestHeaderModifier
      requestHeaderModifier:
        add:
        - name: my-header-name
          value: my-header-value
    backendRefs:
    - name: foo
      port: 8080

修改 Header(使用 set):

代码语言:yaml
AI代码解释
复制
    filters:
    - type: RequestHeaderModifier
      requestHeaderModifier:
        set:
        - name: my-header-name
          value: my-header-value

删除 Header(使用 remove):

代码语言:yaml
AI代码解释
复制
    filters:
    - type: RequestHeaderModifier
      requestHeaderModifier:
        remove: ["x-request-id"]

如果要改响应的 Header 也是类似的,RequestHeaderModifier 改成 ResponseHeaderModifier 即可:

代码语言:yaml
AI代码解释
复制
    filters:
    - type: ResponseHeaderModifier
      responseHeaderModifier:
        add:
        - name: X-Header-Add-1
          value: header-add-1
        - name: X-Header-Add-2
          value: header-add-2
        - name: X-Header-Add-3
          value: header-add-3

探索更多用法

Gateway API 非常强大,可实现很多复杂的功能,如基于权重、header、cookie 等特征的路由、灰度发布、流量镜像、URL重定向与重写、TLS 路由、GRPC 路由等,更详细的用法参考 Gateway API 官方文档

EnvoyGateway 也支持了 Gateway API 之外的一些特有的高级能力,可参考 EnvoyGateway 官方文档

参考资料

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在 TKE 使用 EnvoyGateway 流量网关
陈鹏,腾讯云容器服务产品架构师,拥有丰富的云原生技术实践经验,同时也是 Kubernetes、Istio 等云原生项目 Contributor,《Kubernetes 实践指南》等电子书作者。
腾讯云原生
2025/02/27
2000
在 TKE 使用 EnvoyGateway 流量网关
K8S 暴露服务的新方法 Gateway API 详解,它有什么优势?
前段时间,Kubernetes SIG-Network[1] 发布了备受期待的 Gateway API 0.5.0 版。主要组件的 Api 正在升级到 beta (v1beta1),这意味着我们很快就会看到更多使用这些原语的项目。
我的小碗汤
2023/03/19
3K0
K8S 暴露服务的新方法 Gateway API 详解,它有什么优势?
Kubernetes Gateway API
初始的 Kubernetes 内部服务向外暴露,使用的是自身的 LoadBlancer 和 NodePort 类型的Service,在集群规模逐渐扩大的时候,这种 Service 管理的方式满足不了我们的需求,比如 NodePort 需要大量的端口难以维护,多了一层NAT,请求量大会对性能有影响;LoadBlancer 需要每个 Service 都有一个外部负载均衡器。接着 Kubernetes 提供了一个内置的资源对象 Ingress API 来暴露 HTTP 服务给外部用户,它的创建是为了标准化的将 Kubernetes 中的服务流量暴露给外部,Ingress API 通过引入路由功能,克服了默认服务类型 NodePort 和 LoadBalancer 的限制。在创建 Ingress 资源的时候通过 IngressClass 指定该网关使用的控制器,主要是靠 Ingress 控制器不断监听 Kubernetes API Server 中 IngressClass 以及 Ingress 资源的的变动,配置或更新入口网关和路由规则。IngressClass实现了网关与后台的解耦,但也有着很多的局限性。Ingress 配置过于简单,只支持 http 和 https 协议的服务路由和负载均衡,缺乏对其他协议和定制化需求的支持,而且 http 路由只支持 host 和 path 的匹配,对于高级路由只能通过注解来实现,当然这取决于 Ingress 控制器的实现方式,不同的 Ingress 控制器使用不同的注解,来扩展功能,使用注解对于 Ingress 的可用性大打折扣;路由无法共享一个命名空间的网关,不够灵活;网关的创建和管理的权限没有划分界限,开发需要配置路由以及网关。当然也有很多第三方的网关组件,例如 istio 和 apisix 等,提供了丰富的流量管理功能,如负载均衡、动态路由、动态 upstream、A/B测试、金丝雀发布、限速、熔断、防御恶意攻击、认证、监控指标、服务可观测性、服务治理等,还可以处理南北流量以及服务之间的东西向流量。对外提供路由功能,对内提供流量筛选,已经很好的满足了当下网络环境的所有需求。但对于小集群来说,这两个网关的部署成本有点高;而且太多类型的网关,不同的配置项、独立的开发接口、接口的兼容性、学习成本、使用成本、维护成本以及迁移成本都很高。急需一种兼容所有厂商 API 的接口网关。所以应运而生,Kubernetes 推出了 Gateway API。Gateway API 是 Kubernetes 1.19 版本引入的一种新的 API 规范,会成为 Ingress 的下一代替代方案。它有着 Ingress 的所有功能,且提供更丰富的功能,它支持更多的路由类型选择,除了 http路由外,还支持 tcp 以及 grpc 路由类型;它通过角色划分将各层规则配置关注点分离,实现规则配置上的解耦;并提供跨 namespace 的路由与网关支持使其更适应多云环境等。与 Ingress Api 工作类似的,Gateway Controller 会持续监视 Kubernetes API Server 中的 GatewayClass 和 Gateway 对象的变动,根据集群运维的配置来创建或更新其对应的网关和路由。API 网关、入口控制器和服务网格的核心都是一种代理,目的在于内外部服务通信。更多的功能并不等于更好的工具,尤其是在 Kubernetes 中,工具的复杂性可能是一个杀手。
政采云前端团队
2023/09/01
8840
Kubernetes Gateway API
Istio 使用 Gateway API 实现流量管理
Gateway API 是由 SIG-NETWORK 社区管理的开源项目,项目地址:https://gateway-api.sigs.k8s.io/。主要原因是 Ingress 资源对象不能很好的满足网络需求,很多场景下 Ingress 控制器都需要通过定义 annotations 或者 crd 来进行功能扩展,这对于使用标准和支持是非常不利的,新推出的 Gateway API 旨在通过可扩展的面向角色的接口来增强服务网络。
我是阳明
2023/12/26
7380
Istio 使用 Gateway API 实现流量管理
Kubernetes Gateway API v1.1 发布:新的标准特性和实验性增强
Kubernetes SIG Network发布 了 Gateway API 的 1.1 版本。这次更新将多个关键特性转移到了标准通道(GA),包括对 服务网格 和 GRPCRoute 的支持。此外,还引入了会话持久性和客户端证书验证等新的实验性特性。
深度学习与Python
2024/06/17
1460
Kubernetes Gateway API v1.1 发布:新的标准特性和实验性增强
Kubernetes Gateway API 深入解读和落地指南
Kubernetes Gateway API 是 Kubernetes 1.18 版本引入的一种新的 API 规范,是 Kubernetes 官方正在开发的新的 API,Ingress 是 Kubernetes 已有的 API。Gateway API 会成为 Ingress 的下一代替代方案。Gateway API 提供更丰富的功能,支持 TCP、UDP、TLS 等,不仅仅是 HTTP。Ingress 主要面向 HTTP 流量。 Gateway API 具有更强的扩展性,通过 CRD 可以轻易新增特定的 Gateway 类型,比如 AWS Gateway 等。Ingress 的扩展相对较难。Gateway API 支持更细粒度的流量路由规则,可以精确到服务级别。Ingress 的最小路由单元是路径。
Rainbond开源
2023/05/06
1.7K0
超越 Gateway API:深入探索 Envoy Gateway 的扩展功能(未完成)
Envoy Gateway 作为 Envoy 的 Ingress Gateway 实现,全面支持了 Gateway API 的所有能力。除此之外,基于 Gateway API 的扩展机制,Envoy Gateway 还提供了丰富的流量管理、安全性、自定义扩展等 Gateway API 中不包含的增强功能。本文将介绍 Envoy Gateway 的 Gateway API 扩展功能,并深入探讨这些功能的应用场景。
赵化冰
2024/09/02
2170
【每日一个云原生小技巧 #38】Kubernetes Gateway
Kubernetes Gateway API 是一组 API 类型,用于提供动态基础设施配置和高级流量路由功能。这些 API 面向角色、协议感知,并可扩展,适用于多种组织角色,如基础设施提供商、集群操作员和应用程序开发者。它们通过定制资源定义,并受到多种实现的支持。
郭旭东
2023/12/06
2350
【每日一个云原生小技巧 #38】Kubernetes Gateway
Ingress 的继任者 —— Gateway API?
在 Kubernetes 集群边缘对外提供网络服务的时候,通常需要借助 Ingress 对象,这个对象提供了暴露 Service 所必须的核心要素,例如基于主机名的路由、对 URL 路径的适配以及 TLS 配置等。但是在实际开放服务的时候,往往会有更多的具体需求,这时 Ingress 对象所提供的核心功能就有些力不从心了,各种 Ingress 控制器往往会使用 metadata.annotations 中的特定注解,来完成对 Ingress 特定行为的控制,完成各自的个性化功能,例如认证、路径变更、黑白名单等,这就让 Ingress 对象变成了一个奇怪的东西:结构化的核心结构,和非结构化的标注结合起来形成各种 Ingress 方言,并且后期还出现了 Traefik Middleware 这样的 CRD 配置,这给 Ingress 功能的集中管理造成了一个较大的困扰;另外 Ingress 中可以随意定制主机名、路径以及后端服务,也给共享集群的用户造成了一定的安全隐患。包括 Cotour、Traefik 在内的 Ingress 控制器后期都提供了各自的基于 CRD 的功能表达,客观上也让 Ingress 世界更为分裂。 例如要移除路径前缀,Nginx Ingress 控制器需要使用 nginx.ingress.kubernetes.io/rewrite-target 注解,而 Traefik 1.7 中则需要使用 traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip 注解。
崔秀龙
2021/07/19
2.2K0
在 TKE 上部署 AI 大模型
本文介绍如何在 TKE 上部署 AI 大模型,以 DeepSeek-R1 为例,使用 Ollama、vLLM 或 SGLang 运行大模型并暴露 API,然后使用 OpenWebUI 提供交互界面。
imroc
2025/02/20
3930
在 TKE 上部署 AI 大模型
超越 Gateway API:深入探索 Envoy Gateway 的扩展功能
作为 Envoy 社区推出的 Ingress Gateway 实现,Envoy Gateway² 全面支持了 Kubernetes Gateway API³ 的所有能力。除此之外,基于 Gateway API 创新的扩展机制,Envoy Gateway 还提供了丰富的流量管理、安全性、自定义扩展等 Gateway API 中并不包含的增强功能。本文将介绍 Envoy Gateway 的 Gateway API 扩展功能,并深入探讨这些功能的应用场景。
Se7en258
2025/05/20
1030
超越 Gateway API:深入探索 Envoy Gateway 的扩展功能
Gateway API 将是 Kubernetes 中流量管理的未来吗?
最近在 Kubernetes 生态中比较大的事情就是 KubeCon NA 2023 成功举办了,会上有很多不错的内容,也有很多重磅消息。目前会议的相关视频已经全部上传完成, 感兴趣的小伙伴可以通过 https://sourl.cn/xTUCvn 观看。
Jintao Zhang
2023/11/27
4410
Gateway API 将是 Kubernetes 中流量管理的未来吗?
一文读懂 Traefik Proxy 3.1 新版本特性
众所周知,Traefik v3.0 的发布标志着这款知名的云原生入口控制器迈入了全新的里程碑。为我们带来了令人振奋的重大更新,其中包括对 WASM、Open Telemetry 和 Kubernetes Gateway API 的支持等关键新功能。这些创新性的加入不仅彰显了 Traefik 在技术领域的引领地位,更为用户带来了前所未有的便利和性能提升。
Luga Lee
2024/11/01
2200
一文读懂 Traefik Proxy 3.1 新版本特性
【腾讯云原生】腾讯云跨账号流量统一接入与治理方案
服务部署在不同腾讯云账号下,想统一在一个腾讯云账号下接入流量,部分流量可能会转发到其它腾讯云账号下的服务。
imroc
2022/08/12
26.1K2
【腾讯云原生】腾讯云跨账号流量统一接入与治理方案
Istio 1.16尝鲜:使用K8s Gateway API代替Istio Ingress Gateway
随着Istio 1.16.0[1]的正式发布,也宣布了 Istio 基于Kubernetes Gateway API[2]的实现进入到了 Beta 阶段,这意味着 Istio 中所有南北向(Ingress)流量管理都可以迁移至 Kubernetes Gateway API。未来随着 Kubernetes Gateway API 的发展和成熟,Istio 东西向(Mesh)流量管理 API 也会被其慢慢代替。
CNCF
2022/11/28
3.4K0
Istio 1.16尝鲜:使用K8s Gateway API代替Istio Ingress Gateway
Envoy Gateway 安全策略介绍: HTTP Basic Authentication
Envoy Gateway 中的安全策略 (SecurityPolicy) 是 Envoy Gateway 对 Kubernetes Gateway API 的一个扩展资源。SecurityPolicy 采用了 Gateway API 的 Policy Attachment 机制来对 Gateway API 进行扩展,为 Envoy Gateway 实现了 CORS,JWT,OIDC,Basic Auth 等强大的安全能力。
赵化冰
2023/11/30
3370
kubernetes 实用技巧: 使用 cert-manager 为 dnspod 的域名签发免费证书
如果你的域名使用 DNSPod 管理,想在 Kubernetes 上为域名自动签发免费证书,可以使用 cert-manager 来实现。
imroc
2021/06/02
2K2
云原生应用负载均衡系列 (2): 入口流量分发、容错与高可用调度
冉昕,腾讯云服务网格TCM产品经理,现负责云原生流量接入网关与应用通信可观测性等产品特性策划与设计工作。 引言 在云原生应用负载均衡系列第一篇文章《云原生应用负载均衡选型指南》介绍了云原生容器环境的入口流量管理使用场景与解决方案,用 Envoy 作为数据面代理,搭配 Istio 作控制面的 Istio Ingress Gateway,在多集群流量分发、安全、可观测性、异构平台支持等方面的综合对比中,是云原生应用流量管理的最佳方案。 在接入层,我们需要配置路由规则、流量行为(超时、重定向、重写、重试等)、
腾讯云原生
2021/07/02
1.9K0
【腾讯云容器服务】使用 TCM 对外暴露 gRPC 服务
gRPC 是长连接服务,而长连接服务负载不均是通病,因为使用四层负载均衡的话,只能在连接调度层面负载均衡,但不能在请求级别负载均衡。不同连接上的请求数量、网络流量、请求耗时、存活时长等可能都不一样,就容易造成不同 Pod 的负载不一样。而 istio 天然支持 gRPC 负载均衡,即在七层进行负载均衡,可以将不同请求转发到不同后端,从而避免负载不均问题,腾讯云容器服务也对 istio 进行了产品化托管,产品叫 TCM,本文介绍如何使用 TCM 来暴露 gRPC 服务。
imroc
2022/07/13
1.4K0
K8S 生态周报| containerd 存在 bug 会导致 Pod 被重启,建议升级
这是 2023 年的第一篇『K8S 生态周报』,在上个月的月中之后我因为阳了就停止更新了,一直在修养身体。生病相关的内容我在上一篇文章 张晋涛:我的 2022 总结 | MoeLove有做介绍。愿大家都注意身体,保持健康。
Jintao Zhang
2023/02/26
7810
K8S 生态周报| containerd 存在 bug 会导致 Pod 被重启,建议升级
推荐阅读
相关推荐
在 TKE 使用 EnvoyGateway 流量网关
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档