Administrator
发布于 2026-08-15 / 1 阅读
0
0

第六章.k8s Service-publish NotReadyAddresses

来源链接:https://www.bilibili.com/video/BV1PbeueyE8V?spm_id_from=333.788.videopod.episodes&vd_source=0e85828f19fba96334ebaebea2da3e2f&p=40

第六章 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参与流量转发时开启,不建议作为默认配置开启。

实验演示流程

  1. 前置清理:删除之前实验残留的Service、Endpoint等资源对象,避免对本次实验造成干扰。
  2. 创建测试Pod:
    • Pod定义包含就绪探测(Readiness Probe),采用HTTP GET方式,探测端口为80,探测路径为/index.html,初始延迟1秒后开始探测,每3秒探测一次。
    • Pod创建后状态为Running但未就绪(Readiness检查不通过)。
  3. 验证默认行为:
    • 创建ClusterIP类型的Service,标签选择器匹配测试Pod的标签,端口映射为80:80。
    • 访问Service的ClusterIP,请求无法成功,因为默认状态下未就绪的Pod不会被纳入Service后端。
  4. 开启publishNotReadyAddresses:
    • 方式1:通过kubectl edit svc <Service名称>编辑Service资源,在spec字段下新增publishNotReadyAddresses: true配置。
    • 方式2:直接使用kubectl patch命令修改Service的publishNotReadyAddresses字段为true。
  5. 验证开启效果:修改配置后再次访问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相关的全部核心知识点,为后续七层负载均衡内容的学习打下基础。


评论