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

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.dtcms.com/a/359340.html

相关文章:

  • 解锁GPU计算潜能:深入浅出CUDA架构与编程模型
  • ESP32学习笔记_Peripherals(5)——SPI主机通信
  • Asible——将文件部署到受管主机和管理复杂的Play和Playbook
  • 局域网中使用Nginx部署https前端和后端
  • Idea启动错误-java.lang.OutOfMemoryError:内存不足错误。
  • Polkadot - ELVES
  • 鸿蒙搭配前端开发:应用端与WEB端交互
  • SCARA 机器人工具标定方法
  • 【算法笔记】算法归纳整理
  • 从零开始的python学习——语句
  • 晶晨线刷工具下载及易错点说明:生成工作流程XML失败
  • 【CVTE】C++开发 (提前批一面)
  • C++Primer笔记——第七章:类(上)
  • Spring/Spring MVC/iBATIS 应用 HTTP 到 HTTPS 迁移技术方案
  • C语言学习笔记(自取)
  • 【大前端】React配置配置 开发(development)、生产(production)、测试(test)环境
  • C语言强化训练(1)
  • VSCode中使用Markdown
  • 学习笔记:MySQL(day1)
  • 机器学习基础-day01-机器学习介绍
  • 微信小程序开发教程(六)
  • 07.《交换机三层功能、单臂路由与端口安全基础知识》
  • cosy-3
  • 在Ubuntu服务器上安装KingbaseES V009R002C012(Orable兼容版)数据库过程详细记录
  • 服务器音频查找
  • 《打破 “慢“ 的黑箱:前端请求全链路耗时统计方案》
  • 技术框架之RPC
  • 将基于 Spring Boot 3.0.0 的 JavaWeb 应用部署到腾讯云并配置域名
  • codecombat(Ubuntu环境详细docker部署教程)
  • 8.1【Q】VMware相关