滁州网站开发czesou哪里有手机网站建设联系方式
2026/4/6 4:16:27 网站建设 项目流程
滁州网站开发czesou,哪里有手机网站建设联系方式,北京网站建设建站,建站之星网站模板在k8s之服务Service章节#xff0c;我们详细的介绍了Service的组成以及相关的原理。Service可以将自身的服务暴露出去#xff0c;给集群内部服务或者给外部服务去使用#xff0c;或者将外部服务分装为一个service#xff0c;供给集群内部服务使用。而今天介绍的ingress其实…在k8s之服务Service章节我们详细的介绍了Service的组成以及相关的原理。Service可以将自身的服务暴露出去给集群内部服务或者给外部服务去使用或者将外部服务分装为一个service供给集群内部服务使用。而今天介绍的ingress其实和service很类似他都是将内部的服务暴露出来给外界包括集群内或集群外去使用。只不过它两者工作的网络层级不同罢了。1. Ingress引入上一章节介绍的LoadBalancer已经能够将k8s内部服务暴露到公网上去了似乎就已经可以了为什么还需要ingress呢因为服务最终无非就是内部使用或者外部使用。内部使用有clusterIP或者nodeIP外部使用LoadBalancer为什么还需要一个ingress呢从LoadBalancer的原理上我们可以看到如果每使用一个LoadBalancer Service就需要一个新的公网LBIP或者域名而这些都需要花钱当然在商业的驱动下引入ingress也并没有说能够降低成本但是确实是带来了便捷。这时候ingress就出来了。Igress 是 Kubernetes 中定义“反向代理规则”的一种 API 对象借助Ingress Controller例如Nginx Ingress Controller来执行反向代理。2. Ingress是什么ingress一共由2个组件组成ingress资源对象配置了相关http路由转发规则的合集。配置 Host域名 、Path路径 与后端 Service 的映射关系。它本身不处理流量只是一个“配置清单”。通常不直接指定 Controller 名称而是通过 spec.ingressClassName 间接关联spec:ingressClassName: nginx-ingresclass # 指向IngressClass的名称rules:- host: example.comhttp:paths:- path: /apipathType: Prefixbackend:service:name: api-svc # 转发到哪个serviceport:number: 80 # service yaml文件中配置的portingressClassingres资源对象与ingress controller之间的桥梁。apiVersion: networking.k8s.io/v1kind: IngressClassmetadata:name: nginx-ingresclass # Ingress资源定义中的spec.ingressClassName 一致annotations:ingressclass.kubernetes.io/is-default-class: true # 将这个 IngressClass 标记为集群中的“默认 IngressClassspec:controller: k8s.io/ingress-nginx # 与下面ingress controller的启动参数一致ingress controller一个运行在集群中的 Pod或多个 Pod本质是一个反向代理pod 控制器Controller反向代理接收外部 HTTP/HTTPS 请求根据规则转发到后端 Service 对应的 Pod。控制器Controller 持续监听 Kubernetes API自动发现 Ingress、Service、Endpoints 的变化并动态更新自身的代理配置如 Nginx 配置。启动时需声明自己自己的 controller​ 标识符与 IngressClass 中的 spec.controller 匹配。# Ingress Controller Deployment 的启动参数示例args:- --controller-classk8s.io/ingress-nginx # 必须与 IngressClass.spec.controller 一致spec.ingressClassNamespec.controller监听并实现转发流量IngressIngressClassIngress ControllerService → Pod当启动一个ingresss Controller的时候会Watch所有的Ingress资源然后对每个 Ingress检查是否有 spec.ingressClassName如果有找到对应的 IngressClass检查该 IngressClass.spec.controller​ 是否等于自己k8s.io/ingress-nginx如果匹配则处理这个 Ingress生成相关的反向代理规则否则则忽略Ingress能够提供从集群外部到集群内服务的http和https路由是一组路由规则的集合。以下是一个ingress的请求例子。如果大家知道nginx的话会发现ingress的原理是不是和nginx很类似。本质上来说ingress controller​[注] 就是一个反向代理的服务运行在pod上基于Nginx、Traefik或者其他组件然后基于路由规则扮演着集群内部的“智能路由”角色。互联网的网络流量通过云产商的LB或者Nodeport转发到Ingress Controller上然后Ingress Controller则会根据Ingress的路由定义将又转发到Service然后Service再转发到了pod中的服务。PlantUML DiagramIngress 本身只是一个规则配置一个资源对象必须配合 Ingress Controller如 Nginx、Traefik才能工作。LoadBalancer 通常用于暴露 Ingress Controller 本身通过 Service of typeLoadBalancer而 Ingress Controller 再根据 Ingress 规则将流量分发到不同的内部 Service。3. Ingress匹配规则Ingress支持很多匹配规则以下是相关常用的匹配规则匹配维度 规则类型 说明 示例 注意事项Host域名精确匹配 完全匹配指定域名 ​host: example.com​ → 仅匹配 example.com 区分大小写必须是合法 DNS 名单级通配符 仅支持前缀 *.匹配任意一级子域名 ​host: *.example.com​ → 匹配 foo.example.com​不匹配 a.b.example.com 不支持 example.* 或多级通配省略 host 匹配所有 Host包括 IP 直接访问 无 host 字段 → 任何域名都进入该 rule 生产环境慎用易造成路由冲突Path路径​pathType: Prefix 前缀匹配最常用 ​path: /api​ → 匹配 /api​、/api/v1​、/api/ 不匹配 /apis路径区分大小写​pathType: Exact 完全相等匹配 ​path: /api​ → 仅匹配 /api​不匹配 /api/ 路径末尾 / 视为不同路径高级匹配 正则表达式需 annotation 部分 Controller如 Nginx支持通过 annotation 启用正则 ​nginx.ingress.kubernetes.io/use-regex: true​ path: /v[0-9] 依赖具体实现非标准功能匹配优先级Host 优先 先匹配 Host再在匹配的 Host 下匹配 Path ​shop.example.com/api​ 不会匹配 api.example.com/api Host 不匹配则整条 rule 跳过Path 最长前缀优先 在同一 Host 下更长的路径优先匹配 ​/api/v1​ 比 /api 优先 避免路径重叠导致意外路由4. 总结Ingress 是 Kubernetes 中管理外部访问集群服务的核心机制主要用于 HTTP/HTTPS 流量的七层路由。它本身只是一个 API 资源定义了基于主机名host和路径path 的路由规则将请求转发到后端 Service。但 Ingress 要真正生效必须部署对应的 Ingress Controller如 Nginx、Traefik、ALB 等。Controller 会监听 Ingress 资源变化动态生成反向代理配置如 Nginx 配置并自动重载以应用新规则。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询