Kubernetes Service & Ingress
Service是Kubernetes中的资源类型,用来将一组Pod的应用作为网络服务公开。虽然每个Pod都有自己的IP,但是这个IP的生命周期与Pod生命周期一致,也就是说Pod销毁后这个IP也就无效了,而Service的IP(ClusterIP) 则是在创建之后便不会改变,Service 与 Pod 之前通过iptables和ipvs代理等手段关联。k8s一共提供了四种不同目的类型的Service,分别是ClusterIP、NodePort、LoadBalancer以及ExternalName,本来我们就来探索这四种服务的使用场景以及背后的使用原理。
k8s 集群中的每个节点都是运行一个kube-proxy,它用于实现流量从Service到Pod之间的转发。默认在 Linux 平台下,它使用 iptables 作为后端实现,通过监听Kubernetes控制平面,获知对 Service和EndpointSlice对象的添加和删除操作,对于每个Service,kube-proxy 会添加 iptables 规则,在这些这些规则的加持下,流向Service的流量会被重新路由到Service后端集合中的其中之一。
四种模式的基本工作原理如下图所示: