一、如何实现七层调度?
无论是iptables,还是ipvs,都属于四层调度,均只工作在OSI模型的第四层,即TCP/UDP;
除了ExternalName之外,Ingress(七层)可以引入集群外部的流量;
其他可用方案有:Nginx、traefik、Envoy(ServiceMesh中使用较多)、HaProxy等;
集群外部采用HTTPS,集群内部使用http;
node节点具有pod所在网段的IP地址;
外部流量可以访问内部Ingress的两种实现方式:
①Ingress使用nodeport+Service的方式,接入外部访问流量;
②Ingress使用共享主机网络名称空间(即host network);
二、什么是Ingress-Controller?
Ingress Controller是一组具有七层代理和调度能力的pod资源,只在集群中的指定部分主机当中运行,且类似daemonset每个主机只有一个,但是不是daemonSet,是在controller-manager之外的一种工作负载;
后端接入服务的是upstream,由Service收集到的后端pod ip定义;
在Nginx上,使用虚拟主机来标识不同种类的请求,但不常用,经常使用的方式是URL映射,即一组路径来映射后端的服务pod,用Service(仅做标签,可以没有ClusterIP)来做服务发现和负载均衡;
三、什么是Ingress?
Ingress,是Kubernetes的一种特殊资源,用于提供上游(URL)和下游(Service及upstream对应的后端pod),可以及时注入到Ingress-controller当中,并保存为配置文件,触发主容器当中的进程重载配置文件;
前置条件:
需要安装部署Nginx-Ingress-Controller、Ingress、Service、Pods等;
需要提前配置好域名解析;
Ingress的yaml示例: