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

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.xdnf.cn/news/14924.html

相关文章:

  • 分布式事务解决方案(二)
  • 电信、移动、联通、广电跨运营商网速慢原因
  • Linux国产与国外进度对垒
  • 408第三季part2 - 计算机网络 - 传输层
  • C++高频知识点(二)
  • std::vector<bool>有什么特殊的吗
  • 植物大战僵尸杂交重制版1.0,经典焕新,重燃策略塔防之火
  • 极简的神经网络反向传播例子
  • Vue计算属性(computed)全面解析:原理、用法与最佳实践
  • Web攻防-XMLXXE上传解析文件预览接口服务白盒审计应用功能SRC报告
  • 【Python】文件应用: 查找读取的文件内容
  • list和list中的注意事项
  • 使用ADSL接入Internet,用户端需安装什么协议?
  • Kubernetes 集群相关规范
  • 手机电工仿真软件更新了
  • 让你的asp.net网站在调试模式下也能在局域网通过ip访问
  • NLP之文本纠错开源大模型:兼看语音大模型总结
  • bottles安装网易云出现的问题01中文出现乱码问题
  • JavaScript基础语法之运算符和控制流
  • 程序员在线接单
  • 记录一点开发技巧
  • 七牛云前端面试题及参考答案 (上)
  • 隐马尔可夫模型(HMM):观测背后的状态解码艺术
  • 动手学深度学习-学习笔记【二】(基础知识)
  • 编程中的英语
  • 【C语言刷题】第十一天:加量加餐继续,代码题训练,融会贯通IO模式
  • cloudflare配合github搭建免费开源影视LibreTV一个独享视频网站 详细教程
  • HarmonyOS学习2---工程目录UIAbility
  • rk3128 emmc显示剩余容量为0
  • C++ 模板参数匹配、特化