当前位置: 首页 > news >正文

K8s-服务发布进阶

目录

Ingress组成

Ingress Controller 选型对比

Ingress Controller

 核心定义

工作原理

动态监听与配置

流量转发流程

常见 Ingress Controller 实现

(1) Nginx Ingress Controller

Traefi

Istio Ingress Gateway

云厂商专用 Controller

核心功能对比

lngress工作原理

核心组件与角色

完整工作流程

用户创建 Ingress 资源

Ingress Controller 监听并处理变化

负载均衡器热重载配置

外部流量转发

关键细节解析

(1) 路径匹配策略

(2) TLS 终止

(3) 注解(Annotations)扩展功能

(4) 多域名与多路径

不同 Ingress Controller 的差异


Ingress组成

在 Kubernetes 中,Ingress 是服务发布进阶的核心组件,它通过统一的入口管理外部流量到集群内部服务的路由,支持基于域名、路径的精细化控制,并提供负载均衡、SSL 终止、流量重定向等高级功能。

  1. 统一流量入口
    • 通过单个 IP 或域名暴露多个服务,避免为每个服务单独配置 LoadBalancer 或 NodePort,简化集群外部访问管理。
    • 示例:一个域名下通过路径 /api 和 /web 分别路由到不同后端服务。
  2. 基于域名和路径的路由
    • 支持精确匹配(Exact)或前缀匹配(Prefix),实现微服务架构下的流量拆分。
    • 示例配置:
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
      name: example-ingress
      spec:
      rules:
      - host: "api.example.com"
      http:
      paths:
      - path: /v1
      pathType: Prefix
      backend:
      service:
      name: v1-service
      port:
      number: 80
      - host: "web.example.com"
      http:
      paths:
      - path: /
      pathType: Prefix
      backend:
      service:
      name: web-service
      port:
      number: 80
  3. 负载均衡与高可用
    • Ingress Controller(如 Nginx、Traefik)内置负载均衡算法(轮询、加权轮询等),自动分发流量到后端 Pod,提升服务可用性。
  4. SSL/TLS 终止
    • 集中管理 HTTPS 证书,解密请求后转发明文流量到后端服务,减轻后端负担。
    • 示例:通过 Secret 引用证书:
      spec:
      tls:
      - hosts:
      - example.com
      secretName: example-tls-secret
  5. 流量重定向与重写
    • 支持 HTTP 到 HTTPS 的强制跳转(ssl-redirect)、路径重写(rewrite-target)等,满足复杂业务需求。
    • 示例:将 /old-path 重写为 /new-path
      metadata:
      annotations:
      nginx.ingress.kubernetes.io/rewrite-target: /new-path

Ingress Controller 选型对比

Controller优势适用场景
Nginx Ingress官方维护,社区活跃,功能稳定;支持丰富的注解(如重写、限流、CORS)。传统 Web 服务、微服务架构。
Traefik动态配置自动发现,支持 Docker/K8s 原生集成;内置 Dashboard 监控。云原生环境、需要快速迭代的场景。
Istio Ingress与 Service Mesh 深度集成,支持流量镜像、熔断、灰度发布等高级流量管理。复杂微服务治理、需要观测性的场景。
ALB Ingress (AWS)云原生负载均衡器,支持 WebSocket、HTTP/2;按请求量计费,成本优化。AWS 云环境,大规模流量场景。

推荐选择

  • 通用场景:Nginx Ingress(功能全面,生态成熟)。
  • 云原生环境:Traefik(轻量级,动态配置)。
  • 复杂流量治理:Istio Ingress(结合 Service Mesh)。

Ingress Controller

Ingress Controller 是 Kubernetes 中实际执行 Ingress 资源规则的核心组件,它负责监听集群内 Ingress 对象的变化,并根据定义的路由规则(如域名、路径、TLS 终止等)动态配置底层负载均衡器(如 Nginx、Envoy 等),将外部流量转发到集群内部的服务。

 核心定义

  • 角色:Ingress Controller 是 Kubernetes 的“流量网关”,充当集群外部流量与内部服务之间的桥梁。
  • 与 Ingress 的关系
    • Ingress 资源:定义流量路由规则(如“将 app.example.com/api 转发到 api-service”)。
    • Ingress Controller:解析这些规则并实际转发流量(如配置 Nginx 的 server 和 location 块)。

类比

  • Ingress 像“交通规则手册”,定义了车辆(流量)如何行驶。
  • Ingress Controller 像“交通警察”,根据规则指挥车辆(转发请求)。

工作原理

动态监听与配置

  1. 监听 Ingress 变化
    Ingress Controller 通过 Kubernetes API 监听 IngressServiceEndpoint 等资源的变化(如新增、删除、更新)。
  2. 生成配置文件
    根据 Ingress 规则动态生成负载均衡器的配置文件(如 Nginx 的 nginx.conf、Traefik 的静态配置)。
  3. 热重载配置
    无需重启,直接加载新配置(如 Nginx 通过 nginx -s reload)。

流量转发流程

  1. 外部请求到达
    用户访问 https://app.example.com/api,DNS 解析到 Ingress Controller 的外部 IP(如 LoadBalancer 或 NodePort)。
  2. 匹配 Ingress 规则
    Ingress Controller 根据域名(app.example.com)和路径(/api)找到对应的 Ingress 资源。
  3. 选择后端服务
    通过 Ingress 中定义的 backend(如 api-service:80)找到目标 Service。
  4. 负载均衡转发
    根据负载均衡算法(如轮询、IP 哈希)将请求转发到 Service 对应的 Pod。

常见 Ingress Controller 实现

(1) Nginx Ingress Controller

  • 特点
    • 官方维护,社区活跃,功能全面。
    • 支持丰富的注解(如重写路径、限流、CORS、WebSocket)。
    • 适合传统 Web 服务和微服务架构。
  • 部署方式
    • 通过 DaemonSet(每个节点部署一个 Pod)或 Deployment(可伸缩)。
    • 示例命令:
      kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml

Traefi

  • 特点
    • 轻量级,动态配置自动发现(无需手动重启)。
    • 内置 Dashboard 监控,支持 Docker/K8s 原生集成。
    • 适合云原生环境和快速迭代的场景。
  • 部署方式
    • 通过 Helm Chart 安装:
      helm repo add traefik https://traefik.github.io/charts
      helm install traefik traefik/traefik

Istio Ingress Gateway

  • 特点
    • 与 Istio Service Mesh 深度集成,支持高级流量治理(如熔断、灰度发布、流量镜像)。
    • 基于 Envoy 代理,提供强大的可观测性(Metrics、Tracing、Logging)。
    • 适合复杂微服务架构和需要精细化流量控制的场景。
  • 部署方式
    • 作为 Istio 的一部分安装:
      istioctl install --set profile=demo -y
      kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.19/samples/addons/prometheus.yaml

云厂商专用 Controller

  • AWS ALB Ingress Controller
    • 直接管理 AWS Application Load Balancer (ALB),支持 WebSocket、HTTP/2。
    • 按请求量计费,适合大规模流量场景。
  • GCP GCE Ingress Controller
    • 集成 Google Cloud Load Balancer,支持全局负载均衡。

核心功能对比

功能Nginx IngressTraefikIstio Ingress
负载均衡算法轮询、IP 哈希等轮询、加权轮询轮询、随机、最少连接
TLS 终止支持支持支持
路径重写支持(注解)支持支持(VirtualService)
流量镜像不支持不支持支持
熔断限流通过注解(有限支持)通过 Middleware支持(DestinationRule)
可观测性基础 Metrics内置 Dashboard集成 Prometheus/Grafana
部署复杂度中等高(需配合 Istio)

lngress工作原理

Ingress 是 Kubernetes 中管理外部流量进入集群的核心机制,其工作原理涉及多个组件的协同,包括 Ingress 资源Ingress Controller底层负载均衡器(如 Nginx、Envoy)以及 Kubernetes 的 Service/Endpoint 机制

核心组件与角色

组件角色
Ingress 资源定义流量路由规则(如域名、路径、TLS 终止、后端服务等)。
Ingress Controller监听 Ingress 变化,动态生成负载均衡器配置(如 Nginx 的 nginx.conf)。
负载均衡器实际转发流量的代理(如 Nginx、Envoy、Traefik)。
Service/Endpoint提供后端服务的集群内访问地址(ClusterIP + Pod IP 列表)。

完整工作流程

用户创建 Ingress 资源

  1. 定义路由规则
    用户通过 YAML 文件创建 Ingress 资源,指定域名、路径和后端服务。
    示例

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:name: example-ingress
    spec:rules:- host: "app.example.com"http:paths:- path: /apipathType: Prefixbackend:service:name: api-serviceport:number: 80
  2. Ingress 存入 etcd
    Kubernetes API Server 将 Ingress 资源持久化到 etcd 数据库。


Ingress Controller 监听并处理变化

  1. 监听 Ingress 事件
    Ingress Controller(如 Nginx Ingress)通过 Informer 机制 监听 Kubernetes API,捕获 IngressServiceEndpoint 等资源的创建/更新/删除事件。

  2. 生成配置模板
    Controller 根据 Ingress 规则生成负载均衡器的配置模板。例如:

    • Nginx:生成 server 和 location 块,匹配域名和路径。
    • Traefik:动态创建 Router 和 Service 配置。
    • Istio:生成 VirtualService 和 Gateway 资源。
  3. 填充后端信息
    Controller 查询 Service 对应的 Endpoint(即健康 Pod 的 IP 和端口),将动态后端信息填入配置。
    示例

    # Nginx 生成的配置片段
    server {listen 80;server_name app.example.com;location /api {proxy_pass http://10.244.1.5:8080;  # Pod IP:Portproxy_pass http://10.244.2.3:8080;  # 多副本 Pod}
    }

负载均衡器热重载配置

  1. 无中断更新
    Controller 通过信号或 API 触发负载均衡器重新加载配置(如 Nginx 的 nginx -s reload),无需重启进程。

  2. 健康检查
    负载均衡器定期检查后端 Pod 的健康状态(通过 readinessProbe),自动剔除不健康的 Pod。


外部流量转发

  1. 用户请求到达
    用户访问 http://app.example.com/api,DNS 解析到 Ingress Controller 的外部 IP(如 LoadBalancer 或 NodePort)。

  2. 匹配 Ingress 规则
    Ingress Controller 根据域名和路径找到对应的 Ingress 资源,确定目标 Service。

  3. 负载均衡转发
    根据配置的算法(如轮询、IP 哈希)将请求转发到 Service 对应的健康 Pod。


关键细节解析

(1) 路径匹配策略

  • Prefix:路径前缀匹配(如 /api 匹配 /api/v1)。
  • Exact:精确路径匹配(如 /api 仅匹配 /api)。
  • ImplementationSpecific:由具体 Controller 实现(如 Nginx 默认使用前缀匹配)。

(2) TLS 终止

  1. 用户创建 TLS Secret

    apiVersion: v1
    kind: Secret
    metadata:name: example-tls-secret
    type: kubernetes.io/tls
    data:tls.crt: <base64-encoded-cert>tls.key: <base64-encoded-key>
  2. Ingress 引用 Secret

    spec:tls:- hosts:- app.example.comsecretName: example-tls-secret
  3. Controller 配置 HTTPS
    Nginx Controller 会生成包含 SSL 证书的 server 块,终止 HTTPS 并转发 HTTP 到后端。

(3) 注解(Annotations)扩展功能

  • Nginx 注解示例
    metadata:annotations:nginx.ingress.kubernetes.io/rewrite-target: "/new-path"  # 路径重写nginx.ingress.kubernetes.io/ssl-redirect: "true"         # 强制 HTTPSnginx.ingress.kubernetes.io/limit-rps: "10"             # 限流

(4) 多域名与多路径

  • 单个 Ingress 支持多规则
    spec:rules:- host: "app1.example.com"http:paths:- path: /backend: { service: app1-service, port: 80 }- host: "app2.example.com"http:paths:- path: /backend: { service: app2-service, port: 80 }

不同 Ingress Controller 的差异

特性Nginx IngressTraefikIstio Ingress
配置更新方式热重载 nginx.conf动态 Router 发现通过 VirtualService 更新
流量治理基础负载均衡支持 Middleware(限流、重试)熔断、灰度发布、流量镜像
可观测性基础 Metrics内置 Dashboard集成 Prometheus/Grafana
适用场景传统 Web 服务云原生、快速迭代复杂微服务架构
http://www.lryc.cn/news/581976.html

相关文章:

  • Web后端开发-分层解耦
  • 02 除了前面常见图表,还有许多更细分或专业的可视化类型,尤其是在特定领域(如金融、工程、生物信息等)。
  • Java学习第二十部分——EasyMock
  • FastAPI依赖注入:构建高可维护API的核心理念与实战
  • 【每日算法】专题六_分治 - 快速排序
  • 如何设计一个“真正可复用”的前端组件?
  • 上海新华医院奉贤院区:以元宇宙技术重构未来医疗生态
  • 气候大模型的演化路径与产业落地展望:AI重构全球气候科学的新范式
  • 在线学堂-4.媒资管理模块(三)
  • OSPF路由过滤
  • 【实战】Dify从0到100进阶--Dify与Langchain-chatchat对比研究
  • 【iOS设计模式】深入理解MVC架构 - 重构你的第一个App
  • iOS Widget 开发-1:什么是 iOS Widget?开发前的基本认知
  • 动手学深度学习13.6. 目标检测数据集-笔记练习(PyTorch)
  • DSP学习笔记2
  • 轨迹优化 | 基于激光雷达的欧氏距离场ESDF地图构建(附ROS C++仿真)
  • 7月份最新代发考试战报:思科CCNP 华为HCIP HCSP 售前售后考试成绩单
  • 网络安全之XSS漏洞:原理、危害与防御实践
  • 南柯电子|显示屏EMC整改:工业屏与消费屏的差异化策略
  • 接口漏洞怎么抓?Fiddler 中文版 + Postman + Wireshark 实战指南
  • 告别Root风险:四步构建安全高效的服务器管理体系
  • AJAX vs axios vs fetch
  • 【算法笔记】5.LeetCode-Hot100-矩阵专项
  • 腾讯云录音文件快速识别实战教程
  • Java后端技术博客汇总文档
  • 无人机声学探测模块技术分析!
  • 【C++开源库使用】使用libcurl开源库发送url请求(http请求)去下载用户头像文件(附完整源码)
  • RESTful API概念和设计原则
  • Ubunt20.04搭建GitLab服务器,并借助cpolar实现公网访问
  • 01、通过内网穿透工具把家中闲置电脑变成在线服务器