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 上。

Kubernetesk8s)的Service资源类型可以配置为负载均衡器(LoadBalancer),从而实现将外部流量导入到集群内部的服务中。通过配置外部IP,可以实现以下目标: 1. 自动配置负载均衡:在支持云平台的环境中,创建带有LoadBalancer类型的服务会自动在云提供商的基础设施上创建一个负载均衡器,并将流量转发到服务对应的Pods。 2. 控制访问入口:通过指定外部IP,可以自定义访问集群服务的外部IP地址,这可以是固定的、在特定范围内的IP地址,也可以是一个域名。 3. 高可用性:在多节点的Kubernetes集群中,外部IP可以关联到多个节点的网络接口上,实现高可用性的服务访问。 要配置一个带有外部IP的LoadBalancer服务,你可以通过定义一个Service资源的YAML配置文件来完成。下面是一个简单的配置示例: ```yaml apiVersion: v1 kind: Service metadata: name: my-loadbalancer-service spec: type: LoadBalancer loadBalancerIP: 123.123.123.123 # 这里的123.123.123.123是你想要配置的外部IP地址 ports: - protocol: TCP port: 80 targetPort: 8080 selector: app: my-app ``` 在这个例子中,我们创建了一个名为`my-loadbalancer-service`的服务,指定了类型为`LoadBalancer`,并且配置了一个静态的外部IP地址`123.123.123.123`。同时定义了服务暴露的端口和后端Pod的目标端口。 请注意,如果你使用的是不支持自动创建云负载均衡器的环境,或者配置的外部IP不是由云提供商分配的,那么这个外部IP地址需要手动确保已经存在并且路由正确,否则外部流量将无法到达服务。
评论 114
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明明跟你说过

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值