找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

667

积分

1

好友

83

主题
发表于 前天 07:43 | 查看: 7| 回复: 0

在云原生架构中,服务网格和 API 网关是构建现代化微服务的关键组件。作为 CNCF 毕业项目 Envoy 的官方子项目,Envoy Gateway (EG) 凭借其与 Kubernetes 原生 API(Gateway API)的深度集成,正成为新一代网关的重要选择。本文将指导你从零开始,部署并配置 Envoy Gateway,并通过一个完整示例快速掌握其核心用法。

Envoy Gateway 架构示意图

前提条件

  • 一个可用的 Kubernetes 集群。
  • 客户端已安装并配置好 kubectl 命令行工具。
  • 已部署 Envoy Gateway 控制平面。若未部署,可参考相关部署指南进行安装。作为云原生生态中的重要一环,掌握其部署是第一步。

部署示例 Web 应用

  1. 部署简单 Web 应用 首先,我们创建一个简单的 Deployment 和 Service 作为后端服务。

    cat << 'EOF' | kubectl apply -f -
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: simple
    spec:
      selector:
        matchLabels:
          app: simple
      template:
        metadata:
          labels:
            app: simple
        spec:
          containers:
          - image: core.jiaxzeng.com/jiaxzeng/simple:v1.4.3
            imagePullPolicy: Always
            name: simple
          imagePullSecrets:
          - name: harbor-admin-secret
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: simple
    spec:
      selector:
        app: simple
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 8090
    EOF
  2. 验证服务 部署完成后,验证服务是否正常运行。

    $ kubectl get svc simple
    NAME     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
    simple   ClusterIP   10.105.166.245   <none>        80/TCP    3m39s
    
    $ curl 10.105.166.245:80/version
    {"BuildTime":"2025-09-11","CommitID":"668bb13195e51a0020c416901a3c5ef38264b945","Version":"v1.4.3"}

通过 Envoy Gateway 暴露服务

  1. 创建 GatewayClass 资源 GatewayClass 定义了共享配置的网关类。如果集群中已存在,可忽略此步。

    cat << 'EOF' | kubectl apply -f -
    apiVersion: gateway.networking.k8s.io/v1
    kind: GatewayClass
    metadata:
      name: envoy-proxy-gwc
    spec:
      # 此值需与 Envoy Gateway 控制器配置中的 `gateway.controllerName` 参数一致
      controllerName: gateway.envoyproxy.io/gatewayclass-controller
    EOF
  2. 创建 Gateway 资源 Gateway 资源在特定命名空间中实例化一个网关,并配置监听器。

    cat <<'EOF' | kubectl apply -f -
    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: simple-gw
    spec:
      # 关联上述创建的 GatewayClass
      gatewayClassName: envoy-proxy-gwc
      # 配置 Envoy 监听端口
      listeners:
      - name: http
        protocol: HTTP
        port: 80
    EOF

    提示

    • Gateway 资源是命名空间级别的。
    • 此处配置 Envoy 监听 80 端口,但外部访问的实际端口由对应的 Service 类型决定(如 NodePort 或 LoadBalancer)。
  3. 配置流量路由 (HTTPRoute) HTTPRoute 资源定义了如何将到达网关的流量路由到后端服务。

    cat <<'EOF' | kubectl apply -f -
    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: simple
    spec:
      # 关联对应的 Gateway
      parentRefs:
      - name: simple-gw
      # 配置访问规则:将指定域名的流量路由到后端服务
      hostnames:
      - "simple.jiaxzeng.com"
      rules:
      - backendRefs:
         - group: ""
           kind: Service
           name: simple
           port: 80
        matches:
        - path:
            type: PathPrefix
            value: /
    EOF
  4. 验证网关配置 配置完成后,查看 Envoy Proxy Pod 和对应的 Service,获取访问地址。

    # 获取 Envoy Proxy Pod 的 IP
    $ kubectl -n envoy-gateway-system get pod -owide -l gateway.envoyproxy.io/owning-gateway-name=simple-gw
    NAME                                                             READY   STATUS    RESTARTS   AGE   IP              NODE
    envoy-default-simple-gw-d9e70e75-56689dbc76-8828x               2/2     Running   0          26m   10.244.85.208   k8s-node01
    
    # 获取网关服务的外部访问端口(本例为 NodePort)
    $ kubectl -n envoy-gateway-system get svc -l gateway.envoyproxy.io/owning-gateway-name=simple-gw
    NAME                                       TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    envoy-default-simple-gw-d9e70e75           LoadBalancer   10.96.93.31   <pending>     80:30874/TCP   25m

    根据上述信息,可以通过 http://<Node_IP>:30874 并设置 Host 头为 simple.jiaxzeng.com 来访问您的应用,这与许多传统 Ingress 控制器的使用体验相似,但底层是基于更现代、更灵活的 Gateway API 标准。

网关路由验证示意图

结语

Envoy Gateway 以 Gateway API 为核心,将 Envoy 高性能的代理能力与 Kubernetes 的原生化管理体验深度融合,显著降低了在云原生环境中部署和管理现代化 API 网关的复杂度。无论是为全新项目进行技术选型,还是计划渐进式地替换现有的 Ingress 控制器,Envoy Gateway 都是一个极具潜力和价值的选择。




上一篇:SpringBoot3懒加载实战应用:优化启动性能与Bean管理配置详解
下一篇:大模型分布式训练中AllReduce算法优化:原理与性能对比
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-11 02:06 , Processed in 0.083534 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表