在Kubernetes(k8s)中,Service是通过Label Selector来关联Pod的。以下是详细步骤:
- 定义标签(Labels):
- 在创建Pod时,会在其metadata部分定义一组标签(labels),例如:
metadata: labels: app: myapp tier: backend
- 创建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
- 自动关联Pod:
- 当Kubernetes看到这个Service的selector时,它会自动查找集群中所有带有匹配labels(
app=myapp
和tier=backend
)的Pod,并将它们添加到该Service的后端 endpoints 列表中。
- Endpoints资源更新:
- Kubernetes系统会维护一个名为Endpoints的资源对象,这个对象记录了与Service关联的所有Pod的实际IP地址和端口信息。
- 流量转发:
- 当客户端通过Service IP地址发送请求时,Kubernetes的网络插件(如kube-proxy)负责将请求透明地转发到Service背后的任意一个Pod的endpoint上。
综上所述,Service与Pod之间的关联是基于标签选择器的动态绑定机制,这使得服务发现变得简单且自动化。当符合标签选择器条件的Pod发生变化时,Service会自动调整其背后所代理的Pod列表,确保服务始终可达。