K8S之Service和Pod的关系(二)

在Kubernetes中,Service和Pod是解耦的访问关系 :Service为动态变化的Pod提供稳定的访问入口负载均衡

核心关系

1. 访问抽象层

  • Pod :最小部署单元,有独立IP但动态变化(重启/迁移会变)

  • Service :固定虚拟IP/DNS,作为Pod组的稳定代理

2. 标签选择器关联

Service通过selector匹配Pod标签:

yaml

复制代码
# Service定义
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: myapp  # 选择匹配此标签的Pod
  ports:
  - port: 80
    targetPort: 9376

yaml

复制代码
# Pod标签
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp  # 被Service选中
spec:
  containers:
  - name: myapp
    image: myapp:1.0

3. 负载均衡

Service自动将流量分发到所有匹配的Pod:

text

复制代码
客户端 → Service (10.96.1.1)
            ↓ 负载均衡
    +-------+-------+-------+
    ↓       ↓       ↓       ↓
  Pod A   Pod B   Pod C   Pod D

关键特性对比

特性 Pod Service
IP地址 动态变化(Pod IP) 固定不变(ClusterIP)
生命周期 短暂,随时可能重启 长期存在,独立于Pod
网络标识 仅集群内可访问 可通过多种方式暴露(ClusterIP/NodePort/LB)
DNS名称 无独立DNS 有DNS:<service>.<ns>.svc.cluster.local
扩展性 水平扩展产生多个副本 自动发现所有副本Pod

实际工作流程

  1. 创建Pod时 :给Pod打上标签(如 app: frontend

  2. 创建Service时:设置selector匹配相同标签

  3. Service Controller

    • 监控集群中Pod变化

    • 维护Endpoint对象(Pod IP列表)

    • 更新kube-proxy的iptables/ipvs规则

  4. 流量转发

    • 客户端访问Service IP/DNS

    • kube-proxy拦截并转发到实际Pod

访问方式示例

bash

复制代码
# 集群内访问
curl http://my-service.default.svc.cluster.local

# 端口映射(NodePort类型)
curl http://<Node-IP>:30080

# 负载均衡(LoadBalancer类型)
curl http://<云厂商提供的LB-IP>

特殊类型

  • Headless ServiceclusterIP: None,DNS直接返回Pod IP列表,用于有状态应用

  • ExternalName:将服务映射到外部DNS

  • 无selector的Service:手动维护Endpoint,接入外部服务

总结

Pod是实际运行容器的载体,Service是访问这些容器的网络抽象。这种分离实现了:

  • 动态扩缩容时客户端无需感知

  • 服务发现和负载均衡

  • 部署与访问的解耦

  • 稳定的服务标识(DNS名称)

Service通过标签与Pod建立松耦合关系,使得Pod可以自由地创建、销毁、迁移,而服务访问始终保持稳定。

相关推荐
江畔何人初6 小时前
pod的定义以及创建过程
linux·运维·云原生
等什么君!7 小时前
docker -数据卷技术
运维·docker·容器
花酒锄作田8 小时前
Debian 13基于kubeadm和containerd部署单节点kubernetes
kubernetes·containerd·cilium
上天_去_做颗惺星 EVE_BLUE8 小时前
Docker高效使用指南:从基础到实战模板
开发语言·ubuntu·docker·容器·mac·虚拟环境
Gary董9 小时前
高并发的微服务架构如何设计
微服务·云原生·架构
东哥爱编程9 小时前
使用Runpod进行gpu serverless推理
云原生·serverless
好好沉淀9 小时前
Docker开发笔记(详解)
运维·docker·容器
Ankie Wan11 小时前
cgroup(Control Group)是 Linux 内核提供的一种机制,用来“控制、限制、隔离、统计”进程对系统资源的使用。
linux·容器·cgroup·lxc
lcx_defender12 小时前
【Docker】Docker部署运行nacos
运维·docker·容器
啦啦啦小石头13 小时前
docker添加用户权限不使用sudo
运维·docker·容器