在 Kubernetes 中,Service 是一种抽象,用于定义一组 Pod 的访问方式。Service 提供了一个稳定的网络端点,使得外部的应用程序或其他服务能够访问这组 Pod。以下是关于 Kubernetes Service 的一些基本概念和用法:

Service 类型

Kubernetes 支持多种类型的 Service,包括:

1. ClusterIP: 默认类型,Service 的 IP 只在集群内部可访问。
   apiVersion: v1
   kind: Service
   metadata:
     name: my-service
   spec:
     selector:
       app: MyApp
     ports:
       - protocol: TCP
         port: 80
         targetPort: 8080

2. NodePort: 将 Service 暴露到每个节点的固定端口,可以通过节点的 IP 和端口访问 Service。
   apiVersion: v1
   kind: Service
   metadata:
     name: my-service
   spec:
     selector:
       app: MyApp
     ports:
       - protocol: TCP
         port: 80
         targetPort: 8080
     type: NodePort

3. LoadBalancer: 在支持的云提供商上创建外部负载均衡器,并分配外部 IP 地址。
   apiVersion: v1
   kind: Service
   metadata:
     name: my-service
   spec:
     selector:
       app: MyApp
     ports:
       - protocol: TCP
         port: 80
         targetPort: 8080
     type: LoadBalancer

4. ExternalName: 将 Service 映射到外部服务的 DNS 名称。
   apiVersion: v1
   kind: Service
   metadata:
     name: my-service
   spec:
     type: ExternalName
     externalName: my.database.example.com

Selector 和 Labels

Service 使用 Selector 和 Labels 来确定要路由到的 Pod。在上面的示例中,selector 字段定义了一个标签选择器,它选择了具有标签 app: MyApp 的 Pod。

使用 Service

通过创建 Service,你可以使用 Service 的 Cluster IP、NodePort、LoadBalancer IP 或 ExternalName 来访问一组 Pod。例如,如果你的 Service 名称是 my-service,你可以通过 my-service 的 DNS 名称(在集群内部)或 LoadBalancer 的外部 IP 地址(在云环境中)访问它。
# 通过 Cluster IP 访问
kubectl exec -it my-pod -- curl http://my-service

# 通过 NodePort 访问
curl http://node-ip:node-port

# 通过 LoadBalancer 访问
curl http://load-balancer-ip

# 通过 ExternalName 访问
curl http://my-service

注意事项

  •  Service 是通过标签选择器(Selectors)与 Pod 关联的,因此确保 Service 的选择器匹配你想要路由的 Pod。

  •  在使用 LoadBalancer 类型的 Service 时,确保你的云提供商支持,并且集群能够分配外部 IP 地址。

  •  Service 具有稳定的 Cluster IP,这意味着其他的 Pod 可以通过该 Cluster IP 访问 Service。


Kubernetes Service 是构建微服务应用程序时不可或缺的一部分,它提供了一种抽象,使得服务之间的通信更为简便。


转载请注明出处:http://www.pingtaimeng.com/article/detail/9984/Kubernetes