k8s-Ingress:HTTP7层路由机制

介绍

根据对k8s的service的学习我们知道service的表现形式是IP:Port,即工作在TCP/IP层。而对于基于HTTP的服务来说,不同的URL地址经常对应到不同的后端服务或虚拟服务器,这些应用转发机制仅通过k8s的service是无法实现的。从Kubernetes 1.1版本开始新增Ingress资源对象,用于将不同的URL的访问请求转发到后端不同的Service,以实现HTTP层业务路由机制。k8s使用了一个ingress策略的定义 和 一个具体的ingress Controller,两者结合并实现了一个完整的Ingress负载均衡器

使用ingress进行负载分发时,ingress controller 基于ingress规则将客户端请求直接转发到service对应的后端endpoint(pod)上,这样会跳过kube-proxy的转发功能,kube-proxy不再起作用。如果ingress controller提供的是对外服务,则实际上实现的是边缘路由器的功能

为使用ingress,需要创建ingress controller(带一个默认的backend(后端)服务)和一个策略设置来共同完成,下面举3个例子说明ingress controller 和ingress策略的配置方法,及客户端如何访问ingress提供的服务

创建ingress controller 和默认的backend服务

在定义ingress策略之前,需要先部署ingress controller 以实现为所有后端service都提供一个统一的入口;ingress controller 需要实现基于不同HTTP URL 向后端转发的负载分发规则,并可以灵活设置7层负载分发策略;如果公有云公司可以提供该类型的HTTP路由Load Balancer,则也可以设置其为ingress controller

在k8s中ingress controller 将以pod的形式运行,监控Api srver 的/ingress接口后端backend service ,如果service发生变化,则ingress controller应自动更新其转发规则

举例

下面举例使用谷歌的nginx-ingress-controller镜像创建ingress controller;该ingress controller 以daemonset的形式进行创建,在每个node上都将启动一个nginx服务
这里为nginx容器设置了hostport,将容器应用监听的80和443端口号映射到物理机上,使得客户端可以通过URL地址来访问ingress controller

posted @ 2022-04-19 10:16  du-z  阅读(710)  评论(0编辑  收藏  举报