Pod 的访问问题
工作负载创建完成后,其在多个 Pod 中运行,而 Pod 由于具备弹性伸缩属性,因此访问 Pod 会面临如下几个问题:
- Pod 会随时被 Deployment 等控制器新建或删除,因此,直接访问 Pod 具有很大的不确定性,无法保证访问 Pod 的结果。
- Pod 的 IP 地址是在 Pod 启动后才被分配,在启动前并不知道 Pod 的 IP 地址。
- 工作负载是由一组(多个)运行相同镜像的 Pod 组成,逐个访问 Pod 也会带来很多问题。
使用 Service 解决 Pod 的访问问题
Kubernetes 中的 Service 对象就是用来解决上述 Pod 访问问题的。Service 有一个固定 IP 地址,用户可以通过访问 Service 来访问工作负载。而 Service 通过 Label 来选择 Pod,并将用户的访问流量转发给 Pod,同时,Service 还可以给 Pod 做负载均衡。
Service 的类型
Service 包含多种类型,适应于不同的场景。包括:
- 集群内访问(ClusterIP):集群内访问是指将工作负载暴露给同一集群内其他工作负载访问的方式,可以通过 集群内部域名 访问。
- 节点端口访问(NodePort):节点访问是指在每个节点的IP上开放一个静态端口,通过静态端口对外暴露服务。外部用户通过请求 节点IP:节点Port,即可从集群的外部访问一个服务。
- 负载均衡(LoadBalancer):负载均衡是指通过弹性负载均衡从公网访问到工作负载,提供了更高可靠性的保障,一般用于系统中需要暴露到公网的服务。