【K8S系列】Kubernetes Service 基础知识 详细介绍

在这里插入图片描述

在 Kubernetes 中,Service 是一种抽象的资源,用于定义一组 Pod 的访问策略。它为这些 Pod 提供了一个稳定的访问入口,解决了 Pod 可能频繁变化的问题。本文将详细介绍 Kubernetes Service 的类型、功能、使用场景、DNS 和负载均衡等方面。

1. Service 的类型

Kubernetes 提供了几种不同类型的 Service,以满足不同的网络访问需求:

1.1 ClusterIP

  • 描述:默认类型,仅在集群内部可访问,提供一个内部 IP 地址。
  • 使用场景:适用于集群内部服务之间的通信。
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: ClusterIP
  selector:
    app: my-app
  ports:
    - port: 80
      targetPort: 8080

1.2 NodePort

  • 描述:在每个节点的指定端口上公开服务,允许外部流量通过节点的 IP 地址访问。
  • 使用场景:适用于开发和测试环境,或当没有负载均衡器时。
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 30007

1.3 LoadBalancer

  • 描述:在支持负载均衡的云环境中创建一个外部负载均衡器,将流量分发到对应的 Pod。
  • 使用场景:适用于生产环境,提供高可用性和易于访问的外部服务。
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  selector:
    app: my-app
  ports:
    - port: 80
      targetPort: 8080

1.4 ExternalName

  • 描述:将服务映射到外部 DNS 名称,不会创建代理。
  • 使用场景:适用于需要访问外部服务的场景。
apiVersion: v1
kind: Service
metadata:
  name: my-external-service
spec:
  type: ExternalName
  externalName: example.com

2. Service 的功能

2.1 负载均衡

Service 提供内置的负载均衡功能,能够自动将流量分发到后端的 Pod。Kubernetes 使用 iptables 或 IPVS 来实现流量的均匀分配。

2.2 服务发现

Service 为 Pod 提供了一个稳定的访问方式,Pod 的 IP 地址可能会变化,但 Service 的 IP 地址和 DNS 名称保持不变。其他 Pod 可以通过 Service 名称访问:

curl http://my-service

2.3 端口映射

Service 允许将外部流量的端口映射到 Pod 内部的端口。例如,将 Service 的 80 端口映射到 Pod 的 8080 端口。

3. Service 的使用场景

3.1 微服务架构

在微服务架构中,各个服务之间需要相互通信。通过使用 Service,可以确保每个服务都有一个稳定的访问入口。

3.2 负载均衡

在处理高流量应用时,Service 可以将请求均匀分配到多个 Pod,以提高应用的可用性和响应速度。

3.3 外部访问

使用 NodePort 或 LoadBalancer 类型的 Service,可以将应用暴露给外部用户,方便访问。

4. DNS 和 Service

Kubernetes 内置了 DNS 服务,为每个 Service 提供了一个 DNS 名称。默认情况下,Service 的 DNS 名称格式为 <service-name>.<namespace>.svc.cluster.local

4.1 示例

假设有一个名为 my-service 的 Service 在 default 命名空间中,其 DNS 名称为:

my-service.default.svc.cluster.local

其他 Pod 可以通过这个 DNS 名称访问该 Service。

5. 选择器和标签

Service 使用标签选择器来确定哪些 Pod 包含在服务后端。选择器可以精确匹配(如等于)或使用更复杂的逻辑(如 in、notin)。

示例

spec:
  selector:
    app: my-app

这种方式将会选择所有带有 app=my-app 标签的 Pod。

6. 访问控制

Kubernetes 提供了网络策略(Network Policies)来控制不同 Pod 之间的通信。通过定义网络策略,可以限制哪些 Pod 可以访问特定的 Service。

示例

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-only-my-app
spec:
  podSelector:
    matchLabels:
      app: my-app
  ingress:
  - from:
    - podSelector:
        matchLabels:
          role: frontend

7. Service 的健康检查

Kubernetes 支持通过 liveness 和 readiness 探针来检查 Pod 的健康状态。Service 仅将流量发送到健康的 Pod。

示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  template:
    spec:
      containers:
      - name: my-container
        image: my-image
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 10

8. 监控和日志

使用 Service 时,监控其性能和流量至关重要。可以结合工具如 Prometheus、Grafana 等进行监控。

示例监控指标

  • 请求速率
  • 错误率
  • 响应时间

9. 性能优化

为提高 Service 的性能,可以考虑以下几点:

  • 使用适当的 Service 类型:根据需求选择 ClusterIP、NodePort 或 LoadBalancer。
  • 合理配置端口映射:避免不必要的端口转发。
  • 使用网络策略:限制流量以提高安全性和性能。

10. 结论

Kubernetes Service 是集群中至关重要的组件,为 Pod 提供了稳定的访问方式和负载均衡能力。通过合理配置和使用 Service,可以有效管理和优化微服务架构,确保应用的高可用性和可扩展性。了解 Service 的工作原理和使用场景,有助于更好地构建和维护 Kubernetes 集群。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

react 总结+复习+应用加深

文章目录 一、React生命周期1. 挂载阶段&#xff08;Mounting&#xff09;补充2. 更新阶段&#xff08;Updating&#xff09;补充 static getDerivedStateFromProps 更新阶段应用补充 getSnapshotBeforeUpdate3. 卸载阶段&#xff08;Unmounting&#xff09; 二、React组件间的…

windows 训练yolov8官方数据集

第一步&#xff1a;安装Anaconda3-2024.06-1-Windows-x86_64.exe 下载地址&#xff1a;https://repo.anaconda.com/archive/ 第二步&#xff1a;创建环境 打开Anaconda Prompt 输入 conda info -e 打印&#xff1a; 已经安装了一些环境&#xff0c;然后我们创建新的环境&a…

大模型面试挺水的,面试官听到这些直接过

AI大模型600道面试总结(LLM) 1、目前主流的开源模型体系有哪些? 目前 主流的开源模型体系 分三种: 第一种:prefixDecoder系 介绍:输入双向注意力&#xff0c;输出单向注意力 代表模型:ChatGLM、ChaGLM2、U-PaLM 第二种:causal Decader系 介绍:从左到右的单向注意力 代表…

【状态机DP】力扣1186. 删除一次得到子数组最大和

给你一个整数数组&#xff0c;返回它的某个 非空 子数组&#xff08;连续元素&#xff09;在执行一次可选的删除操作后&#xff0c;所能得到的最大元素总和。换句话说&#xff0c;你可以从原数组中选出一个子数组&#xff0c;并可以决定要不要从中删除一个元素&#xff08;只能…

驱动-----LED

前面我们学习了demo1的驱动的编写,在写LED的时候,我们可以在demo1的基础上修改。 1.首先就是修改名字,把所有的demo改成led,使用一个字符串替换指令。 2.设备号要变 3.想操作硬件,LED的初始化,亮灭 LED的初始化,在open的时候实现。 亮灭在write的时候实现。 现在就是…

技术成神之路:设计模式(二十三)解释器模式

相关文章&#xff1a;技术成神之路&#xff1a;二十三种设计模式(导航页) 介绍 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;用于定义一种语言的文法表示&#xff0c;并提供一个解释器来处理这种文法。它用于处理具有特定语法或表达…

移远通信斩获两项车载大奖,引领全球智能网联汽车产业发展

10月24日&#xff0c;由盖世汽车主办的2024第六届金辑奖中国汽车新供应链百强颁奖盛典在上海隆重举行。 作为全球领先的物联网和车联网整体解决方案供应商&#xff0c;移远通信凭借智能座舱模组AG855G、车载5G模组AG59x系列&#xff0c;以及公司在海外市场的优异表现&#xff0…

Mac 上无法烧录 ESP32C3 的问题记录:A fatal error occurred:Failed to write to target RAM

文章目录 问题描述驱动下载地址问题解决&#xff1a;安装 CH343 驱动踩的坑日志是乱码 问题描述 我代码编译可以&#xff0c;但是就是烧录不上去 A fatal error occurred:Failed to write to target RAM(result was 01070000:Operation timed out) Uploaderror:上传失败&…

selenium脚本编写及八大元素定位方法

selenium脚本编写 上篇文章介绍了selenium环境搭建&#xff0c;搭建好之后就可以开始写代码了 基础脚本,打开一个网址 from selenium import webdriver driver webdriver.Chrome()#打开chrome浏览器 driver.get(https://www.baidu.com) #打开百度 打开本地HTML文件 上篇…

ctfshow(265->266)--反序列化漏洞--指针引用与php://input读取请求体

Web265 源代码&#xff1a; error_reporting(0); include(flag.php); highlight_file(__FILE__); class ctfshowAdmin{public $token;public $password;public function __construct($t,$p){$this->token$t;$this->password $p;}public function login(){return $this…

企业贷款大揭秘:税贷VS票贷,哪个更适合你?

在金融界&#xff0c;资金就像是现代经济的血液&#xff0c;特别是对于企业的发展来说&#xff0c;银行的资金支持简直是不可或缺的。最近&#xff0c;多家银行可是动作频频&#xff0c;加快了资金投放的步伐&#xff0c;尤其是制造业、小微企业、专精特新以及“三农”这些领域…

网络编程 Linux环境 C语言实现

进程间通信的延续 跨电脑进程间通信 一、远程通信方式 电路交换------老式有线电话通信 ​ 报文交换 ​ 分组交换 支持分时机制的(分片机制)报文交换 ​现行网络大部分都是采用分组交换形式 二、网络&互联网&因特网 网络Network&#xff1a;多台计算机通过某种传输…

Javaee---多线程(一)

文章目录 1.线程的概念2.休眠里面的异常处理3.实现runnable接口4.匿名内部类子类创建线程5.匿名内部类接口创建线程6.基于lambda表达式进行线程创建7.关于Thread的其他的使用方法7.1线程的名字7.2设置为前台线程7.3判断线程是否存活 8.创建线程方法总结9.start方法10.终止&…

微积分复习笔记 Calculus Volume 1 - 3.5 Derivatives of Trigonometric Functions

3.5 Derivatives of Trigonometric Functions - Calculus Volume 1 | OpenStax

西门子S7-200 SMART 多泵轮换功能库案例下载

通用描述 在现场使用多台风机水泵的场合&#xff0c;需要考虑对多台风机水泵进行轮换&#xff0c;因此如何合 理的对多台风机水泵进行轮换就成了一道难题&#xff0c;本文针对上述情况&#xff0c;专门开发了多 泵轮换的应用库&#xff0c;可以方便统计泵的运行时间&#xf…

Python print()输出颜色设置

标准格式 print("\033[显示方式&#xff1b;前景颜色&#xff1b;背景颜色m…\033[0m") 显示方式 前景颜色和背景颜色 print("\033[0;37;41m我是小杨我就这样\033[0m") print("\033[0;37;42m我是小杨我就这样\033[0m") print("\033[0;37;…

AI助理与知识库:企业新人培训的革新力量

在快速变化的商业环境中&#xff0c;企业新人培训模式的创新已成为提升组织效能的关键。特别是人工智能&#xff08;AI&#xff09;助理的引入&#xff0c;结合知识库的应用&#xff0c;为企业新人培训带来了革命性的变化。以下是对这一变革的深入探讨与前景展望&#xff0c;旨…

文本转语音工具 | Balabolka v2.15.0.880 便携版

Balabolka是一款功能强大的文本转语音&#xff08;TTS&#xff09;软件&#xff0c;它能够将文字转换成语音并保存为多种音频格式&#xff0c;如WAV、MP3、OGG或WMA。这款软件兼容多种文件格式&#xff0c;包括但不限于AZW、CHM、DjVu、DOC、EPUB、FB2、LIT、MOBI、ODT、PDF、P…

3.堆栈的理解

堆栈是同一段进行插入删除的线性表 &#xff08;先入后出&#xff09; 栈式最基础的常见的数据结构之一 进入一个新的函数的时候 会开辟一个空间&#xff0c;存放需要的数据 int add(int a,int b,int c) {return abc } int main() {add(1,2,3) }//add&#xff08;1&#xff…

Redis 线程控制 总结

前言 相关系列 《Redis & 目录》&#xff08;持续更新&#xff09;《Redis & 线程控制 & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Redis & 线程控制 & 总结》&#xff08;学习总结/最新最准/持续更新&#xff09;《Redis &a…