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-ingress
  namespace: default
spec:
  ingressClassName: nginx-example
  rules:
  - host: example.com
    http:
      paths:
      - path: /app1
        pathType: Prefix
        backend:
          service:
            name: app1-service
            port:
              number: 80
  - host: another.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: another-service
            port:
              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-gateway
  namespace: default
spec:
  gatewayClassName: my-gateway-class
  listeners:
  - name: http
    protocol: HTTP
    port: 80
    routes:
      kind: HTTPRoute
      selector:
        matchLabels:
          app: my-route

---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
  name: my-route
  namespace: default
  labels:
    app: my-route
spec:
  rules:
  - matches:
    - path:
        type: Prefix
        value: /app1          # /app1路径路由到app1-service
      hostnames:
      - example.com  # 根据域名example.com匹配
    backendRefs:
    - name: app1-service
      port: 80
  - matches:
    - path:
        type: Prefix
        value: /          # 根路径路由到another-service
      hostnames:
      - another.com  # 根据域名another.com匹配
    backendRefs:
    - name: another-service
      port: 80

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

相关推荐
MickeyCV8 小时前
使用Docker部署MySQL&Redis容器与常见命令
redis·mysql·docker·容器·wsl·镜像
藥瓿亭9 小时前
K8S认证|CKS题库+答案| 6. 创建 Secret
运维·ubuntu·docker·云原生·容器·kubernetes·cks
2302_809798329 小时前
【JavaWeb】Docker项目部署
java·运维·后端·青少年编程·docker·容器
嵌入式大圣10 小时前
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
运维·docker·容器
孔令飞10 小时前
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
ai·云原生·容器·golang·kubernetes
极简网络科技12 小时前
Docker、Wsl 打包迁移环境
运维·docker·容器
江湖有缘12 小时前
【Docker管理工具】部署Docker可视化管理面板Dpanel
运维·docker·容器
猫咪老师199513 小时前
多系统一键打包docker compose下所有镜像并且使用
java·docker·容器
Nazi614 小时前
docker数据管理
运维·docker·容器
亚林瓜子16 小时前
AWS API Gateway配置日志
云计算·gateway·aws·log·cloudwatch