作者信息:https://home.cnblogs.com/u/huangjiabobk

在k8S中,Service怎么关联Pod的?

在Kubernetes(k8s)中,Service是通过Label Selector来关联Pod的。以下是详细步骤:

  1. 定义标签(Labels)

    • 在创建Pod时,会在其metadata部分定义一组标签(labels),例如:

      metadata:
        labels:
          app: myapp
          tier: backend
      
  2. 创建Service并指定选择器(Selector)

    • 创建Service时,在spec部分定义一个或多个label selector,这些selector将匹配目标Pod的labels。

      apiVersion: v1
      kind: Service
      metadata:
        name: my-service
      spec:
        selector:
          app: myapp
          tier: backend
        ports:
          - protocol: TCP
            port: 80
            targetPort: 9376
      
  3. 自动关联Pod

  • 当Kubernetes看到这个Service的selector时,它会自动查找集群中所有带有匹配labels(app=myapptier=backend)的Pod,并将它们添加到该Service的后端 endpoints 列表中。
  1. Endpoints资源更新
  • Kubernetes系统会维护一个名为Endpoints的资源对象,这个对象记录了与Service关联的所有Pod的实际IP地址和端口信息。
  1. 流量转发

    • 当客户端通过Service IP地址发送请求时,Kubernetes的网络插件(如kube-proxy)负责将请求透明地转发到Service背后的任意一个Pod的endpoint上。

综上所述,Service与Pod之间的关联是基于标签选择器的动态绑定机制,这使得服务发现变得简单且自动化。当符合标签选择器条件的Pod发生变化时,Service会自动调整其背后所代理的Pod列表,确保服务始终可达。

posted @ 2024-02-17 22:28  黄嘉波  阅读(245)  评论(0编辑  收藏  举报
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波