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

3、创建示例

以下是一个创建 ClusterIP 类型 Service 的示例:

apiVersion: v1
kind: Service
metadata:name: my-clusterip-service
spec:selector:app: MyAppports:- protocol: TCPport: 80targetPort: 8080type: ClusterIP
  • kind: Service 表示这是一个 Service 资源。
  • metadata 包含 Service 的元数据,例如名称。
  • spec 定义了 Service 的行为和配置。
    •  selector 指定了 Pod 的标签选择器,选择带有 app=MyApp 标签的 Pod。
    •  ports 定义了服务的端口映射,将 Service 的 80 端口映射到 Pod 的 8080 端口。
    •  type 明确指定了 Service 的类型为 ClusterIP。

4、ClusterIP 使用场景 

1. 微服务架构:

在微服务架构中,不同的服务通常会通过 ClusterIP 类型的 Service 相互调用,确保服务之间的稳定通信。


2. 内部负载均衡:

集群内的负载均衡,通过 ClusterIP Service 将流量均匀分配到后端的多个 Pod,提高应用的可靠性和可扩展性。


3. 后端服务:

对于数据库、缓存等后端服务,可以使用 ClusterIP 类型的 Service 进行访问,确保集群内所有服务都可以通过稳定的端点访问这些后端服务。

   

三、NodePort类型

NodePort 类型的 Service 是 Kubernetes 中的一种 Service 类型,用于将集群内部的服务暴露给外部访问。NodePort 通过在每个 Node 上打开一个特定端口,将外部请求转发到集群内部的 Service,进而到达后端的 Pod。

1、NodePort 类型的特点和用途

1. 外部访问:

NodePort 使集群内部的服务能够通过集群外部的请求访问。它在每个 Node 上分配一个固定端口,将流量转发到 Service。


2. 固定端口:

NodePort 类型的 Service 会在每个 Node 上分配一个从 30000 到 32767 范围内的端口。这个端口在整个集群内是固定的,可以通过 <NodeIP>:<NodePort> 进行访问。


3. 简单易用:

NodePort 是一种简单的方式来暴露集群内的服务,适用于开发和测试环境,也可以作为负载均衡器或 ing  ress 控制器的基础。


2、NodePort 的工作机制

1. NodePort 分配:

当创建一个 NodePort 类型的 Service 时,Kubernetes 会在每个 Node 上分配一个固定的端口,并配置 iptables 或 IPVS 规则,将外部请求转发到 Service。


2. 流量转发:

外部请求通过 <NodeIP>:<NodePort> 访问集群内的服务。kube-proxy 会将这些请求转发到对应的 Service IP,进而分发到后端的 Pod 上。


3. 负载均衡:

和 ClusterIP 类似,NodePort 类型的 Service 也会进行负载均衡,将流量均匀分发到后端的 Pod 上。

3、创建示例

以下是一个创建 NodePort 类型 Service 的示例:

apiVersion: v1
kind: Service
metadata:name: my-nodeport-service
spec:selector:app: MyAppports:- protocol: TCPport: 80targetPort: 8080nodePort: 30001type: NodePort

  • kind: Service 表示这是一个 Service 资源。
  • metadata 包含 Service 的元数据,例如名称。
  • spec 定义了 Service 的行为和配置。
    • selector 指定了 Pod 的标签选择器,选择带有 app=MyApp 标签的 Pod。
    • ports 定义了服务的端口映射。
    • port 是 Service 的端口(集群内部使用)。
    • targetPort 是 Pod 上的端口(容器内部应用监听的端口)。
    • nodePort 是在每个 Node 上分配的固定端口,通过这个端口可以从外部访问 Service。
  • type 明确指定了 Service 的类型为 NodePort。


4、NodePort 使用场景

1. 开发和测试环境:

在开发和测试环境中,NodePort 提供了一种简单的方式来暴露集群内部的服务,方便测试和调试。


2. 临时访问:

在需要临时访问集群内部服务的情况下,NodePort 提供了一种快速解决方案。


3. 基础设施的负载均衡:

NodePort 可以作为负载均衡器或 ingress 控制器的基础,将流量转发到集群内部的服务。


5、注意事项

1. 端口范围:

NodePort 端口范围为 30000 到 32767,确保在配置时避免冲突。


2. 安全性:

暴露到外部的 NodePort 端口存在一定的安全风险,建议在生产环境中使用更高级的解决方案(如 LoadBalancer 或 Ingress)来确保安全性。


3. 负载均衡限制:

NodePort 提供的负载均衡是基于简单的轮询算法,不如专业负载均衡器复杂和高效。

四、LoadBalancer类型

在 Kubernetes 中,LoadBalancer 类型的 Service 是一种常见的服务暴露方式,主要用于将集群内部的服务暴露给外部,并且由云提供商自动配置外部负载均衡器。LoadBalancer 类型的 Service 提供了一个外部 IP 地址,可以直接通过这个地址访问集群内的服务,适用于需要高可用性和自动扩展的场景。

1、LoadBalancer 类型的特点和用途

1. 外部访问:

LoadBalancer 为集群内部的服务提供一个外部 IP 地址,使得外部客户端可以直接访问。


2. 自动配置:

在公有云环境中(如 AWS、Azure、Google Cloud),Kubernetes 会自动配置云提供商的负载均衡器,将外部流量转发到集群内部的服务。


3. 高可用性:

LoadBalancer 结合云提供商的负载均衡服务,能够提供高可用性和自动扩展功能,确保服务的可靠性和性能。


2、LoadBalancer 的工作机制

1. 云提供商集成:

当在公有云环境中创建 LoadBalancer 类型的 Service 时,Kubernetes 会与云提供商的 API 进行交互,自动创建并配置一个外部负载均衡器。


2. 流量转发:

云提供商的负载均衡器接收外部流量,并将其转发到 Kubernetes 集群中的 Node 上,再由 Node 上的 kube-proxy 转发到相应的 Pod。


3. 健康检查:

云提供商的负载均衡器通常会对后端 Pod 进行健康检查,确保只将流量发送到健康的 Pod 上。


3、创建示例

以下是一个创建 LoadBalancer 类型 Service 的示例:

apiVersion: v1
kind: Service
metadata:name: my-loadbalancer-service
spec:selector:app: MyAppports:- protocol: TCPport: 80targetPort: 8080type: LoadBalancer


在这个示例中:

  • kind: Service 表示这是一个 Service 资源。
  • metadata 包含 Service 的元数据,例如名称。
  • spec 定义了 Service 的行为和配置。
  • selector 指定了 Pod 的标签选择器,选择带有 app=MyApp 标签的 Pod。
  • ports 定义了服务的端口映射。
  • port 是 Service 的端口(外部客户端访问的端口)。
  • targetPort 是 Pod 上的端口(容器内部应用监听的端口)。
  • type 明确指定了 Service 的类型为 LoadBalancer。

4、使用场景

1. 生产环境:

LoadBalancer 类型的 Service 适用于生产环境中需要高可用性和自动扩展的服务。


2. 外部访问:

当需要将集群内的服务暴露给外部客户端时,可以使用 LoadBalancer 类型的 Service。


3. 自动化运维:

结合云提供商的负载均衡服务,简化了运维工作,如流量管理、健康检查和故障转移等。


5、注意事项

1. 成本:

使用 LoadBalancer 类型的 Service 可能会产生额外的云提供商费用,特别是在大量使用外部负载均衡器的情况下。


2. 云依赖:

LoadBalancer 类型的 Service 依赖于云提供商的负载均衡服务,因此在本地集群或不支持负载均衡的环境中可能无法使用。


3. 配置限制:

云提供商的负载均衡器可能有一些配置限制,如最大连接数、带宽限制等,需要根据具体需求进行调整和优化。

五、ExternalName类型

在 Kubernetes 中,ExternalName 类型的 Service 是一种特殊的 Service 类型,它不通过 Kubernetes 的网络代理(如 kube-proxy)进行流量转发,而是将请求转发到指定的外部 DNS 名称。ExternalName 类型的 Service 主要用于将集群内的服务请求重定向到集群外部的服务,使得 Kubernetes 内部的服务可以透明地访问外部资源。

1、ExternalName 类型的特点和用途

1. DNS 名称映射:

ExternalName 类型的 Service 通过 DNS CNAME 记录将请求重定向到指定的外部 DNS 名称,而不是集群内部的 Pod IP 地址。


2. 无负载均衡:

ExternalName 只是简单地将请求重定向到外部服务,不提供负载均衡、健康检查或服务发现等功能。


3. 透明访问:

集群内的服务可以通过访问 ExternalName 类型的 Service 像访问集群内的其他服务一样透明地访问外部服务。


2、ExternalName 的工作机制

1. CNAME 记录:

ExternalName 类型的 Service 在 Kubernetes 内部 DNS 服务器中创建一个 CNAME 记录,将服务名称映射到指定的外部 DNS 名称。


2. DNS 查询:

当集群内的服务请求 ExternalName Service 时,DNS 查询会返回外部服务的 DNS 名称,客户端会直接访问该外部服务。


3、创建示例

以下是一个创建 ExternalName 类型 Service 的示例:

apiVersion: v1
kind: Service
metadata:name: my-external-service
spec:type: ExternalNameexternalName: external-service.example.com


在这个示例中:

  • kind: Service 表示这是一个 Service 资源。
  • metadata 包含 Service 的元数据,例如名称。
  • spec 定义了 Service 的行为和配置。
  • type 明确指定了 Service 的类型为 ExternalName。
  • externalName 是外部服务的 DNS 名称,例如 external-service.example.com。

4、使用场景

1. 访问外部 API:

当 Kubernetes 集群内的应用程序需要访问外部 API 或服务(如第三方 API 服务、外部数据库)时,可以使用 ExternalName 类型的 Service 进行透明访问。


2. 混合架构:

在混合云或多集群环境中,可以使用 ExternalName 类型的 Service 将请求重定向到外部或其他集群中的服务。


3. 简化配置:

ExternalName 类型的 Service 可以简化应用程序的配置,通过 Kubernetes 内部的 DNS 名称访问外部服务,而无需在应用程序代码中指定外部 DNS 名称。


5、注意事项

1. 无负载均衡和健康检查:

ExternalName 类型的 Service 不提供负载均衡和健康检查功能,依赖于外部服务的可用性和稳定性。


2. 外部服务依赖:

使用 ExternalName 类型的 Service 会引入对外部服务的依赖,确保外部服务的 DNS 名称解析和访问是稳定可靠的。


3. 网络延迟:

访问外部服务可能会引入额外的网络延迟,影响应用程序的性能,需要进行适当的性能评估和优化。

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Kubernetes的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/400273.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】事务

目录 什么是事务 事务操作 MULTI EXEC DISCARD WATCH UNWATCH 什么是事务 Redis 的事务和 MySQL 的事务概念上是类似的. 都是把⼀系列操作绑定成⼀组. 让这⼀组能够批量执⾏. 但是注意体会 Redis 的事务和 MySQL 事务的区别: 弱化的原⼦性: redis 没有 "回滚机制…

Zabbix自动导出PDF报告

zabbix6提供了定时导出PDF报告功能。此功能可按照Dashboard维度&#xff0c;定时自动导出报告&#xff0c;并通过邮件发送。 1.安装 zabbix 提供了官方的rhel8版本的rpm包&#xff0c;可使用yum方式安装&#xff0c;zabbix自动导出PDF功能是基于go环境的zabbix web service程…

C语言 ——— 在杨氏矩阵中查找具体的某个数

目录 何为杨氏矩阵 题目要求 代码实现 何为杨氏矩阵 可以把杨氏矩阵理解为一个二维数组&#xff0c;这个二维数组中的每一行从左到右是递增的&#xff0c;每一列从上到下是递增的 题目要求 在杨氏矩阵中查找具体的某个数 要求&#xff1a;时间复杂度小于O(N) 代码实现…

如何定义和引用二维数组

一.二维数组 常称为矩阵&#xff0c;把二维数组写成行和列的排列形式。、 二.怎么定义二维数组 float pay[3][5]; 以上定义了一个float型的二维数组&#xff0c;第1维有3个元素&#xff0c;第2维有6个元素。每一维的长度分别用一对方括号括起来。 二维数组定义的一般形式为 …

基于STM32开发的智能家居照明控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 家庭照明自动化节能照明管理常见问题及解决方案 常见问题解决方案结论 1. 引言 智能家居照明控制系统通过整合各种传感器和控制器&#xff0c;能够实现对家居照…

基于ICMP(Ping)的多线程网络通道监视程序(QT)开发

基于ICMP(Ping)的多线程网络通道监视程序(QT)开发 1、 ICMP原理简介 可参考 ICMP(Ping)功能原理及其C实现简介 。 2、 网络通道监视程序开发 设计原理&#xff1a; 通过PING 功能实现服务器、交换机、网闸等设备的网络检测&#xff0c;判断网络的否可达和TTL计算 。 具备功…

【应用层协议】自定义协议 {定义结构化数据;数据格式转换:序列化和反序列化,使用json库进行数据格式交换;分包和解包:为报文内容添加报头}

一、简单了解TCP协议&#xff08;引子&#xff09; 1.1 三次握手 三次握手就是客户端向服务端发起连接的过程 服务器初始化 调用socket&#xff0c;创建套接字文件 调用bind&#xff0c;将当前的文件描述符和ip/port绑定在一起&#xff1b;如果这个端口已经被其他进程占用了&…

外贸12年,通过6个方法,成交几千万订单

做外贸有12个年头了&#xff0c;各种各样的方法都有试过&#xff0c;我成交的这几千万订单&#xff0c;大部分都是通过这6个方法来的&#xff0c;下面我来给大家整理分享一下。 1.谷歌搜索 谷歌搜索算是做外贸入门级的基础技能了&#xff0c;要做好外贸&#xff0c;这个技能一…

86.小米相机修改拍照(尺寸,画幅,比例)的方法

目录 1.打开相机&#xff0c;拍照模式&#xff0c;上面有个箭头或三个点&#xff0c;点击 2.点击画幅 3.点击你想要的画幅即可。 想要修改手机照片的&#xff08;尺寸&#xff0c;画幅&#xff0c;比例&#xff09;时&#xff0c;总会去找分辨率&#xff0c;其实并不是&…

Leetcode - 周赛410

目录 一&#xff0c;3248. 矩阵中的蛇 二&#xff0c;3249. 统计好节点的数目 三&#xff0c;3250. 单调数组对的数目 I dfs记忆化 dfs记忆化1&#xff1a;1改递推 四&#xff0c;3251. 单调数组对的数目 II 一&#xff0c;3248. 矩阵中的蛇 本题就是一道纯模拟题&#x…

django高校毕业生就业推荐系统-计算机毕业设计源码26096

摘 要 当前就业市场竞争激烈&#xff0c;高校毕业生面临着就业难的问题&#xff0c;同时企业也面临招聘难、选人难的挑战。为了更好地对接高校毕业生和企业之间的需求&#xff0c;为毕业生提供个性化的就业求着信息&#xff0c;开发一套充分利用Django和Python技术实现的毕业生…

中科院TOP“灌水神刊”合集!年发文量动辄数千篇,TOP的地位,4区的录用率!

【SciencePub学术】本期&#xff0c;给大家推荐几本环境领域的“灌水神刊”&#xff01;均隶属于中科院TOP刊之列&#xff0c;但是每年庞大的发文量致使投稿接收率极高&#xff01;话不多说&#xff0c;想“灌水”的建议收藏&#xff01; 01 年刊文量4000 Journal of Cleaner …

【sgCreateAPIFunction】自定义小工具:敏捷开发→自动化生成API接口方法代码片段脚本(接口方法代码生成工具)

sgCreateAPIFunction源码 <template><!-- 前往https://blog.csdn.net/qq_37860634/article/details/141159084 查看使用说明 --><div :class"$options.name"><div class"sg-head">接口方法生成工具<el-dropdown:show-timeou…

Redis操作--RedisTemplate(一)介绍

一、介绍 1、简介 RedisTemplate 是 Spring Data Redis 提供的一个高级抽象&#xff0c;由 Spring 官方提供的方便操作 Redis 数据库的一个工具类&#xff0c;支持模板设计模式&#xff0c;使得操作 Redis 更加符合 Spring 的编程模型。还支持序列化机制&#xff0c;可以处理…

第二证券:虚拟现实概念强势,博士眼镜三连板,星星科技涨停

虚拟现实概念14日盘中再度走强&#xff0c;到发稿&#xff0c;硕贝德、博士眼镜、星星科技“20cm”涨停&#xff0c;亚世光电、亿道信息、卓翼科技亦涨停&#xff0c;佳禾智能涨超9%。 值得注意的是&#xff0c;博士眼镜已连续3个交易日涨停。公司昨日在出资者互动途径表示&am…

电脑开机后出现bootmgr is missing原因及解决方法

最近有网友问我为什么我电脑开机后出现bootmgr is missing&#xff0c;这个提示意思是:意思是启动管理器丢失&#xff0c;说明bootmgr损坏或者丢失&#xff0c;系统无法读取到这个必要的启动信息导致无法启动。原因有很多&#xff0c;比如我们采用的是uefi引导&#xff0c;而第…

离职保密协议是什么?怎么样才是合法的?如何维护公司权益?

“商贾之道&#xff0c;在于诚信&#xff1b;机密之重&#xff0c;犹胜千金。” 在历史的长河中&#xff0c;商业机密一直是商家兴衰成败的关键。 时至今日&#xff0c;随着科技的飞速发展&#xff0c;信息时代的浪潮更是将商业秘密的保护推向了新的高度。 离职保密协议&…

思科CCIE最新考证流程

CCIE CCIE&#xff0c;全称Cisco Certified Internetwork Expert,是美国Cisco公司于1993年开始推出的专家级认证考试。被全球公认为IT业最权威的认证&#xff0c;是全球Internetworking领域中最顶级的认证证书。 CCIE方向 CCIE主要有六大方向&#xff1a;企业基础架构Enterp…

重修设计模式-行为型-状态模式

重修设计模式-行为型-状态模式 先了解一下状态机的概念&#xff0c;状态机是软件编程中对一种状态场景的抽象表达&#xff0c;构成状态机三要素是&#xff1a;状态&#xff08;State&#xff09;、事件&#xff08;Event&#xff09;、动作&#xff08;Action&#xff09;&…

【测试】趣味五子棋项目测试报告

一、项目概述以及本次测试的目标 本项目是基于Web的五子棋实时对战应用&#xff0c;为用户提供多人实时游戏体验&#xff1b;项目采用了前后端分离的方法来实现&#xff0c;使用了数据库来存储相关的数据&#xff1b;前端主要有四个页面构成&#xff1a;登录页面&#xff0c;注…