k8s 四种Service类型(ClusterIP、NodePort、LoadBalancer、ExternalName)详解

news2024/9/20 16:42:12

🐇明明跟你说过:个人主页

🏅个人专栏:《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: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: 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: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30001
  type: 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: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: 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: ExternalName
  externalName: 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.coloradmin.cn/o/1990870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

细说盘点10种自动化拣货技术

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 在现代物流和仓储管理中&#xff0c;拣货技术的选择对于提高效率和降低成本至关重要。 本文将为您介绍10种流行的拣货技术&#xff0c;并分享它们的参数和应用场景&#xff0c;以帮助…

使用本地大模型从论文PDF中提取结构化信息

1 安装ollama 点击前往网站 https://ollama.com/ &#xff0c;下载ollama软件&#xff0c;支持win、Mac、linux 2 下载LLM ollama软件目前支持多种大模型&#xff0c; 如阿里的&#xff08;qwen、qwen2&#xff09;、meta的(llama3、llama3.1)&#xff0c; 读者根据自己电脑…

《加密与解密》读书笔记1

1、常用断点包括INT3断点、硬件断点、内存断点和消息断点。 1.1 INT断点&#xff1a;一个常用的断点&#xff0c;在OD和x64dbg中按F2快捷键来设置/取消断点。当执行一个INT3断点时&#xff0c;该地址处的内容就被调试器使用INT3指令替换掉了&#xff0c;此时OD和x64dbg将INT3隐…

flink1.18 编译遇到的问题

1. flink-runtime-web编译失败 源码编译时一直卡在 [INFO] Running ‘npm ci --cache-max0 --no-save’ in 处理方法&#xff1a; 修改flink-runtime-web/pom.xml文件 将<arguments>ci --cache-max0 --no-save ${npm.proxy}</arguments> 替换为&#xff1a;<a…

Delphi5实现鱼C记事本程序(TRichEdit版)

效果图 鱼C记事本程序 程序图标 Delphi5的程序图标需要ICO后缀名的文件&#xff0c;已经上传到CSDN&#xff0c;可以用一下。 有什么快捷生成ICO文件的方法&#xff0c;可以在评论区分享一下噢&#xff0c;谢谢&#xff01;&#xff01; MainMenu菜单组件 TRichEdit 组件 在…

多线程(2)——线程的六种状态

1. 线程的所有状态 进程状态&#xff1a; 就绪&#xff1a;正在 cpu 上执行&#xff0c;或者随时可以去 cpu 上执行 阻塞&#xff1a;暂时不能参与 cpu 执行 Java 的线程&#xff0c;对于状态做了更详细的区分&#xff0c;不仅仅是就绪和阻塞了&#xff0c;六种&#xff1a…

2024懒人精灵七天从入门到精通实战课程(付源码)

写在开始&#xff1a;对于想学习自动化技术的同学&#xff0c;给你们一些建议&#xff1b;如果你已经选择开始&#xff0c;还在坚持&#xff0c;我奉劝你坚持下去&#xff0c;水到渠成&#xff1b;如果你还没开始就选择放弃&#xff0c;我建议你就此放弃&#xff0c;老师也不鼓…

合宙Air780EP_LuatOS_MQTT应用指南

简介 Air780EP 是合宙的低功耗4G模组之一&#xff0c;支持LuatOS的脚本二次开发&#xff0c;即使是不太懂技术的老板&#xff0c;也能轻松使用 Air780EP开发产品。 本文应各位大佬邀请&#xff0c;详细讲解了Air780EP 的MQTT的应用教程&#xff01; MQTT协议具有长连接、低带宽…

开源AI智能名片商城系统:重塑大零售生态的创新实践与深度分析

摘要&#xff1a;在数字经济浪潮的推动下&#xff0c;零售行业正经历着前所未有的变革。传统零售模式面临消费者需求多样化、市场竞争加剧等多重挑战&#xff0c;而开源AI智能名片商城系统的出现&#xff0c;为零售行业的转型升级提供了新的思路和技术支持。本文深入探讨了开源…

C语言----字符串的匹配

字符串的匹配 实例说明&#xff1a; 本实例实现对两个字符串进行匹配操作&#xff0c;即在第一个字符串中查找是否存在第二个字符串。如果字符串完全匹配&#xff0c;则提示匹配的信息&#xff0c;并显示第二个字符串在第一个字符串中的开始位置&#xff0c;否则提示不匹配。 …

STM32 - 笔记

1 STM32的串口通信 【keysking的STM32教程】 第8集 STM32的串口通信_哔哩哔哩_bilibili 波特律动 串口助手

观成科技:海莲花活跃木马KSRAT加密通信分析

概述 自2023年8月至今&#xff0c;海莲花组织多次利用KSRAT远控木马对我国发起攻击。KSRAT通过HTTP协议与C&C服务器进行通信&#xff0c;每个样本都使用了不同的URL。其心跳包采用XOR算法进行加密&#xff0c;而控制指令包和数据回传包则使用了XOR以及“XORAES-128-CBC”组…

【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)

文章目录 递归是什么递归的思想递归的限制条件 递归举例求n的阶乘分析和代码实现画图推演 顺序打印一个整数的每一位分析和代码实现画图推演 递归与迭代递归求第n个斐波那契数迭代求第n个斐波那契数 拓展练习青蛙跳台阶问题递归求解迭代求解 汉诺塔问题 递归是什么 递归是学习…

FPGA使用sv生成虚拟单音数据

FPGA使用sv生成虚拟单音数据 之前一直使用matlab生成虚拟的数据&#xff0c;导出到txt或是coe文件中&#xff0c;再导入到fpga中进行仿真测试。 复杂的数据这样操作自然是必要的&#xff0c;但是平日使用正弦数据进行测试的话&#xff0c;这样的操作不免复杂&#xff0c;今日…

CentOS 安装Redis

在 CentOS 安装 Redis 操作系统&#xff1a;centos-7.9.2009-Core 1. 更新系统 首先&#xff0c;确保你的系统是最新的&#xff1a; sudo yum update -y2. 安装 EPEL 仓库 Redis 可能不在默认的 CentOS 仓库中&#xff0c;因此你需要安装 EPEL&#xff08;Extra Packages f…

【源码+文档+调试讲解】活力健身馆管理系统

摘 要 活力健身馆管理系统的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品&#xff0c;体验高科技时代带给人们的方便&#xff0c;同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓&#xff0c;iOS相比较起来&am…

springboot狱内罪犯危险性评估系统的设计与实现论文源码调试讲解

第一章系统成功运行案例 第2章 程序开发技术 2.1 Mysql数据库 开发的程序面向用户的只是程序的功能界面&#xff0c;让用户操作程序界面的各个功能&#xff0c;那么很多人就会问&#xff0c;用户使用程序功能生成的数据信息放在哪里的&#xff1f;这个就需要涉及到数据库的知识…

CTFHUB-web-RCE-eval执行

开启题目 查看源码发现直接用蚁剑连接就可以&#xff0c;连接之后发现成功了

冒烟测试:快速初步检测软件稳定性的关键步骤

目录 前言1. 冒烟测试的定义1.1 冒烟测试的起源1.2 冒烟测试的特点 2. 冒烟测试的重要性2.1 确保构建稳定性2.2 早期发现重大问题2.3 提高测试效率 3. 冒烟测试的实施方法3.1 制定测试计划3.2 选择测试用例3.3 执行测试3.4 分析测试结果 4. 冒烟测试的最佳实践4.1 自动化冒烟测…

Opera浏览器与IPXProxy代理IP集成步骤详解

​对于经常需要使用公共WiFi网络进行网络操作的人来说&#xff0c;安全性是至关重要的。作为Opera浏览器的用户&#xff0c;我非常关注隐私安全&#xff0c;也尝试过各种提高安全性的方法&#xff0c;其中使用IPXProxy代理IP是不错的方法之一。下面为大家带来Opera浏览器与IPXP…