写点什么

47 K8S 之 Ingress 资源

  • 2021 年 12 月 17 日
  • 本文字数:1085 字

    阅读完需:约 4 分钟

47 K8S之 Ingress资源

Ingress 资源基于 HTTP 虚拟主机或 URL 路径的流量转发规则,它把需要暴露给集群外部的每个 Service 对象,并映射为 Ingress 控制器上的一个虚拟主机或某虚拟主机上的一个 PATH 路径(例如/auth 等)。


Ingress 控制器是 Kubernetes 集群的一个重要附件,它更像是一个自定义控制器,但支撑着 API Server 内置的 Ingress 资源及相关功能的实现,该控制器需要在集群上单独部署。


Ingress 控制器本身就是一类以代理 HTTP/HTTPS 协议为主要功能的代理程序,通常兼有传输层代理功能,甚至可能支持更多的应用层协议,如 Redis 协议等。它可以由任何具有反向代理(HTTP/HTTPS 协议)功能的服务程序实现,例如 Nginx、Envoy、HAProxy、Vulcand 和 Traefik 等。Ingress 控制器自身也是运行在 Kubernetes 集群上的 Pod 资源对象,通常能够与集群上被代理的服务的 Pod 直接通信。

使用 Ingress 资源进行流量分发时,Ingress 控制器可基于某 Ingress 资源定义的规则将客户端的请求流量直接转发至 Service 对应的后端 Pod 资源之上,这种转发机制会绕过 Service 资源,从而省去了由 kube-proxy 实现的端口代理开销。


界定 Ingress 资源可由哪个 Ingress 控制器解析是由 Ingress 资源使用专有的资源注解 kubernetes.io/ingress.class 进行标识,而标识方式是在资源规范中同时支持用.spec.ingressClassName 来引用 ingressClass 资源,这种新的 ingressClass 资源类型将各种 Ingress 控制器按照其核心程序类别划分成逻辑组。


单 Service 资源型 Ingress:暴露单个服务的方法有很多种,例如服务类型中的 NodePort、LoadBalancer 等,不过一样可以考虑使用 Ingress 来暴露服务,此时只需要为 Ingress 指定默认后端即可。


基于 URL 路径进行流量分发:垂直拆分或微服务架构中,每个小的应用都有其专用的 Service 资源暴露服务,但在对外开放的站点上,它们可能是财经、新闻、电商、无线端或 API 接口等一类的独立应用,每个应用可通过主域名的 URI 路径(path)分别接入,例如 www.ilinux.io/api、www.ilinux.io/wap 便可用于发布集群内名为 api 和 wap 的 services 资源。


基于 FQDN 的虚拟主机:根据上面类型 2 描述的需求,也可以把每个应用分别以独立的 FQDN 主机名进行输出,例如使用 wap.ik8s.io 和 api.ik8s.io 分别发布集群内部的 wap 与 api 这两个 Service 资源。这种实现方案其实就是 Web 站点部署中的“基于主机名的虚拟主机”,将多个 FQDN 解析至同一个 IP 地址,然后根据主机头信息进行转发。


TLS 类型的 Ingress 资源:这种类型能以 HTTPS 协议发布 Service 资源,基于一个含有私钥和证书的 Secret 对象即可配置 TLS 协议的 Ingress 资源,目前来说,Ingress 资源仅支持单 TLS 端口,且会卸载 TLS 会话。在 Ingress 资源中引用此 Secret 对象即可让 Ingress 控制器加载并配置为 HTTPS 服务。


发布于: 1 小时前阅读数: 7
用户头像

InfoQ签约作者 2018.11.30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
47 K8S之 Ingress资源