Kubernetes 学习笔记 – 5. 你必须知道的流量路由管理器(流量控制路由器)

Ingress vs Ingress controller

Ingress和Ingress Controller – Kubernetes流量管理的笨警察与聪明警长

Кubernete集群就像一个辽阔的海洋,来自外界的流量就像各国游客。如何管理这些外来“游客”的入境访问,使他们顺利抵达集群“国内”的服务目的地呢?

这里就需要我们的Kubernetes边防力量——Ingress和Ingress Controller出马了。如果把它们比作警察,Ingress是笨手笨脚的警察,Ingress Controller则是精明能干的警长。

Ingress这个笨警察只能设置好一份入境规则说明书,详细写明外来流量的访问方案、路径指引、证件校验等各项规定。但它自己执行能力弱,必须靠聪明的Ingress Controller警长来操作。

警长根据规则说明书,安排速度快的Nginx、Traefik这些警力去指定岗哨,检查流量“旅客证件”,放行合法访问,截留非法“入境者”。如果规则有变化,笨警察Ingress会修改说明书,聪明警长也会据此调整警力部署。

通过Ingress这个笨警察与Ingress Controller警长的配合,Kubernetes的入境流量管理变得井井有条。外来的“游客”也可以顺利到达集群服务的目的地了。

那么下次在Kubernetes中配置Ingress时,就想象它是一个笨手笨脚的警察;而为它选择一个高效的Ingress Controller,就像配备一个精明能干的警长。这样,流量管理就能够有效进行了。

ingressClassName: traefik 这个class name 有什么要求?

IngressClassName 是 Kubernetes 中 Ingress 对象的一个属性,用于指定该 Ingress 要由哪个 Ingress Controller 来处理。Ingress Controller 可以根据 IngressClassName 来筛选要处理的 Ingress 资源。对于 IngressClassName 的要求和使用方式如下:

  1. 支持版本: IngressClassName 是 Kubernetes 1.18 版本引入的功能,因此要求您的集群至少是 1.18 版本或更高版本。
  2. Ingress Controller 实现: 要使用 IngressClassName,您需要安装一个支持这个功能的 Ingress Controller。不同的 Ingress Controller 可能有不同的名称支持,例如 Traefik、Nginx Ingress Controller 等。
  3. IngressClassName 命名约定: IngressClassName 的命名约定没有强制要求,但通常应该具有描述性,可以告诉用户使用该 Ingress Controller 的名称或特征。例如,对于 Traefik,您可以设置 IngressClassName 为 "traefik"。
  4. 创建 Ingress 时指定 IngressClassName: 创建 Ingress 时,通过在 Ingress 规范中添加 ingressClassName 属性来指定要使用的 Ingress Controller。例如:

apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: my-ingressspec: ingressClassName: traefik rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: my-service port: number: 80

通过指定正确的 IngressClassName,您可以确保 Ingress Controller 正确处理指定的 Ingress 资源,并将外部流量正确路由到您的服务。每个 Ingress Controller 的实现可能会稍有不同,因此请参考相应的文档以确保正确配置 IngressClassName。

Kubernetes 学习笔记 - 5. 你必须知道的流量路由管理器(流量控制路由器)

集群中部署有nginx-ingress 和 traefik,在使用ingress资源时,该如何指定特定的组件来实现ingress?

在使用 Ingress 资源时,您可以通过 ingressClassName 字段来指定特定的 Ingress Controller 组件来处理该 Ingress。不同的 Ingress Controller 可以根据 ingressClassName 进行匹配,以确定哪个组件应该处理该 Ingress 规则。

以下是如何在 Ingress 资源中使用 ingressClassName 来指定特定的 Ingress Controller 组件的示例:

apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: my-ingressspec: ingressClassName: nginx # 使用 nginx-ingress 处理该 Ingress rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: my-nginx-service port: number: 80

或者,对于使用 Traefik Ingress Controller:

apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: my-ingressspec: ingressClassName: traefik # 使用 Traefik 处理该 Ingress rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: my-traefik-service port: number: 80

通过在 Ingress 规范中添加 ingressClassName 字段,并将其设置为您想要使用的 Ingress Controller 的名称,您可以确保特定的 Ingress Controller 组件会处理该 Ingress 规则。请确保您的集群中已经部署了相应的 Ingress Controller,并且 Ingress Controller 支持 ingressClassName 功能。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023年12月7日 上午9:05
下一篇 2023年12月8日 上午11:48

相关推荐