31. 说明MetalLB所实现的LoadBalancer Service的原理。
答:MetalLB的核心原理就是:通过在本地网络(LAN)上使用标准的网络协议,模拟云厂商的负载均 衡器,从而为服务分配一个可从外部访问的、稳定的IP地址。
它主要通过两种模式来实现这个目标:
- Layer 2 模式 (基于ARP/NDP) 这是最简单、最通用的模式,它不需要特殊的网络设备。工作原理如下:
当一个LoadBalancer 服务被创建时,MetalLB 从预先配置的 IP 地址池中为它分配 一个IP(例如 192.168.1.100)。
在所有工作节点中,MetalLB会选举出一个"领导者"节点来负责这个IP。
这个领导者节点上的speaker组 件( MetalLB的代理)开始响应针对192.168.1.100 的ARP请求(IPv4)或 NDP请求(IPv6)。它会告诉局域网内的路由器:"192.168.1.100 这个IP地址的MAC地址是我的"
因此,所有发往这个IP的流量都会被路由器定向到这个领导者节点。
流量到达节点后,再由Kube-proxy(Kubernetes的内部网络组件)分发给后端的实 际Pod。
- BGP 模式 (基于边界网关协议) 这是更高级、性能和扩展性更好的模式,但要求有网络设备(如路由器)支持BGP协议。工作 原理如下:
服务被分配一个IP地址。
集群中的所有节点上的speaker组件都会与网络路由器建立一个BGP会话。
然后,所有节点都会通过BGP向路由器宣告:"要访问192.168.1.100,可以把流量发 给我!"
路由器收到来自多个节点的相同路由宣告后,会认为到达这个 IP 有多条等价路径 (ECMP-Equal-Cost Multi-Path)。
因此,路由器会将流量负载均衡到所有宣告了该路由的节点上,而不是只发给一个节点。 MetalLB 通过在每个节点上运行一个Speaker,使用标准的ARP或BGP协议,将一个虚拟IP"嫁 接"到物理网络上,从而巧妙地在"非云提供商"环境里实现了LoadBalancer服务。
32. 详细说明Ingress的实现原理和它所实现的功能。
答:Ingress是对集群中服务的外部访问进行管理的API对象,典型的访问方式是HTTP。 Ingress 公开了从集群外部到集群内服务的HTTP和HTTPS路由,流量路由由Ingress资源上定 义的规则控制。为了让Ingress资源工作,集群必须有一个正在运行的Ingress控制器。 Ingress 可以提供负载均衡、SSL终结和基于名称的虚拟托管。
33. Kubernetes 对集群Pod和容器健康状态如何进行监控和检测的。
答:Pod的健康检查使用存活探针(liveness probes)和就绪性探针(readiness probes)来实现。
34. 解释LivenessProbes探针的作用及其适用场景。
答:Liveness Probes(存活探针)用来检测什么时候要重启容器。例如,存活探针可以捕捉到死锁 (应用程序在运行,但是无法继续执行后面的步骤)。在这种情况下重启容器有助于让应用程序在有 问题的情况下变得可用。
35. 解释ReadinessProbe探针的作用及其适用场景。
答:Readiness Probes(就绪探针)可以知道容器什么时候准备好了并可以开始接受请求流量,只有 当一个Pod内的所有容器都准备好了,才能把这个Pod看作就绪。 - 如果要仅在探测成功时才开始向Pod发送请求流量,可以指定就绪态探针。 - 如果应用程序对后端服务有严格的依赖性,可以同时实现存活态和就绪态探针。
36. 解释StartupProbe探针的作用及其适用场景。
答:Startup Probes(启动探针)可以知道应用程序容器什么时候启动了。用来控制容器在启动成功 后再进行存活性和就绪检查,确保这些存活、就绪探针不会影响应用程序的启动。启动探针用于对慢 启动容器进行存活性检测,避免它们在启动运行之前就被杀掉。如果容器需要在启动期间加载大型数据、配置文件或执行迁移,可以使用启动探针。