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

什么是 Apache Ingress

Apache Ingress 主要用于管理来自外部的 HTTP 和 HTTPS 流量,并将其路由到合适的 Kubernetes 服务。

容器化与 Kubernetes 是现代云原生应用程序的基础。Kubernetes 的主要职责是管理容器集群,确保它们的高可用性和可扩展性,同时还提供自动化的部署和运维功能。然而,Kubernetes 本身并不能直接处理外部的流量。要解决这个问题,Ingress 资源应运而生。

Ingress 资源在 Kubernetes 中定义的是从集群外部访问服务的策略。通过 Ingress,可以定义 HTTP 和 HTTPS 路由规则,让外部流量能够正确地到达内部服务。而 Apache Ingress Controller 是一种具体的实现,它实际上是一个负载均衡器,读取 Ingress 资源中的配置,并按照这些规则进行流量分发。
https://apisix.apache.org/docs/ingress-controller/getting-started/

现代企业往往采用微服务架构,将大型应用拆分成多个单独的服务。每个服务可以独立开发、部署和扩展。而 Kubernetes 通过部署不同的 Pod(容器的最小单位),使得这些微服务能够在同一个集群内运行和管理。但是,这些 Pod 都有自己独立的 IP 地址,而且这些地址可能会动态变化,这就带来了服务发现和流量分发的问题。Ingress 正是为解决这一问题而设计的。

举个实际的例子,假如我们要部署一个电商网站,包含了多个微服务:用户认证服务、商品展示服务、订单处理服务等。这些服务都运行在同一个 Kubernetes 集群中。为了让用户能够访问这些微服务,可以创建一个 Ingress 资源来定义路由规则。比方说,将 /login 路由到用户认证服务,将 /products 路由到商品展示服务,将 /checkout 路由到订单处理服务。

Apache Ingress Controller 通常与反向代理服务器或负载均衡器配合使用,例如 NGINX、Traefik 或 HAProxy。当外部请求到达时,Ingress Controller 将根据预先定义的规则,将流量分发到相应的后端服务。在这个过程中,Ingress Controller 还可以处理 SSL 终止、安全策略以及重定向等功能。

要理解 Ingress 的操作方式和优势,可以借助一个真实世界的案例研究。例如,Netflix 作为一家大规模在线流媒体服务提供商,其系统架构中包含数以千计的微服务。这样一个复杂的系统架构需要一个高效的流量管理方案。通过使用 Kubernetes 和 Ingress 控制器,Netflix 可以实现对外部流量的精细化控制,将用户请求可靠地路由到相应的微服务,从而保证了高效和稳定的服务体验。

从技术细节上来看,Ingress 资源一般通过 YAML 文件进行配置。这些配置文件中会包含路由规则、主机名、路径前缀等属性。例如:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /login
        pathType: Prefix
        backend:
          service:
            name: auth-service
            port:
              number: 80
      - path: /products
        pathType: Prefix
        backend:
          service:
            name: product-service
            port:
              number: 80
      - path: /checkout
        pathType: Prefix
        backend:
          service:
            name: checkout-service
            port:
              number: 80

在上述例子中,指定了一个 Ingress 资源,使得来自 example.com 的外部请求能够依据路径前缀 /login/products/checkout 分别路由到 auth-serviceproduct-servicecheckout-service

为了确保 Ingress 正常工作,通常还需要配置 Ingress Controller。例如,NGINX Ingress Controller 的部署通常通过 Helm Chart 或者 Kubernetes 清单文件进行,以下是一个简单的示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-ingress-controller
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-ingress
  template:
    metadata:
      labels:
        app: nginx-ingress
    spec:
      containers:
      - name: nginx-ingress-controller
        image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0
        args:
          - /nginx-ingress-controller
          - --configmap=$(POD_NAMESPACE)/nginx-configuration
          - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
          - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: 443

理解 Ingress Controller 的工作原理也需要了解负载均衡和反向代理的基本概念。负载均衡器的主要职责是将用户请求均匀地分配到多台服务器,以提高系统的可靠性和处理能力。反向代理则是客户端请求在到达目标服务器前的中间桥梁,除了负载均衡外,还能实现缓存、SSL 加密等功能。经过配置的 Ingress Controller 就相当于一个智能的负载均衡器和反向代理,能够更高效地管理和路由流量。

除了解负载均衡和反向代理的基本概念,Ingress 还涉及到很多关于安全性的实际问题。比方说,通过 Ingress 规则可以强制执行 HTTPS,以确保数据传输的安全性。这对于处理敏感信息的网站尤其重要,比如在线银行和电商平台。在这些情况下,可以采用 Let’s Encrypt 这样的免费的证书颁发机构,通过自动化的方式获取和更新 SSL 证书,从而简化运维过程。


http://www.kler.cn/news/326541.html

相关文章:

  • 钉钉H5微应用Springboot+Vue开发分享
  • win11下 keil报错Cannot load driver ‘D:\Keil_v5\ARM\Segger\JL2CM3.dll‘
  • WAF,全称Web Application Firewall,好用WAF推荐
  • 小巧机身,但强劲动力实现千元级净须,未野迷你剃须刀测评
  • Java 编码系列:反射详解与面试题解析
  • Julia的安装和使用(附vscode中使用)
  • WordPress 要求插件开发人员进行双因素身份验证
  • Python3 爬虫教程 - Web 网页基础
  • 前端工程规范-3:CSS规范(Stylelint)
  • 栈的最小值
  • 17、CPU缓存架构详解高性能内存队列Disruptor实战
  • Excel技巧:Excel批量提取文件名
  • 开源链动 2+1 模式 S2B2C 商城小程序助力品牌实现先营后销与品效合一
  • Skywalking告警配置
  • 图像生成大模型 Imagen:AI创作新纪元
  • Spring Shell基于注解定义命令
  • 外包干了1个多月,技术明显退步了。。。。。
  • 3-基于容器安装carla
  • Python——判断文件夹/文件是否存在、删除文件夹/文件、新建文件夹
  • SpringAOP学习
  • 【C语言软开面经】
  • pdf提取文字:分享3款pdf文字提取软件,赶快收藏起来!
  • Unity开发绘画板——03.简单的实现绘制功能
  • 配置ssh后又报错git@github.com: Permission denied (publickey)
  • Linux【基础指令汇总】
  • 论文翻译 | LLaMA-Adapter :具有零初始化注意的语言模型的有效微调
  • SpringBoot+Thymeleaf发票系统
  • 【2025】springboot基于微信小程序记账本的设计与实现(源码+文档+调试+答疑)
  • kafka集群跨双网段及多网段通信问题解决(避免踩坑)
  • 享元(轻量级)模式