高可用微服务网关架构:Nacos + Higress 一体化部署方案

内容分享1个月前发布
0 0 0

高可用微服务网关架构:Nacos + Higress 一体化部署方案

用于生产的落地指南:架构设计、Helm / Kubernetes 可复制命令、关键 values.yaml 示例(可直接拷贝到生产前先替换 secret 与环境特定字段)、运维/监控/安全/备份与故障排查 Runbook,以及可信来源引用。关键事实(Higress 支持 Nacos、Nacos 集群与外部 MySQL 等)均标注了官方/权威出处以便核验。(GitHub, Higress, Nacos 官网, 阿里云)


概要(快速读)

目标:在 Kubernetes 上以高可用方式部署 Nacos(注册与配置中心) 与 Higress(云原生网关),实现服务发现、路由/流量治理、配置热更新与统一运维。核心思想:Nacos 做“电话簿 + 配置仓库”,Higress 做“统一流量入口 + 可观测 & 安全治理”,二者深度集成,实现配置与服务的实时联动。(GitHub, Higress)


目录

核心组件回顾高可用架构与 mermaid 可视化先决条件(Prereqs)部署顺序与操作命令(Helm + values.yaml 示例)Nacos (StatefulSet + 外部 MySQL + PVC)Higress (Controller + Gateway + Nacos discovery/config backend)关键配置详解(健康检查、probes、replicas、LB 类型、namespace)观测、Tracing 与 日志集成(Prometheus / SkyWalking / EFK)安全设计(TLS/mTLS、Secrets 管理、NetworkPolicy)备份、升级、演练与恢复步骤(Runbook)常见故障与快速排查清单推荐最佳实践 & 运维建议(GitOps、灰度、演练)参考资料(官方 / 社区文档)


1. 核心组件(简洁版)

Higress:云原生网关(control plane + data plane),支持从多种注册中心(包括 Nacos)发现服务,支持路由、WAF、mTLS、Wasm/Lua 扩展、Prometheus metrics 与 SkyWalking 等可观测集成。(GitHub, Higress)Nacos:服务注册发现 + 配置管理;生产应以集群(StatefulSet)+ 外部 MySQL 持久化为推荐模式,以保证数据可靠性与可恢复性。(Nacos 官网)


2. 高可用架构

高可用微服务网关架构:Nacos + Higress 一体化部署方案

设计要点:

Gateway 多副本(至少 2-3),Controller 多副本(至少 2)。Nacos 使用 StatefulSet 集群(至少 3 节点)并连接外部 MySQL;数据 PVC 与外部 DB 保证持久化。(Nacos 官网)


3. 先决条件(Prereqs)

Kubernetes 集群(建议 v1.24+;生产多可用区)。Helm 3 CLI。持久化存储(云盘 / NFS 等)支持 PVC。可选:外部 MySQL 高可用(主从/主主或云 RDS)。Nacos 推荐连外部 DB 而非嵌入式。(Nacos 官网)


4. 部署顺序与具体操作

4.1 部署 Nacos(示例:Helm + values)

说明:各 Helm chart 名称/源视你选择的 chart 而定(community / vendor),请使用审计过的仓库。下面示例以常见字段为主,生产前请替换 secret 引用、storageClass 与 DB 地址。(artifacthub.io)



# 添加并更新 helm repo(示例)
helm repo add nacos https://charts.example.com/nacos
helm repo update
 
# 安装(使用你自己的 values)
helm install nacos nacos/nacos -n nacos --create-namespace -f nacos-values.yaml

示例 nacos-values.yaml:



replicaCount: 3
 
persistence:
  enabled: true
  storageClass: "gp2"    # 根据环境替换
  size: 20Gi
 
externalDatabase:
  enabled: true
  host: my-mysql-primary.my-db.svc.cluster.local
  port: 3306
  user: nacos
  passwordSecret: nacos-mysql-secret  # 存放在 k8s secret
  dbName: nacos_config
 
# readiness/liveness probes(示例)
readinessProbe:
  httpGet:
    path: /nacos/v1/console/health
    port: 8848
  initialDelaySeconds: 30
  periodSeconds: 10

注意

Nacos cluster 模式部署(StatefulSet + PVC)是生产推荐做法。(Nacos 官网)备份 MySQL 并定期导出 Nacos 配置。

4.2 部署 Higress(示例:Helm + values)

Higress 支持用 Helm 一键部署 control plane 与 gateway。请用官方 helm chart。(Higress)



helm repo add higress https://higress.io/helm-charts
helm repo update
 
helm install higress higress/higress -n higress-system --create-namespace -f higress-values.yaml

示例 higress-values.yaml:



controller:
  replicaCount: 2
  resources:
    requests:
      cpu: 500m
      memory: 512Mi
 
gateway:
  replicaCount: 3
  service:
    type: LoadBalancer   # 或 NodePort/ClusterIP + 外部 SLB
  readinessProbe:
    httpGet:
      path: /healthz
      port: 8080
    initialDelaySeconds: 5
    periodSeconds: 10
 
# 启用 Nacos 服务发现
discovery:
  nacos:
    enabled: true
    serverAddr: "nacos.nacos.svc.cluster.local:8848"
    namespace: "public"
    # type: "nacos2" # 若使用 Nacos v2 并使用 gRPC 协议可设置,参考 Higress 文档
 
# 把 Higress 的配置存储到 Nacos(可选)
config:
  backend: nacos
  nacos:
    serverAddr: "nacos.nacos.svc.cluster.local:8848"
    namespace: "public"
    dataId: "higress"
    group: "DEFAULT_GROUP"
 
# SkyWalking 集成(示例)
observability:
  skywalking:
    enabled: true
    oapAddress: "skywalking.oap.svc.cluster.local:11800"

说明与建议

Higress 能作为微服务网关,从 Nacos 拉取服务信息;建议使用 Nacos v2 的 gRPC 模式(更快、资源占用更少)如 Higress 文档所述。(Higress)Gateway 使用 LoadBalancer(云环境)或 NodePort+SLB(裸金属 + MetalLB)对外暴露,设置合理的 liveness/readiness。(Higress)


5. 关键配置详解(快速清单)

replicas:Gateway ≥3(或 ≥2 跨节点),Controller ≥2。probes:liveness/readiness 配置防止接收流量到不可用 Pod。service.type:云上推荐 LoadBalancer;裸金属用 MetalLB 或 NodePort+外部 SLB。持久化:Nacos PVC + 外部 MySQL(主推荐)。(Nacos 官网)配置来源:Higress 支持将路由/策略放入 Nacos,使配置热生效(或用 CRD 管理,两者选其一并保持一致)。(Higress)


6. 观测 / Tracing / 日志(建议集成)

Prometheus:抓取 Higress 的 metrics(Envoy + Controller 指标)。Tracing:集成 SkyWalking(阿里生态常用),或 Zipkin / Jaeger。Higress 官方示例常推荐 SkyWalking。(Higress, skywalking.apache.org)日志:收集 Envoy access log + Controller pod logs 到 EFK/ELK。告警:配置报警(请求延时、错误率、Nacos 节点数、DB 连接异常)。


7. 安全策略(要点)

TLS(外部):对外使用 TLS(证书可通过 cert-manager 管理并注入到 Higress)。mTLS(内部):网关与后端服务之间可启用 mTLS(Higress 支持双向 TLS),提高内部安全。Secrets 管理:不要在 Helm values 明文写 DB 密码/证书,使用 Kubernetes Secret / External Secrets / Vault。NetworkPolicy / RBAC:限制 Pod 间网络访问,仅允许 Higress controller/gateway 访问 Nacos、SkyWalking、后端 DB 等必要服务。


8. 备份、升级与恢复 Runbook(核心步骤)

8.1 备份

MySQL(Nacos 的元数据):定期做整库备份(物理或 logical dump),并验证恢复。Nacos 配置导出:定期导出配置(可写脚本调用 Nacos API)。Higress CRD / Git:将所有路由/CRD 存在 Git(GitOps),便于审计与回滚。(阿里云)

8.2 升级(示例)

在 staging 做完整升级演练(Helm upgrade,先 controller,再 gateway)。对 Nacos StatefulSet 做滚动升级(确保 raft leader 与 quorum 稳定)。监控指标(节点数、请求错误率、DB 连接)无异常后推广到 prod。

8.3 恢复(Nacos 主库损坏示例)

停止 Nacos 写流量(临时置灰网关或流量入口)。从最近 MySQL 备份恢复数据库到新实例(或原实例)。启动 Nacos 节点并验证集群健康(raft quorum 恢复)。恢复流量并密切监控。


9. 常见故障与排查清单(快速)

Nacos 节点频繁重启 → 检查 PVC、磁盘 I/O、MySQL 连接与 JVM OOM。Higress 无法发现服务 → 检查 Higress 到 Nacos 网络连通性、serverAddr、namespace、dataId 配置是否一致。(Higress)网关 5xx/高延时 → 检查 Envoy access log、后端实例健康、超时与连接池配置。配置下发不生效 → 确认配置是写入 Nacos (若采用 Nacos backend)还是 CRD 管理,二者路径不同。(Higress)


10. 运维自动化与最佳实践(推荐)

GitOps(ArgoCD/Flux):CRD、路由定义、values.yaml 放 Git,自动化部署与回滚。Secrets 管理:用 External Secrets / HashiCorp Vault。灰度与实验:使用 Higress 的路由权重、header、cookie 做灰度与金丝雀发布。定期演练:灾备恢复演练(Nacos DB 恢复、Higress 升级回滚演练)。使用 Nacos gRPC(nacos2)模式:若可使用 Nacos v2,优先使用 gRPC 模式以减少资源消耗并加速服务变更感知(参考 Higress 的 Nacos 集成文档)。(Higress)


11. 可直接复制的产出(你之前让我列选的我都整合在这里)

11.1 完整 Nacos values.yaml(生产就绪示例,替换 Secrets/DB 地址)

(见 4.1 的示例 nacos-values.yaml;在生产请把 passwordSecret 指向 k8s Secret,并用 PV/StorageClass 替换 gp2)

11.2 完整 Higress values.yaml(含 Nacos discovery、SkyWalking、gateway probes)

(见 4.2 的示例 higress-values.yaml;在生产替换 observability、oap 地址、LoadBalancer annotations 以及 secretRefs)

11.3 可直接 kubectl apply -f 的最小 Nacos / Higress 测试 YAML(建议用于 dev 环境先验收)

最小可运行 demo YAML 放下面以便你快速在 dev 环境做 smoke-test(注意:仅用于测试,生产请使用 Helm + 外部 DB + PVC 等):



# nacos-demo-pvc.yaml (示例,dev only)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nacos-data
  namespace: nacos
spec:
  accessModes: ["ReadWriteOnce"]
  storageClassName: "standard"
  resources:
    requests:
      storage: 5Gi
---
# nacos-demo-statefulset.yaml (very minimal, dev only)
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nacos
  namespace: nacos
spec:
  serviceName: "nacos"
  replicas: 1
  selector:
    matchLabels:
      app: nacos
  template:
    metadata:
      labels:
        app: nacos
    spec:
      containers:
      - name: nacos
        image: nacos/nacos-server:2.2.0
        ports:
        - containerPort: 8848
        volumeMounts:
        - name: nacos-data
          mountPath: /home/nacos/data
  volumeClaimTemplates:
  - metadata:
      name: nacos-data
    spec:
      accessModes: ["ReadWriteOnce"]
      storageClassName: "standard"
      resources:
        requests:
          storage: 5Gi
---
# higress-demo-deployment.yaml (dev only)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: higress-controller
  namespace: higress-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: higress-controller
  template:
    metadata:
      labels:
        app: higress-controller
    spec:
      containers:
      - name: controller
        image: higress/controller:latest
        ports:
        - containerPort: 8080

(上面 YAML 仅作演示。生产强烈建议使用 Helm charts、StatefulSet 3 节点、外部 MySQL 与 PVC。)


12. 常见问题(FAQ)

Q:Higress 支持 Nacos 吗?
A:是的,Higress 支持将 Nacos 作为服务发现源与配置 backend,且支持 Nacos v2 的 gRPC 模式以提高变更感知效率。详见 Higress 文档。(Higress)Q:Nacos 在 K8s 上如何高可用?
A:建议以 StatefulSet 部署 3 节点以上集群,并使用外部 MySQL 持久化服务/配置元数据。(Nacos 官网)Q:如何保证配置热更新?
A:把 Higress 的路由/插件配置放入 Nacos(或由 Higress Controller 动态管理 CRD),Higress 会监听 Nacos 变化并热生效。(Higress)

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...