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

Kubernetes Service 详解

Kubernetes Service 详解

一、Service 基本概念

Service 是 Kubernetes 中定义一组 Pod 访问策略的抽象资源,它为 Pod 提供稳定的网络端点,主要解决以下问题:

  • 服务发现:动态变化的 Pod IP 访问问题
  • 负载均衡:流量在多 Pod 间自动分配
  • 解耦:应用与具体 Pod 实例的解耦

二、Service 核心特性

特性说明
稳定虚拟 IP生命周期独立于 Pod
持久 DNS 名称<service>.<namespace>.svc.cluster.local
负载均衡自动分配请求到健康 Pod
多种类型ClusterIP, NodePort, LoadBalancer 等
会话保持通过 sessionAffinity 配置

三、Service 类型对比

1. ClusterIP (默认)

apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: MyAppports:- protocol: TCPport: 80       # Service 端口targetPort: 9376  # Pod 端口

特点

  • 仅在集群内部可访问
  • 自动分配集群内部虚拟 IP
  • 通过 kube-proxy 实现流量转发

2. NodePort

spec:type: NodePortports:- port: 80targetPort: 80nodePort: 30007  # 可选,默认 30000-32767

特点

  • 在每个 Node 上开放静态端口
  • 外部可通过 NodeIP:NodePort 访问
  • 底层仍依赖 ClusterIP

3. LoadBalancer

spec:type: LoadBalancerports:- port: 80targetPort: 80

特点

  • 需要云提供商支持 (AWS ELB, GCP LB 等)
  • 自动创建外部负载均衡器
  • 产生公网 IP 或 DNS

4. ExternalName

spec:type: ExternalNameexternalName: my.database.example.com

特点

  • 将服务映射到外部 DNS
  • 不创建任何代理或端口转发
  • 用于集成集群外部服务

四、Service 工作原理

1. 流量转发机制

请求
Client
ServiceVIP
iptables/ipvs
Pod1
Pod2
Pod3

2. 核心组件协作

  • kube-proxy:维护节点上的转发规则
  • CoreDNS:提供集群内服务域名解析
  • Endpoint Controller:监控 Pod 变化并更新 Endpoints

五、高级配置

1. 会话保持

spec:sessionAffinity: ClientIPsessionAffinityConfig:clientIP:timeoutSeconds: 3600

2. 多端口服务

ports:- name: httpport: 80targetPort: 80- name: metricsport: 8080targetPort: 8080

3. Headless Service

spec:clusterIP: None  # 创建无头服务ports:- port: 80targetPort: 80

用途

  • 用于 StatefulSet
  • 需要直接访问 Pod 的场景
  • 自定义服务发现机制

六、服务发现方式

1. 环境变量

MY_SERVICE_SERVICE_HOST=10.0.0.1
MY_SERVICE_SERVICE_PORT=80

2. DNS 发现

# 集群内解析
nslookup my-service.default.svc.cluster.local

3. 直接访问

curl http://<service-name>.<namespace>.svc.cluster.local

七、最佳实践

  1. 命名规范

    • 使用小写字母和连字符 my-service
    • 避免使用下划线或大写字母
  2. 标签选择器

    selector:app: frontendtier: production
    
  3. 与 Deployment 配合

    # deployment.yaml
    labels:app: nginxversion: v1# service.yaml
    selector:app: nginxversion: v1
    
  4. 监控与调试

    # 检查 Endpoints
    kubectl get endpoints <service-name># 查看服务详情
    kubectl describe svc <service-name>
    

Service 是 Kubernetes 网络模型的核心组件,理解其工作原理对于构建可靠的应用架构至关重要。

相关文章:

  • 《Ultralytics HUB:开启AI视觉新时代的密钥》
  • 复杂度和顺序表(双指针方法)
  • HOW - 经典详情页表单内容数据填充(基于 Antd 组件库)
  • NLP 分词技术学习
  • Qwen 2.5 VL多模态模型的应用
  • 力扣——20有效的括号
  • 10、属性和数据处理---c++17
  • PCB设计工艺规范(二)基本布局要求
  • 虚拟机centos7安装docker
  • 第 12 届蓝桥杯 C++ 青少组中 / 高级组省赛 2021 年 4 月 24 日真题
  • 深入掌握CSS背景图片:从基础到实战
  • hadoop集群建立
  • git 怎样把本地仓库推送到新建的远程仓库
  • Map系列之ConcurrentHashMap源码分析:高并发场景下的性能密码
  • DirectX12(D3D12)基础教程七 深度模板视图\剔除\谓词
  • 【Scrapy】简单项目实战--爬取dangdang图书信息
  • Java泛型(补档)
  • 2025华东杯B题华东杯数学建模思路代码成品讲解工序安排问题
  • Learning vtkjs之ImageMarchingSquares
  • 在Java中使用Files类的copy()方法复制文件的示例
  • 奔驰一季度利润降四成,受美国加征关税影响放弃全年盈利展望
  • 共绘“彩色上海”,IP SH艺术共创沙龙首期圆满举办
  • 五部门:开展新就业形态劳动者劳动权益保障水平提升专项行动
  • 国家发改委下达今年第二批810亿超长期特别国债资金,支持消费品以旧换新
  • 一场与纪录并行的伦敦马拉松,超40项新世界纪录诞生
  • 最近这75年,谁建造了上海?