Kubernetes (k8s) 通过 Service 对外暴露 Deployment 管理的 Pod,使得集群内的其他服务可以无需关心具体 Pod 的 IP 地址和端口信息,直接通过 Service 名称访问。
在 Kubernetes 中,Service 是一种抽象的逻辑概念,用于定义一组 Pod 的访问方式。Service 会为所管理的 Pod 分配一个虚拟 IP(Cluster IP),其他服务可以通过该 IP 和 Service 指定的端口号访问到被管理的 Pod。
当创建 Deployment 时,Kubernetes 会自动创建对应的 Service,并将其绑定到 Deployment 所管理的所有 Pod 上。这样一来,无论 Pod 怎样变化或扩缩容,Service 的 Cluster IP 和端口号都不会改变,从而保证其他服务始终可以通过 Service 访问到 Deployment 管理的 Pod。
例如,假设我们创建了一个名为 nginx-deployment 的 Deployment,它会管理 3 个 Pod。同时,Kubernetes 自动创建了一个名为 nginx-service 的 Service,并将其绑定到 nginx-deployment 管理的所有 Pod 上。
此时,我们可以通过运行 kubectl get svc 命令查看 Service 的信息:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service ClusterIP 10.0.0.1 <none> 80/TCP 1h
上面命令输出的结果中,可以看到 Cluster IP 为 10.0.0.1,端口号为 80。我们可以通过这个 Service 名称和端口号来访问 nginx-deployment 管理的 Pod。
需要注意的是,在 Kubernetes 中,Service 可以绑定到不同类型的 Pod 上,如 Deployment、StatefulSet、DaemonSet 等。无论哪种类型的 Pod,只要它们被 Service 绑定,其他服务都可以通过 Service 访问到它们。