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

Kubernetes从零到精通(12-Ingress、Gateway API)

        Ingress和Gateway API都是Kubernetes中用于管理外部访问集群服务的机制,但它们有不同的设计理念和适用场景。它们的基本原理是通过配置规则,将来自外部的网络流量路由到Kubernetes集群内部的服务上。

Ingress/Gateway API和Service

        Ingress/Gateway API主要解决Kubernetes集群外部(例如互联网用户)访问Kubernetes集群内部资源的需求;

        Service主要解决Kubernetes集群内部资源互相访问;

        从功能实现上看,Service的NodePort和LoadBalancer模式也能实现集群外部的访问;但Ingress/Gateway API提供了更高级、灵活的流量管理、安全认证、跨协议等功能,解决了Service的局限性。

Ingress

Ingress简介

        Ingress是Kubernetes中较早提出的网络流量管理机制,目的是通过一个单一的入口点管理集群的外部HTTP和HTTPS流量。这样,多个服务可以通过一个统一的域名或IP公开,而不必为每个服务分别暴露端口。

使用说明:
Ingress Controller:Ingress本身只定义了规则,真正处理网络流量的任务由Ingress Controller完成。常见的Ingress Controller有NGINX、Traefik和HAProxy等。必须部署Ingress Controller,才能让Ingress资源生效。
Ingress资源:Ingress资源用来定义如何将外部HTTP/HTTPS流量转发到集群内的服务。其典型配置包括:
Host:用于根据域名路由流量。
Path:根据URL路径路由流量。
TLS:定义TLS证书以支持HTTPS。
Backend:指定服务名称和端口,流量会被转发到这个服务上。

Ingress示例

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingressnamespace: default
spec:ingressClassName: nginx-examplerules:- host: example.comhttp:paths:- path: /app1pathType: Prefixbackend:service:name: app1-serviceport:number: 80- host: another.comhttp:paths:- path: /pathType: Prefixbackend:service:name: another-serviceport:number: 80

         在这个例子中,Ingress资源将域名example.com下/app1路径的流量转发到名为app1-service的Service上;将域名another.com下/路径的流量转发到名为another-service的Service上。

Gateway API

Gateway API简介

        Gateway API是Kubernetes网络管理的较新机制,设计目的是为了替代Ingress,提供更灵活和可扩展的流量管理能力。它将网关(Gateway)和路由(Routes)解耦,允许更复杂的配置,并支持多种协议(不仅仅是HTTP/HTTPS,还包括TCP、UDP 等)。Gateway API更适合企业级场景,支持多租户、跨集群流量管理等复杂的需求。

使用说明:
GatewayClass:定义网关的类型。例如,可以有不同的GatewayClass代表不同类型的负载均衡器(如云供应商的负载均衡器、NGINX、Envoy等)。
Gateway:定义实际的网关实例,指定入口端口、协议和可用的路由规则。
HTTPRoute、TCPRoute等:这些资源定义了如何根据特定规则(如域名、路径、协议等)将流量路由到后端服务。它们比Ingress更灵活,可以在不同的网关之间共享路由规则。

Gateway API示例

apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:name: my-gatewaynamespace: default
spec:gatewayClassName: my-gateway-classlisteners:- name: httpprotocol: HTTPport: 80routes:kind: HTTPRouteselector:matchLabels:app: my-route---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:name: my-routenamespace: defaultlabels:app: my-route
spec:rules:- matches:- path:type: Prefixvalue: /app1          # /app1路径路由到app1-servicehostnames:- example.com  # 根据域名example.com匹配backendRefs:- name: app1-serviceport: 80- matches:- path:type: Prefixvalue: /          # 根路径路由到another-servicehostnames:- another.com  # 根据域名another.com匹配backendRefs:- name: another-serviceport: 80

         在这个例子中,Gateway资源将域名example.com下/app1路径的流量转发到名为app1-service的Service上;将域名another.com下/路径的流量转发到名为another-service的Service上。

 


http://www.mrgr.cn/news/29524.html

相关文章:

  • Sqlmap中文使用手册 - File system access模块参数使用
  • 米壳AI:跨境电商必备:不损失原图的图片翻译工具!
  • 感谢问界M9一打二十,让我们买到这么便宜的BBA
  • element-ui 日期选择器设置禁用日期
  • Games101图形学笔记——着色
  • day22JS-对象静态方法
  • 如何编写可维护的代码:最佳实践与技巧
  • 克隆centos网卡uuid相同如何修改
  • 进程的重要函数
  • 基于树表的查找
  • 网络封装分用
  • OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3568移植案例(下)
  • 伪工厂模式制造敌人
  • 喜报!亲笔签数字科技荣获2024年“数据要素X”大赛重庆分赛三等奖
  • 构建 LLM 应用程序时经常遇到的高级概念的快速指南
  • 3.postman脚本语言、接口关联(json引用(变量)、脚本用正则表达式)、断言封装、自动化构造接口请求(Postman工具)
  • 直播开播极速流,如何有效接入?
  • 基于Spring Boot的学生社区故障维修预约系统的设计与实现(开题报告)
  • C++面试模拟01
  • C++:日期类的实现