什么是 Kubernetes Ingress?-Kubernetes Ingress配置使用详解(10)

作者 : 慕源网 本文共3072个字,预计阅读时间需要8分钟 发布时间: 2021-11-27 共165人阅读

本文是Kubernetes权威指南系列的一部分,你可以点击Kubernetes权威指南查看所有教程

什么是 Kubernetes Ingress?-Kubernetes Ingress配置使用详解(10)

Kubernetes Ingress 简介

Kubernetes 集群或集群中的 Pod 在内部相互连接。但是,如果您想使用 HTTP 之类的服务暴露给外部工作,您需要一个工具来有效地使用 Pod 来完成它。有 NodePorts、LoadBanalncers 可用于实现相同的功能,但 Kubernetes Ingress 是 Kubernetes 环境中的这样一个 API 对象,它可以控制从外部源到服务的 HTTP 和 https 入站流量。

这是由 Ingress Resource 实现的,它定义了您希望如何将请求路由到支持服务和 Ingress Controllers,负责读取 Ingress Resource 信息并相应地处理该数据。

什么是 Kubernetes Ingress?

当您想要将在 Kubernetes 集群中运行的服务公开到外部网络时,可以使用 Kubernetes Ingress,外部网络可以是互联网或 Kubernetes 集群之外的任何东西。

这主要用于暴露 HTTP 和 https 路由,提供外部可访问的 URL,在负载均衡器的帮助下负载均衡流量,终止 SSL 和 TLS 或提供基于名称的虚拟主机。Ingress 拥有资源或规则和负责实施资源规则的控制器。外部用户使用 Ingress 资源向 API 服务器(即 Ingress Controller)请求 Ingress。下图可能会帮助您更了解它: –

什么是 Kubernetes Ingress?-Kubernetes Ingress配置使用详解(10)

要部署 Ingress,请使用带有定义、路径、规则和其他必填字段的 YAML 文件的“kubectl create -f <filename>”命令。Ingress 控制器将创建一个特定于实现的内部 LB(负载均衡器),它与 Ingress 一起使用,直到存在相关服务。当您运行“kubectl get ing”命令时,您可以在输出的最后一列下看到负载均衡器的地址。

Kubernetes Ingress 的类型

下面是提到的类型:

1. 单一服务入口

您可以通过在文件 Ingress_sample.yaml 中的规范内指定没有规则的默认后端来创建 Ingress ,如下所示:

什么是 Kubernetes Ingress?-Kubernetes Ingress配置使用详解(10)

使用以下命令应用它:

什么是 Kubernetes Ingress?-Kubernetes Ingress配置使用详解(10)

Ingress Controller将分配一个 IP 给Ingress 设置。有时分配 IP 需要一些时间,直到那时您将在以下命令的输出中看到地址为待处理: –

什么是 Kubernetes Ingress?-Kubernetes Ingress配置使用详解(10)

2. 简单扇出 

Kubernetes 中的 Pod 具有仅在集群网络上可见的 IP,因此我们需要一个负载均衡器来接受Ingress 流量并将其发送到指定端点。但是 Ingress 允许您使用单个 LB(负载均衡器)。例如,设置如下: –

代码:

webserver.example.com -> 10.10.10.101 -> /dir1  serv1:80
webserver.example.com -> 10.10.10.101 -> /dir2  serv2:80

输出:

什么是 Kubernetes Ingress?-Kubernetes Ingress配置使用详解(10)

3. 基于名称的虚拟主机

基于名称的虚拟主机对相同的 IP 地址使用多个主机名,如下所示:

代码:

webserver.example.com -> 10.10.10.101 -> webserver.example.com serv1:80
appserver.example.com -> 10.10.10.101 -> appserver.example.com serv2:80

下面的 Ingress 告诉后台 LB (LoadBalancer) 根据主机头路由请求

什么是 Kubernetes Ingress?-Kubernetes Ingress配置使用详解(10)

如果在您的资源文件中您没有为服务定义主机字段,那么任何请求到您的 Ingress 控制器的网络流量都将被转发,而不会标记任何基于名称的虚拟主机。例如,在下面,webserver.example.com 的 Web 流量将被转发到 serv1,appserver.example.com 到 serv2,并且任何没有定义主机字段的 IP 地址的 Web 流量将被发送到 ser3。

什么是 Kubernetes Ingress?-Kubernetes Ingress配置使用详解(10)

4. TLS

可以通过添加以下内容来确保 Ingress 的安全: –

  • 包含 TLS 私有的Secret
  • 证书

在当前版本中,Ingress 仅支持单个 TLS 端口 443 并考虑 TLS 终止。另外,请注意 TLS 机密应具有名为 tls.crt 和包含证书的 tls.key 的密钥。和用于 TLS 的私钥

什么是 Kubernetes Ingress?-Kubernetes Ingress配置使用详解(10)

使用此密钥时,Ingress Controller使用 TLS 保护从客户端到 LB (LoadBalancer) 的通信。确保来自证书的 TLS 机密包含主机的 CN 或 FQDN 的一点,例如本示例中的 ssltest.example.com。资源将如下所示: –

什么是 Kubernetes Ingress?-Kubernetes Ingress配置使用详解(10)

5. 负载均衡

控制器附加了负载均衡策略,如负载均衡算法等​​,它适用于所有Ingress 流量。高级负载平衡概念(如持久会话等)尚无法通过 Ingress 使用。但是如果您需要这些功能,那么您可以使用通用负载平衡器。

更新 Ingress

当你已经部署了一个 Ingress 并且你想要更新它以添加一个新的目标服务或主机目标时,你可以通过更新资源文件来完成,使用以下步骤: –

  1. 检查当前Ingress 详细信息: –
    #kubectl describe ingress <ingress_name>
  2. 使用命令编辑Ingress 资源,这将在默认编辑器中打开 YAML 文件: –
    #kubectl edit ingress <ingress_name>
  3. 保存更改后,kubectl 将资源更新到 API 服务器,然后更新 Ingress 控制器以更新 LB(负载均衡器)。使用以下命令验证这一点:
    #kubectl describe ingress <ingress_name>
注意:您可以通过在 Ingress 资源 YAML 文件上运行以下命令来获得相同的结果。
#kubectl replace -f <Filename>

前提条件

要使用 Kubernetes Ingress,您应该拥有以下可用资源,否则您将无法使用它或完全无法使用它。

  • 一个正在运行的 Kubernetes 控制器,如 HAProxy Ingress、ingress-nginx 等本地或类似云的 AWS ALB Ingress Controller,它使用 AWS 应用程序负载均衡器启用Ingress 。但是 Ingress Controllers 应该符合您的需求规范,因为不同的 Ingress Controllers 操作略有不同
  • Kubernetes 资源是指您必须根据需要并基于 NodePort 或 LoadBalancer 的可用性定义的规则。一个例子如下:什么是 Kubernetes Ingress?-Kubernetes Ingress配置使用详解(10)此外,Kubernetes Ingress 需要资源文件中的 apiVersion、kind 和 metadata 字段。所以你应该知道这些。除了这些字段,如果定义了主机,则规则将应用于该目标,如果未定义主机,则规则将应用于所有入站 HTTP(或 HTTPS)流量。此外,字段路径(上例中的 /var/mytestpath)有一个定义了服务名称和服务端口的后端。在负载均衡器(如果存在)将流量转发到相关服务之前,主机和路径字段都应与 Web 流量中的请求内容匹配。
  • 后端,它是 serviceName 和 servicePort 的组合。对与主机字段和规则的路径字段匹配的 Ingress 的 HTTP(或 HTTPS,以防万一)请求被发送到资源中提到的后端。默认后端主要配置在控制器中,以服务与任何路径不匹配的任何请求

结论

Ingress 允许您配置多个 Virtual Hosts、Sticky session、Path 重写和自定义配置,为 Kubernetes 提供强大的灵活路由机制。当您选择了 Ingress Controller 并考虑了 Ingress 资源时,请查看相应的 Ingress 文档以了解它的理解、功能并了解路由请求的不同方法。

 


慕源网 » 什么是 Kubernetes Ingress?-Kubernetes Ingress配置使用详解(10)

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录