k8s 四种Service类型(ClusterIP、NodePort、LoadBalancer、ExternalName)详解
🐇明明跟你说过:个人主页
🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅
🔖行路有良友,便是天堂🔖
目录
一、引言
1、k8s概述
2、Service在Kubernetes中的作用
二、ClusterIP类型
1、ClusterIP 类型的特点和用途
2、ClusterIP 的工作机制
3、创建示例
4、ClusterIP 使用场景
三、NodePort类型
1、NodePort 类型的特点和用途
2、NodePort 的工作机制
3、创建示例
4、NodePort 使用场景
5、注意事项
四、LoadBalancer类型
1、LoadBalancer 类型的特点和用途
2、LoadBalancer 的工作机制
3、创建示例
4、使用场景
5、注意事项
五、ExternalName类型
1、ExternalName 类型的特点和用途
2、ExternalName 的工作机制
3、创建示例
4、使用场景
5、注意事项
一、引言
1、k8s概述
Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。它最初由谷歌开发,并在2014年捐赠给云原生计算基金会(CNCF)。Kubernetes为容器化应用提供了一个灵活、可扩展和高效的管理平台。
2、Service在Kubernetes中的作用
在 Kubernetes 中,Service 是一种抽象方式,用于定义一组逻辑上的 Pod 以及访问这些 Pod 的策略。Service 解决了 Pod 的生命周期管理和通信问题,提供了稳定的网络端点和负载均衡机制,确保应用程序的高可用性和可扩展性。
主要作用
1. 稳定的访问入口:
- 每个 Pod 都有自己的 IP 地址,但是这些地址是动态分配的,当 Pod 被删除或重新创建时,IP 地址会发生变化。Service 为一组 Pod 提供一个稳定的 IP 地址和 DNS 名称,使得应用程序可以通过固定的端点进行访问。
2. 负载均衡:
- Service 会自动将流量分发到后端的一组 Pod 上,进行负载均衡。这样可以均匀分配流量,防止某个 Pod 过载,并提高整体应用的性能和可靠性。
3. 服务发现:
- Kubernetes 内部有一个 DNS 服务,所有 Service 都会在这个 DNS 中注册。当应用程序需要访问某个 Service 时,可以通过 DNS 名称进行访问,而无需关心具体的 Pod IP 地址。
4. 跨节点通信:
- Service 可以将请求转发到集群中不同节点上的 Pod,实现跨节点通信。这对于分布式系统和跨节点的应用程序来说非常重要。
二、ClusterIP类型
在 Kubernetes 中,ClusterIP 类型的 Service 是最基本和默认的 Service 类型。它在集群内部为一组 Pod 提供一个稳定的 IP 地址和 DNS 名称,使得其他服务可以通过固定的网络端点进行访问,而无需关心 Pod 的动态 IP 地址。
1、ClusterIP 类型的特点和用途
1. 内部访问:
ClusterIP 类型的 Service 只能在 Kubernetes 集群内部访问,无法从集群外部直接访问。它适用于集群内部的服务通信,如微服务之间的调用。
2. 稳定的访问端点:
ClusterIP 为 Service 分配一个稳定的虚拟 IP 地址。无论背后的 Pod 如何变化,访问 Service 的 IP 地址始终不变,提供了稳定的访问端点。
3. 自动负载均衡:
ClusterIP 会将流量均匀分发到其后端的所有 Pod 上,实现负载均衡。这样可以有效地分散负载,提高应用的性能和可靠性。
2、ClusterIP 的工作机制
1. 标签选择器:
ClusterIP Service 使用标签选择器(Selector)来确定与哪些 Pod 关联。符合选择器条件的所有 Pod 会成为该 Service 的后端。
2. Endpoints 对象:
Kubernetes 会自动维护一个 Endpoints 对象,记录与 ClusterIP Service 关联的所有 Pod 的 IP 地址和端口。当关联的 Pod 状态发生变化时,Endpoints 对象会自动更新。
3. kube-proxy:
kube-proxy 是 Kubernetes 集群中的网络代理,负责实现 Service 的网络规则。对于 ClusterIP 类型的 Service,kube-proxy 会在每个 Node 上设置 iptables 规则或 IPVS 规则,将访问 ClusterIP 的流量转发到相应的 Pod 上。