第六章 Kubernetes Service 第4小节:publishNotReadyAddresses 参数解析
前置知识回顾
- Service与Pod的关联依赖Endpoint中间层:当创建带标签选择器的Service后,若匹配到符合标签子集要求的Pod,会自动生成同命名空间、同名的Endpoint对象,记录后端Pod的地址与端口信息。
- 节点上的kube-proxy组件会将Endpoint对象的变更同步到节点的IPVS/iptables转发规则中,最终实现四层负载均衡能力。
- Pod默认仅处于就绪状态时,才会被Endpoint关联,进而纳入Service的负载均衡后端池,这是Kubernetes的默认行为。
核心知识点:publishNotReadyAddresses
- 参数作用:控制Service是否将未就绪的Pod纳入后端负载均衡列表,属于可选配置,默认值为
false(即默认过滤未就绪Pod)。 - 适用建议:仅在有特殊业务需求、必须让未就绪Pod参与流量转发时开启,不建议作为默认配置开启。
实验演示流程
- 前置清理:删除之前实验残留的Service、Endpoint等资源对象,避免对本次实验造成干扰。
- 创建测试Pod:
- Pod定义包含就绪探测(Readiness Probe),采用HTTP GET方式,探测端口为80,探测路径为
/index.html,初始延迟1秒后开始探测,每3秒探测一次。 - Pod创建后状态为
Running但未就绪(Readiness检查不通过)。
- Pod定义包含就绪探测(Readiness Probe),采用HTTP GET方式,探测端口为80,探测路径为
- 验证默认行为:
- 创建ClusterIP类型的Service,标签选择器匹配测试Pod的标签,端口映射为
80:80。 - 访问Service的ClusterIP,请求无法成功,因为默认状态下未就绪的Pod不会被纳入Service后端。
- 创建ClusterIP类型的Service,标签选择器匹配测试Pod的标签,端口映射为
- 开启publishNotReadyAddresses:
- 方式1:通过
kubectl edit svc <Service名称>编辑Service资源,在spec字段下新增publishNotReadyAddresses: true配置。 - 方式2:直接使用
kubectl patch命令修改Service的publishNotReadyAddresses字段为true。
- 方式1:通过
- 验证开启效果:修改配置后再次访问Service的ClusterIP,可正常收到响应,返回内容为当前未就绪Pod的首页信息,说明未就绪Pod已被纳入Service的负载均衡后端。
本章Service核心内容回顾
本章完整覆盖Kubernetes Service的所有核心知识点:
- Service基础概念与底层工作原理:包括用户空间模式、iptables模式、IPVS模式三类工作模式的切换逻辑。
- Service核心类型:ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型的特性与适用场景。
- Endpoint资源:作为Service与Pod的中间关联层,分为两类:① 带标签选择器的Endpoint,由系统根据Service选择器自动生成;② 无标签选择器的Endpoint,可由用户手动创建。
- 特殊配置:
publishNotReadyAddresses参数的作用、配置方式与适用场景,实现未就绪Pod纳入Service负载均衡。 - 本章核心能力:解决Kubernetes环境下的四层负载均衡问题,后续章节将讲解七层负载均衡相关实现。
AI 总结
本小节讲解了Kubernetes Service的publishNotReadyAddresses参数的核心作用与使用方法,该参数用于控制是否将未就绪的Pod纳入Service的后端负载均衡列表,默认处于关闭状态。通过实验演示了默认场景下未就绪Pod无法被Service转发流量,开启该参数后即可实现未就绪Pod的流量接入,同时系统性回顾了本章Service相关的全部核心知识点,为后续七层负载均衡内容的学习打下基础。