当前位置: 首页 > news >正文

k8s Service四层负载:服务端口暴露

在 Kubernetes 中,通过 Service 可以实现四层(L4)负载均衡,将流量分发至后端的 Pod。四层负载主要用于传输层(TCP/UDP),而不像七层负载均衡(HTTP/HTTPS)那样进行应用层的流量处理。以下是几种方式来实现服务端口的暴露:

1. ClusterIP

  • 特点:默认类型,仅在集群内部暴露服务。
  • 用途:适合内部通信,无法直接从外部访问。
  • 实现方式:Service 会分配一个虚拟 IP,集群中的 Pod 通过这个 IP 访问目标服务。
  • 配置示例
    apiVersion: v1
    kind: Service
    metadata:name: my-service
    spec:selector:app: my-appports:- protocol: TCPport: 80targetPort: 8080type: ClusterIP
    

2. NodePort

  • 特点:将服务暴露在每个节点的指定端口上,外部可以通过节点 IP 访问服务。
  • 用途:适合集群外部直接访问的服务,端口范围通常为 30000-32767。
  • 实现方式:集群内的每个节点都会监听一个端口,并将流量转发到 Service。
  • 配置示例
    apiVersion: v1
    kind: Service
    metadata:name: my-service
    spec:type: NodePortselector:app: my-appports:- port: 80targetPort: 8080nodePort: 30080  # 可指定,也可让系统自动分配
    

3. LoadBalancer

  • 特点:在支持 LoadBalancer 的云平台(如 AWS、GCP)上,通过云提供商的负载均衡服务将流量分发到 Service。
  • 用途:适合外部流量需要访问集群内部服务的情况。
  • 实现方式:Kubernetes 通过云提供商 API 创建外部负载均衡器,并将流量导向集群节点的 NodePort。
  • 配置示例
    apiVersion: v1
    kind: Service
    metadata:name: my-service
    spec:type: LoadBalancerselector:app: my-appports:- port: 80targetPort: 8080
    

4. ExternalName

  • 特点:服务的类型为 ExternalName 时,Service 不会创建代理,而是通过 DNS 解析外部域名。
  • 用途:适合通过 Kubernetes 内部名称访问外部服务。
  • 配置示例
    apiVersion: v1
    kind: Service
    metadata:name: my-service
    spec:type: ExternalNameexternalName: example.com
    

在生产环境中,NodePortLoadBalancer 是最常用的两种外部暴露服务的方法。
在 Kubernetes 的 Service 配置中,targetPort 指定的是容器端口(即实际运行在 Pod 内的应用程序端口),它将 Kubernetes Service 转发的流量发送到对应的容器端口。以下是关于每个字段的详细说明:

  • port:这是 Service 的端口,对外暴露的入口端口。用户访问 Service 时使用该端口。
  • targetPort:这是容器端口,即 Service 接收到的流量最终转发到 Pod 内部的端口(通常是容器的应用端口)。
  • nodePort(仅 NodePort 类型的 Service): 在 Kubernetes 集群中的每个节点上开放的端口,允许外部流量通过节点 IP + 该端口访问 Service。

例如,以下配置中 targetPort: 8080 表示容器端口:

apiVersion: v1
kind: Service
metadata:name: my-service
spec:type: NodePortselector:app: my-appports:- port: 80         # Service 的入口端口targetPort: 8080 # 容器端口nodePort: 30080  # 节点端口

在这个例子中:

  • port: 80 是服务端口(Service 的入口端口)。
  • targetPort: 8080 是容器端口(应用程序运行的端口)。
  • nodePort: 30080 是节点端口(外部流量可以通过该端口访问节点并转发到 Service)。

命令行模式

可以通过 kubectl expose 命令来创建上述 NodePort 类型的 Service 配置。以下是具体的命令:

kubectl expose deployment my-app \--type=NodePort \--name=my-service \--port=80 \--target-port=8080 \--node-port=30080

命令参数说明

  • deployment my-app:指定要暴露的 Deployment 名称(假设已存在一个名为 my-app 的 Deployment)。
  • --type=NodePort:将 Service 类型设置为 NodePort,以便外部流量可以通过节点端口访问。
  • --name=my-service:定义 Service 的名称。
  • --port=80:设置 Service 的入口端口。
  • --target-port=8080:将 Service 接收的流量转发到容器中的端口 8080。
  • --node-port=30080:在每个节点上暴露端口 30080(此参数为可选,若不指定则系统自动分配)。

验证 Service

执行完创建命令后,可以通过以下命令查看 Service 的配置:

kubectl get service my-service

这将显示 Service 的详细信息,包括 ClusterIPNodePort 等。

相关文章:

k8s Service四层负载:服务端口暴露

在 Kubernetes 中,通过 Service 可以实现四层(L4)负载均衡,将流量分发至后端的 Pod。四层负载主要用于传输层(TCP/UDP),而不像七层负载均衡(HTTP/HTTPS)那样进行应用层的…...

QT 关于mousePressEvent无法过滤

QT 关于mousePressEvent无法过滤 bool Filter::eventFilter(QObject *watched, QEvent *event) {// 判断是不是点击事件if((event->type() QEvent::MouseButtonPress) || (event->type() QEvent::MouseButtonDblClick)){//打印一个全局变量static int globalVar 0;gl…...

【VScode】深度对比:Cursor与VScode(CodeMoss)工具,谁才是你的GPT编程最佳助手?

文章目录 一、Cursor的强大功能1.1 Cursor的主要特点1.2 Cursor的使用技巧 二、CodeMoss的功能2.1 CodeMoss的主要特点2.2 CodeMoss的使用技巧 三、Cursor与CodeMoss的对比分析3.1 功能对比3.2 性能对比 四、总结与展望 在科技迅猛发展的今天,AI编程工具如雨后春笋般…...

大数据计算里的-Runtime Filter

文章目录 Runtime Filter示例 Runtime Filter 从纸面意义来看,就是程序在运行时,根据实际的数据去进行一些过滤操作。这和静态的规则优化不同,静态优化不考虑实现的数据的分布。 示例 select a.* ,b.* a join b on a.idb.id假设一下数据…...

【工具变量】大数据管理机构改革DID(2007-2023年)

数据简介:数字ZF是指以新一代信息技术为支撑,重塑政务信息化管理架构、业务架构、技术架构的现代化治理模式。随着数字政府的建设,特别是借助大数据等新一代数字技术,极大地提升了政府的治理能力,从而起到辅助监管机构…...

Linux -- 初识信号

目录 什么是信号? 如何使用信号? 代码: testSig.cc makefile: 验证: 2号信号: 9号信号: 建立对信号的认识: 信号的处理 自定义信号的处理方式: signal 函数…...

Ubuntu系统如何实现键盘按键映射到其他按键(以 Ctrl+c 映射到 F3,Ctrl+v 映射到 F4 为例)

文章目录 写在前面1. 功能描述2. 实现步骤2.1 安装AutoKey2.2 软件设置2.2.1 软件设置 2.3 测试是否安装成功 参考链接 写在前面 自己的测试环境: Ubuntu20.04 1. 功能描述 Ubuntu系统使用Ctrlc 、Ctrlv 进行复制粘贴操作的时候,时间长了就会出现小拇指…...

el-select、el-autocomplete的选项内容过长显示完整内容

问题&#xff1a; el-select、el-autocomplete的选项内容过长需要看清完整内容 解决方案&#xff1a; 使用el-popover悬停显示完整内容 代码&#xff1a; <el-form-item label"备注" prop"remark"><el-autocomplete v-model"form.remar…...

Go-单元测试

单元测试 测试用例的命名必须是以xxx_test.go的格式 测试用例函数必须以TestXxx开头&#xff0c;一般来说是Test被测试函数名&#xff0c;且必须为大驼峰命名 TestAdd(t *tesing.T)的形参类型必须是*tesing.T 运行测试用例指令 cmd>go test 运行正确&#xff0c;无日志&a…...

【Linux】IPC 进程间通信(一):管道(匿名管道命名管道)

✨ 无人扶我青云志&#xff0c;我自踏雪至山巅 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#…...

Kotlin类与对象

类的定义与对象创建 类的创建是比较简单的&#xff0c;主要是看一下注意点&#xff1a; 1.如果主构造函数没有任何注释或可见性修饰符&#xff0c;则可以省略constructor关键字&#xff0c;如果类中没有其他内容要写&#xff0c;可以直接省略花括号&#xff0c;最后就变成下面…...

Windows版 nginx安装,启动,目录解析,常用命令

Windows版 nginx安装&#xff0c;启动&#xff0c;目录解析&#xff0c;常用命令 一级目录二级目录三级目录 1. 下载2. 启动方式一&#xff1a;方式二&#xff1a; 3. 验证是否启动4. 安装目录解析5. 常用命令 一级目录 二级目录 三级目录 1. 下载 官网下载&#xff1a;ngi…...

基于51单片机的电子隐形防盗网proteus仿真

地址&#xff1a; https://pan.baidu.com/s/1TSuRsB2i1tgAHjI0Miz3AQ 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectro…...

Fish Agent:多语言 Voice-to-Voice 开源语音模型;Runway 推出摄像机运镜功能丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思…...

locust压测工具环境搭建(Linux、Mac)

目录 使用anaconda搭建locust环境 1、anaconda安装python环境&#xff08;推荐&#xff09; 2、从conda安装locust 使用python虚拟环境搭建locust环境 1、直接安装python环境 2、从python环境安装locust 从依赖文件中安装locust环境 1、从anaconda安装locust 2、从pyt…...

欠定方程有多个真正解,超定方程可能无解所以有最小二乘解

Ax b x A\b ,但不是b/A,会报错矩阵维度不对应两个未知数&#xff0c;三个方程也可以是最小二乘解&#xff0c;因为无解满足三个方程&#xff0c;比如下面 A [0, 1; 1, 1;3,6]; % 一个接近奇异的矩阵 b [1; 2;3]; x A\b; % 求解线性方程组 % warning(off, MATLAB:…...

LeetCode27:移除元素

原题地址&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k…...

JAVA 插入 JSON 对象到 PostgreSQL

博主主页:【南鸢1.0】 本文专栏&#xff1a;JAVA 目录 ​编辑 简介 所用&#xff1a; 1、 确保 PostgreSQL 数据库支持 JSON&#xff1a; 2、添加 PostgreSQL JDBC 驱动 3、安装和运行 PostgreSQL 4、建立数据库的连接 简介 在现代软件开发中&#xff0c;由于 JSON 数据…...

视图,物化视图,普通表区别简介

普通视图与物化视图的主要区别&#xff1a; 数据存储方式&#xff1a; 普通视图&#xff1a;不存储数据&#xff0c;仅包含查询定义。查询时&#xff0c;Oracle会根据视图的定义转换为相应的SQL语句去查询底层数据。物化视图&#xff1a;实际存储数据&#xff0c;类似于物理表。…...

C++ | Leetcode C++题解之第530题二叉搜索树的最小绝对差

题目&#xff1a; 题解&#xff1a; class Solution { public:void dfs(TreeNode* root, int& pre, int& ans) {if (root nullptr) {return;}dfs(root->left, pre, ans);if (pre -1) {pre root->val;} else {ans min(ans, root->val - pre);pre root-&g…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

【iOS】 Block再学习

iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用

摘要 神经影像技术对医学科学产生了深远的影响&#xff0c;推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下&#xff0c;基于神经血管耦合现象的多模态神经影像方法&#xff0c;通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里&#xff0c;本研…...

ffmpeg(三):处理原始数据命令

FFmpeg 可以直接处理原始音频和视频数据&#xff08;Raw PCM、YUV 等&#xff09;&#xff0c;常见场景包括&#xff1a; 将原始 YUV 图像编码为 H.264 视频将 PCM 音频编码为 AAC 或 MP3对原始音视频数据进行封装&#xff08;如封装为 MP4、TS&#xff09; 处理原始 YUV 视频…...

宠物车载安全座椅市场报告:解读行业趋势与投资前景

一、什么是宠物车载安全座椅&#xff1f; 宠物车载安全座椅是一种专为宠物设计的车内固定装置&#xff0c;旨在保障宠物在乘车过程中的安全性与舒适性。它通常由高强度材料制成&#xff0c;具备良好的缓冲性能&#xff0c;并可通过安全带或ISOFIX接口固定于车内。 近年来&…...

关于疲劳分析的各种方法

疲劳寿命预测方法很多。按疲劳裂纹形成寿命预测的基本假定和控制参数&#xff0c;可分为名义应力法、局部应力一应变法、能量法、场强法等。 1名义应力法 名义应力法是以结构的名义应力为试验和寿命估算的基础&#xff0c;采用雨流法取出一个个相互独立、互不相关的应力循环&…...

JAVA反序列化应用 : URLDNS案例

反序列化的基本原理 基础普及 &#xff1a; 对象初始化数据方法 &#xff1a;1、使用构造方法 2、使用封装中的 set,get方法 这边我们就使用 1 注意 我们之后还需要进行 接入 序列化的接口 &#xff1a; 先进行序列化 &#xff1a; 反序列化&#xff1a; 反序列化导致的安…...