工作负载创建完成后,其在多个 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 做负载均衡。
节点端口访问(NodePort):在每个节点的 IP 上开放一个静态端口,通过静态端口对外暴露服务。外部用户通过请求 节点 IP : 节点 Port,即可访问服务。
负载均衡(LoadBalancer):通过使用外部负载均衡器,使流量能够平滑地分发到集群中的多个 Pod 上。当创建一个 LoadBalancer 类型的 Service 时,系统会为该 Service 创建或复用一个外部的负载均衡器(Cloud Load Balancer,CLB),用于向公网或者内网暴露服务。