当前位置: 首页 > ds >正文

Kubernetes 服务发现与健康检查详解

Kubernetes 提供了多种机制来管理服务发现、负载均衡和容器健康状态监控。本文将围绕以下几个方面展开:

  1. Service 类型:ClusterIP、NodePort、Headless Service、LoadBalancer(MetallB)

  2. Ingress 的实现原理

  3. 健康检查探针:Liveness、Readiness、Startup


一、Service 类型详解

1. ClusterIP

ClusterIP 是默认的 Service 类型,用于在集群内部暴露服务。外部无法直接访问。

apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginxports:- protocol: TCPport: 8000      # Service 端口targetPort: 80  # Pod 端口type: ClusterIP     # 可省略,默认即为 ClusterIP

注释:

  • port: Service 对外提供的端口

  • targetPort: Pod 中容器监听的端口

  • 集群内可通过 nginx-service:8000 访问该服务

2. NodePort

NodePort 会在每个节点上开放一个静态端口,外部可通过 节点IP:端口 访问服务。

apiVersion: v1
kind: Service
metadata:name: nginx-nodeport
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80nodePort: 30080  # 可选,范围 30000-32767type: NodePort

注释:

  • nodePort: 若不指定,K8s 会自动分配一个端口

  • 外部访问方式:http://<节点IP>:30080

3. Headless Service

Headless Service 不分配 ClusterIP,直接返回后端 Pod 的 IP 地址列表。适用于需要直接访问 Pod 的场景(如 StatefulSet)。

apiVersion: v1
kind: Service
metadata:name: nginx-headless
spec:clusterIP: None  # 关键字段,表示 Headlessselector:app: nginxports:- protocol: TCPport: 80targetPort: 80

注释:

  • DNS 查询该 Service 会返回所有后端 Pod 的 IP

  • 适用于自定义负载均衡或状态ful服务发现

4. LoadBalancer 与 MetallB

在云环境中,LoadBalancer 类型会自动分配外部负载均衡器。在裸金属环境中,可使用 MetallB 实现类似功能。

MetallB 支持两种模式:

  • Layer2 模式:通过 ARP/NDP 响应将虚拟 IP 映射到某个节点

  • BGP 模式:通过 BGP 协议向路由器宣告路由,实现负载均衡

apiVersion: v1
kind: Service
metadata:name: nginx-lb
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80type: LoadBalancer

注释:

  • 在支持 LoadBalancer 的云平台中,会自动分配外部 IP

  • 在裸金属环境中需安装并配置 MetallB

二、Ingress 原理与功能

Ingress 是管理外部访问集群服务的 API 对象,通常用于 HTTP/HTTPS 路由。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- host: example.comhttp:paths:- path: /apipathType: Prefixbackend:service:name: api-serviceport:number: 80

注释:

  • host: 域名规则

  • path: 路径匹配规则

  • backend: 转发到的 Service

Ingress 需配合 Ingress Controller(如 nginx-ingress、traefik)使用。

三、健康检查探针

Kubernetes 提供三种探针来监控容器健康状态:

1. Liveness Probe(存活探针)

用于检测容器是否存活,失败则会重启容器。

livenessProbe:httpGet:path: /healthport: 8080initialDelaySeconds: 10  # 容器启动后等待10秒开始检测periodSeconds: 5         # 每5秒检测一次

适用场景:检测死锁、应用无响应等。

2. Readiness Probe(就绪探针)

用于检测容器是否准备好接收流量,失败则从 Service 后端列表中移除。

readinessProbe:exec:command:- cat- /tmp/healthyinitialDelaySeconds: 5periodSeconds: 5

适用场景:等待依赖服务启动、加载配置完成等。

3. Startup Probe(启动探针)

用于保护慢启动容器,避免在启动过程中被误杀。

startupProbe:httpGet:path: /startupport: 8080failureThreshold: 30  # 最多尝试30次periodSeconds: 10     # 每10秒尝试一次

适用场景:启动时间较长的 Java 应用、数据库初始化等。

总结

Kubernetes 通过 Service 和 Ingress 提供了灵活的服务暴露方式,通过健康检查探针保障了应用的可靠性。合理使用这些机制,可以构建出高可用、易维护的云原生应用。

探针类型作用失败行为
LivenessProbe检测容器是否存活重启容器
ReadinessProbe检测容器是否就绪从 Service 中移除
StartupProbe保护慢启动容器不触发其他探针

建议根据应用特性合理配置探针,避免误判和频繁重启。

http://www.xdnf.cn/news/19523.html

相关文章:

  • 搭建卷积神经网络
  • 软考 系统架构设计师系列知识点之杂项集萃(139)
  • C++11语言(三)
  • Nginx实现P2P视频通话
  • codecombat(Ubuntu环境详细docker部署教程)
  • 项目-云备份
  • 面试 八股文 经典题目 - HTTPS部分(一)
  • Flink NettyBufferPool
  • 大模型时代:用Redis构建百亿级向量数据库方
  • EtherCAT主站IGH-- 41 -- IGH之sdo_request.h/c文件解析
  • Library cache lock常见案例分析(一)
  • Encoder编码器
  • 图像描述编辑器 (Image Caption Editor)
  • 极客时间AI 全栈开发实战营毕业总结(2025年8月31日)
  • 【Linux基础】深入理解计算机存储:GPT分区表详解
  • 前端组件拆分与管理实战:如何避免 props 地狱,写出高可维护的项目
  • 《Unity Shader入门精要》学习笔记四(高级纹理)
  • ing Data JPA 派生方法 数据操作速查表
  • 【WEB】[BUUCTF] <GXYCTF2019禁止套娃>《php函数的运用》
  • ADC platfrom day65
  • MVC架构模式
  • Blender建模:对于模型布线的一些思考
  • 介绍GSPO:一种革命性的语言模型强化学习算法
  • 现代C++性能陷阱:std::function的成本、异常处理的真实开销
  • Luma 视频生成 API 对接说明
  • AI 智能体汇总,自动执行任务的“真 Agent”
  • 查看所有装在c盘软件的方法
  • Trae接入自有Deepseek模型,不再排队等待
  • OpenStack 03:创建实例
  • 并发编程——11 并发容器(Map、List、Set)实战及其原理分析