kubernetes》》k8s》》Service

Kubernetes 中的 Service 是用于暴露应用服务的核心抽象,为 Pod 提供稳定的访问入口、负载均衡和服务发现机制。Service在Kubernetes中代表了一组Pod的逻辑集合,通过创建一个Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并将请求负载分发到后端的各个容器应用上。
在这里插入图片描述
在这里插入图片描述

流量转发流程

1、客户端访问 Service 的 ClusterIP 或 DNS 名称。
2、kube-proxy 根据 Service 规则将请求转发到后端 Pod。
3、请求到达 Pod 后由应用处理。

ExternalName类型

在Kubernetes(k8s)中,创建一个ExternalName类型的Service可以让你将集群内部的服务通过DNS CNAME机制映射到一个外部域名上。这样,集群内部的Pod就可以通过内部服务名访问外部服务,而无需知道外部服务的真实域名。以下是创建ExternalName类型Service的步骤:

定义YAML文件
首先,你需要定义一个YAML文件来描述Service的属性。以下是一个示例YAML文件,用于创建一个ExternalName类型的Service:

apiVersion: v1
kind: Service
metadata:name: my-externalname-servicenamespace: default # 或者你指定的其他命名空间
spec:type: ExternalNameexternalName: www.example.com # 外部服务的域名

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

指定IP地址

apiVersion: v1
kind: Service
metadata:name: web-nodeport
spec:type: NodePortselector:app: webports:- port: 80targetPort: 80nodePort: 31000  # 手动指定节点端口(可选)ClusterIP: IP地址

HeadLess Service


apiVersion: v1
kind: Service
metadata:name: web-nodeport
spec:type: NodePortselector:app: webports:- port: 80targetPort: 80nodePort: 31000  # 手动指定节点端口(可选)ClusterIP: None
# nginx 部署的yaml文件
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginxweb
spec:selector:matchLabels:app: nginxweb1replicas: 2template:metadata:labels:# 容器标签的名字,发布 Service时,selector 需要和这里对应app: nginxweb1spec:# 配置容器,数组类型,说明可以配置多个容器containers:# 容器名称- name: nginxwebc# 容器镜像image: nginx:latestimagePullPolicy: IfNotPresent# 暴露端口ports:-  containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginxweb-service
spec:externalTrafficPolicy: Clusterselector:# 选择哪一个容器标签作为服务, labels:》》 app:》》 nginxweb1   通过容器标签关联的 # 上面 Deployment可以单独一个yaml文件  只有知道 label标签就可以了 ,不需要知道 pod的ip地址。  相当于面对服务名不是IP地址app: nginxweb1ports:- protocol: TCP# Service 暴露的端口port: 80# Pod上的端口 这里是将 Service 暴露的端口 转发到 Pod 端口上targetPort: 80nodePort: 30080type: NodePort

K8S 分配给Service一个固定IP,这是一个虚拟IP(也称为 ClusterIP),并不是一个真实存在的IP,而是由K8S虚拟出来的,外部是寻址不到的。在K8S系统中,实际上是由kubernetes Proxy 组件负责实现虚拟IP路由和转发的。所以说在K8s node中我们都运行了Kubernetest Proxy,从而在容器覆盖网络之上又实现了Kubernetes层级的虚拟转发网络。
在这里插入图片描述

通过服务名访问》要在Pod内部才能通过服务名访问

在这里插入图片描述

# 同一命名空间内的 Service 访问
域名格式:<service-name>
# 跨命名空间的 Service 访问
域名格式:<service-name>.<namespace>.svc.cluster.local
# nginx 部署的yaml文件
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginxweblabels:app: niginx-l1
spec:selector:matchLabels:app: nginxweb1replicas: 2template:metadata:labels:# 容器标签的名字,发布 Service时,selector 需要和这里对应app: nginxweb1spec:# 配置容器,数组类型,说明可以配置多个容器containers:# 容器名称- name: nginxwebc# 容器镜像image: nginx:latestimagePullPolicy: IfNotPresent# 暴露端口ports:-  containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginxweb-servicelabels:app: niginx-s
spec:selector:app: nginxweb1ports:- protocol: TCP# Service 暴露的端口port: 80# Pod上的端口 这里是将 Service 暴露的端口 转发到 Pod 端口上targetPort: 80type: ClusterIP

在这里插入图片描述

在这里插入图片描述

创建Service会自动创建同名的Endpoint

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Service 不仅可以代理Pod,还可以代理任意其他后端。

比如代理K8s外部的服务。

虽然不常见,但Endpoint也可以手动创建。这通常用于特殊情况,比如需要显式指定Endpoint的IP地址和端口,例如在与外部非K8s管理的服务进行集成时,可能需要手动创建Endpoint来定义服务的访问信息,以便将其纳入K8s的服务管理体系中。

apiVersion: v1
kind: Endpoints
metadata:name: my-endpoint
subsets:- addresses:- ip: 地址ports:- port: 2020protocol: TCP
---
apiVersion: v1
kind: Service
metadata:name: my-endpoint
spec:ports:- protocol: TCPport: 80targetPort: 2020nodePort: 30100type: NodePort

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【HDFS】EC重构过程中的校验功能:DecodingValidator

一、动机 DecodingValidator是在HDFS-15759中引入的一个用于校验EC数据重构正确性的组件。 先说下引入DecodingValidator的动机,据很多已知的ISSUE(如HDFS-14768, HDFS-15186, HDFS-15240,这些目前都已经fix了)反馈, EC在重构的时候可能会有各种各样的问题,导致数据错误…

现代c++获取linux系统架构

现代c获取linux系统架构 前言一、使用命令获取系统架构二、使用c代码获取系统架构三、验证四、总结 前言 本文介绍一种使用c获取linux系统架构的方法。 一、使用命令获取系统架构 linux系统中可以使用arch或者uname -m命令来获取当前系统架构&#xff0c;如下图所示 archuna…

didFinishLaunching 与「主线程首次 idle」, 哪个是更优的启动结束时间点 ?

结论先行 在这两个候选时间点里—— application:didFinishLaunchingWithOptions: 执行结束主线程第一次进入 idle&#xff08;RunLoop kCFRunLoopBeforeWaiting&#xff09; 若你只能二选一&#xff0c;以「主线程首次 idle」作为 启动结束 更合理。它比 didFinishLaunchin…

Vue3 + TypeScript中defineEmits 类型定义解析

TypeScript 中 Vue 3 的 defineEmits 函数的类型定义&#xff0c;用于声明组件可以触发的事件。以下是分步解释&#xff1a; 1. 泛型定义 ts <"closeDialog" | "getApplySampleAndItemX"> 作用&#xff1a;定义允许的事件名称集合&#xff0c;即组…

树莓派超全系列教程文档--(34)树莓派配置GPIO

配置GPIO GPIO控制gpio 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 GPIO控制 gpio 通过 gpio 指令&#xff0c;可以在启动时将 GPIO 引脚设置为特定模式和值&#xff0c;而以前需要自定义 dt-blob.bin 文件。每一行都对一组引脚应用相同的设…

AladdinEdu(H卡GPU算力平台)使用教程: 1)注册与开通流程 2)插件使用流程

一、注册与开通流程 首先进入AladdinEdu官网&#xff1a;AladdinEdu-同学们用得起的H卡算力平台-高效做AI就上Aladdin 完成注册&#xff0c;并进行学生认证&#xff1a;学生认证账户&#xff0c;认证期间享受教育优惠价。 登录官网进入控制台 二、插件使用流程 VScode中…

精益数据分析(6/126):深入理解精益分析的核心要点

精益数据分析&#xff08;6/126&#xff09;&#xff1a;深入理解精益分析的核心要点 在创业和数据驱动的时代浪潮中&#xff0c;我们都在不断探索如何更好地利用数据推动业务发展。我希望通过和大家分享对《精益数据分析》的学习心得&#xff0c;一起在这个充满挑战和机遇的领…

2.深入剖析 Rust+Axum 类型安全路由系统

摘要 详细解读 RustAxum 路由系统的关键设计原理&#xff0c;涵盖基于 Rust 类型系统的路由匹配机制、动态路径参数与正则表达式验证以及嵌套路由与模块化组织等多种特性。 一、引言 在现代 Web 开发中&#xff0c;路由系统是构建 Web 应用的核心组件之一&#xff0c;它负责…

运筹学之模拟退火

目录 一、历史二、精髓思想三、案例与代码实现 一、历史 问&#xff1a;谁在什么时候提出模拟退火&#xff1f;答&#xff1a;模拟退火算法&#xff08;Simulated Annealing&#xff0c;SA&#xff09;是由斯图尔特柯尔斯基&#xff08;Scott Kirkpatrick&#xff09; 等人在 …

android测试依赖

Android 项目中常用的测试相关库 1. androidx.arch.core:core-testing:2.2.0 作用&#xff1a; 提供与 Android Architecture Components&#xff08;如 LiveData、ViewModel&#xff09;相关的测试工具。主要用于测试基于 LiveData 的异步操作。 常见功能&#xff1a; 即时…

stack,queue和priority_queue

1. stack 1.1 stack 的介绍 栈是一种容器适配器&#xff0c;专门设计用于LIFO环境&#xff08;后进先出&#xff09;&#xff0c;其中元素仅从容器的一端插入和提取。 容器适配器&#xff0c;也就是使用特定容器类的封装对象作为其底层容器&#xff0c;提供一组特定的成员函…

MinnowBoard MAX单板UEFI BIOS代码编译教程

此教程用于UEFI EDK2代码的研究&#xff0c;虽然EDK2框架代码开源&#xff0c;但是都是在模拟器上跑仿真&#xff0c;差点意思&#xff0c;搞过嵌入式的应该有一个共识&#xff0c;是骡子是马&#xff0c;你得把板子点亮啊。MinnowBoard MAX单板是intel10多年前发布的软硬件全部…

AI Transformers 架构体系 权重文件类型 safeterson和gguf格式转换【2-1】

模型权重文件&#xff1a;存储训练好的模型参数,也就是w和b&#xff0c;是模型推理和微调的基础 .pt、.ckpt、.safetensors、gguf 配置文件&#xff1a;确保模型架构的一致性&#xff0c;使得权重文件能够正确加载 config.json、generation_config.json 词汇表文件&#xff1a;…

K8S微服务部署及模拟故障观测

概述 本文介绍了如何在 Kubernetes (K8S) 集群中部署微服务&#xff0c;并模拟常见的故障场景&#xff08;如 Pod 故障、节点故障、网络故障&#xff09;以测试系统的容错能力。通过本实验&#xff0c;了解 Kubernetes 的自动恢复机制以及如何通过监控和日志分析快速定位和解决…

OpenStack Yoga版安装笔记(23)Swift安装

一、官方文档 Object Storage Install Guide — Swift 2.29.3.dev5 documentation 二、环境准备 之前的实验&#xff0c;已经有controller, compute1, block1节点&#xff0c;并已经完成Keystone、Glance、Nova、Neutron、Cinder等主要OpenStack Service的安装。 此处新增…

06-libVLC的视频播放器:推流RTMP

创建媒体对象 libvlc_media_t* m = libvlc_media_new_path(m_pInstance, inputPath.toStdString().c_str()); if (!m) return -1; // 创建失败返回错误 libvlc_media_new_path:根据文件路径创建媒体对象。注意:toStdString().c_str() 在Qt中可能存在临时字符串析构问题,建议…

少儿编程路线规划

少儿编程路线规划—一文写明白 现在有很多的编程机构&#xff0c;五花八门的。我有幸也见识到了大家的营销策略。这些策略有黑有白吧&#xff0c;从业几年&#xff0c;沉淀下来一些客户角度的干货&#xff0c;分享给大家。 如果是想以很远很远的就业为目的&#xff0c;毕业就…

ios app的ipa文件提交最简单的方法

ipa文件是ios的app打包后生成的二级制文件&#xff0c;在上架app store connect或做testflight测试的时候&#xff0c;它提示我们需要使用xcode、transporter或xcode命令行等方式来上传。 而xcode、transporter或xcode命令行的安装都需要使用mac电脑&#xff0c;假如没有mac电…

怎么查看LLM Transformer 架构进行并行计算和设备映射

怎么查看LLM Transformer 架构进行并行计算和设备映射 num_hidden_layers = model.config.num_hidden_layers print(num_hidden_layers) print(model) LLM(大语言模型)通常是基于 Transformer 架构 构建的,它由多个模块化的层(Layer)堆叠组成,每个层都有其独特的作用。…

微信小程序获得当前城市,获得当前天气

// // 获取用户当前所在城市 // wx.getLocation({// type: wgs84, // 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 // success: function(res) {// console.log(获取位置成功, res); // // 使用腾讯地图API进行逆地址解析 // wx…