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