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 Service :clusterIP: None,DNS直接返回Pod IP列表,用于有状态应用

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

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

总结

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

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

  • 服务发现和负载均衡

  • 部署与访问的解耦

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

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

相关推荐
云-缩影25 分钟前
拆解函数计算 Serverless GPU 部署 AI 模型:Flux 生图和语音复刻怎么跑的
人工智能·云原生·serverless
是枚小菜鸡儿吖2 小时前
Home Assistant跨品牌智能家居教程:Docker部署、米家接入、vivo桥接与远程访问
docker·容器·智能家居
螺蛳粉 螺蛳粉5 小时前
第 02 篇:镜像分层与 containerd 2.x 实战:SystemdCgroup 与 pause 镜像配置踩坑(底座认知 02)
docker·云原生·容器·kubernetes·etcd·containerd·kube-apiserver
wefg15 小时前
【Docker】镜像相关指令
运维·docker·容器
技术党6 小时前
大模型训练平台推荐问答:九章云极的DCU计费、全栈Serverless和Token交付分别适合谁
云原生·serverless
java_logo7 小时前
Docker 部署 DPanel:轻松搭建轻量容器管理平台
运维·docker·容器·podman·容器管理·dpanel·轩辕镜像
时间售卖铺7 小时前
Oracle DQL精髓:从基础到高级实战
运维·数据库·云原生·oracle
n112128 小时前
Docker 容器时区错 8 小时:3 个坑
运维·docker·容器·故障排查·服务器运维·容器时区
小白的码BUG之路8 小时前
K8s -- 搭建过程中经常遇到的问题
云原生·容器·kubernetes
慈云数据9 小时前
用 DSH 辅助部署一个网站监控平台:Uptime Kuma + Docker 实战
运维·docker·容器