【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: ClusterIPselector:app: my-appports:- port: 80targetPort: 8080

1.2 NodePort

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

1.3 LoadBalancer

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

1.4 ExternalName

  • 描述:将服务映射到外部 DNS 名称,不会创建代理。
  • 使用场景:适用于需要访问外部服务的场景。
apiVersion: v1
kind: Service
metadata:name: my-external-service
spec:type: ExternalNameexternalName: 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-appingress:- 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-containerimage: my-imagelivenessProbe:httpGet:path: /healthzport: 8080initialDelaySeconds: 5periodSeconds: 10readinessProbe:httpGet:path: /readyport: 8080initialDelaySeconds: 5periodSeconds: 10

8. 监控和日志

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

示例监控指标

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

9. 性能优化

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

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

10. 结论

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

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

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

相关文章

Openlayers高级交互(2/20):清除所有图层的有效方法

Openlayers项目中,经常会放置很多的图层,在业务操作的时候,会做出删除所有图层的行为。这里面给出了一个详细的方法,能够有效的解决 清除所有图层的问题。 效果图 专栏名称内容介绍Openlayers基础实战 (72篇)专栏提供73篇文章,为小白群体提供基础知识及示例演示,能解决…

[软件工程]—桥接(Brige)模式与伪码推导

桥接&#xff08;Brige&#xff09;模式与伪码推导 1.基本概念 1.1 动机 由于某些类型的固有的实现逻辑&#xff0c;使它们具有两个变化的维度&#xff0c;乃至多个维度的变化。如何应对这种“多维度的变化”&#xff1f;如何利用面向对象技术是的类型可以轻松的沿着两个乃至…

022_matrix_dancing_in_Matlab中求解一个超简单的矩阵问题

矩阵体操 首先&#xff0c;可以复习一下向量、矩阵和索引的基础知识。 向量约定矩阵约定矩阵索引 一般而言&#xff0c;我们利用进行计算大概就是以下的步骤&#xff1a; #mermaid-svg-UovF0Uldf5XxntJi {font-family:"trebuchet ms",verdana,arial,sans-serif;fo…

MFC实现以不规则PNG图片作为窗口背景

效果图 显示的不规则PNG图片 头文件 #pragma once #include <gdiplus.h> #pragma comment (lib,"Gdiplus.lib")// CShowBack 对话框class CShowBack : public CDialogEx {DECLARE_DYNAMIC(CShowBack) public:CShowBack(CWnd* pParent nullptr); // 标准构…

C++学习路线(二十二)

构造函数 构造函数作用 在创建一个新的对象时&#xff0c;自动调用的函数&#xff0c;用来进行“初始化”工作:对这个对象内部的数据成员进行初始化。 构造函数特点 1.自动调用(在创建新对象时&#xff0c;自动调用) 2.构造函数的函数名&#xff0c;和类名相同 3.构造函数…

react18中的jsx 底层渲染机制相关原理

jsx 底层渲染机制 渲染 jsx 时&#xff0c;会先解析 jsx&#xff0c;生成一个虚拟 dom(virtual dom)。然后将虚拟 dom 渲染成真实 dom。如果 jsx 中包含事件&#xff0c;会将事件绑定到真实 dom 上。 虚拟 dom 对象&#xff0c;是框架内部构建的一套对象体系&#xff0c;对象…

无废话、光速上手 React-Router

React-Router React Router 是一个用于 React 应用的声明式路由库。它允许开发者通过组件化的方式定义应用的路由结构&#xff0c;使得路由管理更加直观和可维护 安装 pnpm i react-router-dom定义路由 定义路由有两种方式&#xff0c;分别是对象路由和路由组件&#xff0c…

AIGC时代 | 从零到一,打造你的专属AI Chat应用!

文章目录 目标功能概要&#xff08;1&#xff09;Chat 交互界面&#xff08;2&#xff09;流式接口&#xff08;3&#xff09;多轮会话&#xff08;4&#xff09;打字效果 系统架构&#xff08;1&#xff09;大模型服务层&#xff08;2&#xff09;应用服务层&#xff08;3&…

深入解析东芝TB62261FTG,步进电机驱动方案

TB62261FTG是一款由东芝推出的两相双极步进电机驱动器&#xff0c;采用了BiCD工艺&#xff0c;能够提供高效的电机控制。这款芯片具有多种优秀的功能&#xff0c;包括PWM斩波、内置电流调节、低导通电阻的MOSFET以及多种步进操作模式&#xff0c;使其非常适合用于需要精确运动控…

微信小程序的日期区间选择组件的封装和使用

组件化开发是一种将大型软件系统分解为更小、更易于管理和复用的独立模块或组件的方法。这种方法在现代软件开发中越来越受到重视&#xff0c;尤其是在前端开发领域。微信小程序的日期区间选择组件的使用 wxml 代码 <view><view bind:tap"chooseData">…

第一个Qt程序

创建项目 进入ui界面拖一个按钮 在头文件中添加函数说明 #ifndef HELLO_H #define HELLO_H#include <QMainWindow>QT_BEGIN_NAMESPACE namespace Ui { class Hello; } QT_END_NAMESPACEclass Hello : public QMainWindow {Q_OBJECTpublic:Hello(QWidget *parent nullpt…

上海亚商投顾:沪指缩量调整 NMN概念股逆势大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天震荡调整&#xff0c;三大指数午后一度跌超1%&#xff0c;北证50指数则涨超4%&#xff0c;北交所个股…

前端发送请求格式

1.multipart/form-data格式发送请求参数 什么时候用&#xff1a; 当后端API要求以表单的形式接收数据时&#xff0c;比如<input type"text" name"username">和<input type"password" name"password">&#xff0c;这些数据…

html全局属性、框架标签

常用的全局属性&#xff1a; 属性名含义id 给标签指定唯一标识&#xff0c;注意&#xff1a;id是不能重复的。 作用&#xff1a;可以让label标签与表单控件相关联&#xff1b;也可以与css、JavaScript配合使用。 注意&#xff1a;不能再以下HTML元素中使用&#xff1a;<hea…

自动化部署-01-jenkins安装

文章目录 前言一、下载安装二、启动三、问题3.1 jdk版本问题3.2 端口冲突3.3 系统字体配置问题 四、再次启动五、配置jenkins5.1 解锁5.2 安装插件5.3 创建管理员用户5.4 实例配置5.5 开始使用5.6 完成 总结 前言 spingcloud微服务等每次部署到服务器上&#xff0c;都需要本地…

鸿蒙到底是不是纯血?到底能不能走向世界?

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 2016年5月鸿蒙系统开始立项。 2018年美国开始经济战争&#xff0c;其中一项就是制裁华为&#xff0c;不让华为用安卓。 2019年8月9日华为正式发布鸿蒙系统。问题就出在这里&#xff0c;大家可以仔细看。 安卓一…

从零开始学五笔(三):横区字根

从 1 区开始讲解字根&#xff1a; 先介绍按键的区位号、口诀内容、口诀说明然后列每个字根能组成什么汉字&#xff0c;难拆字将用中括号标出 ‍ G 键 区位号&#xff1a;11 口诀&#xff1a;王旁青头戋&#xff08;兼&#xff09;五一 说明&#xff1a; 王旁&#xff1a…

VUE, element-plus, table分页表格列增加下拉筛选多选框,请求后台

简介 为了方便表格查询时可以筛选列的值&#xff0c;需要给列增加筛选框&#xff08;多选框&#xff09;&#xff0c;element-plus提供了列的filter字段&#xff0c;但是基于表格数据的筛选&#xff0c;不会重新请求后台&#xff0c;而且当前表格数据有多少个条目&#xff0c;…

荣耀MagicOS 9.0发布会及开发者大会丨一图读懂应用服务及商业合作分论坛

更多优质流量变现服务&#xff0c;可点击荣耀广告变现服务查看&#xff1b; 荣耀远航计划——应用市场【耀闪行动】全新上线&#xff0c;更多激励及资源扶持可点击荣耀应用市场耀闪行动查看。

香港大学联合上海AI LAB,提出首个人机交互一体化大模型

导读&#xff1a; 具身智能为人与机器人的交互带来了更多便利&#xff0c;利用大语言模型&#xff08;LLMs&#xff09;的推理能力&#xff0c;能够将人类的语言指令逐步转换为机器人可以理解的指令信号。 然而&#xff0c;由于缺乏环境信息作为机器人理解环境和人类指令的上…