k8s中service概述(二)NodePort
NodePort 是 Kubernetes 中一种用于对外暴露服务的 Service 类型。它通过在集群的每个节点上开放一个静态端口(NodePort),使得外部用户可以通过节点的 IP 地址和该端口访问集群内部的服务。以下是关于 NodePort Service 的详细说明:
1. NodePort 的核心功能
-
外部访问:NodePort 允许外部用户通过集群中任意节点的 IP 地址和指定的端口访问服务。
-
端口映射:NodePort 会在每个节点上开放一个静态端口(默认范围是 30000-32767),并将该端口的流量转发到后端的 Pod。
-
负载均衡:与 ClusterIP 类似,NodePort 也会自动将流量负载均衡到后端的多个 Pod。
-
集群内部访问:NodePort Service 也会分配一个 ClusterIP,因此集群内部仍然可以通过 ClusterIP 访问服务。
2. NodePort 的工作原理
NodePort 的实现依赖于 Kubernetes 的网络模型和核心组件:
-
Service 创建:
-
当创建一个 NodePort Service 时,Kubernetes 会为其分配一个 ClusterIP,并在每个节点上开放一个静态端口(NodePort)。
-
NodePort 的默认范围是 30000-32767,但可以手动指定。
-
-
Endpoints 创建:
-
与 ClusterIP 类似,Kubernetes 会自动创建与 Service 同名的 Endpoints 对象,其中包含所有匹配
selector的 Pod 的 IP 和端口。
-
-
kube-proxy 的作用:
-
每个节点上的
kube-proxy组件会监听 Service 和 Endpoints 的变化。 -
kube-proxy通过以下方式实现流量转发:-
iptables 模式:在节点上配置 iptables 规则,将流量从 NodePort 转发到后端 Pod。
-
IPVS 模式:使用更高效的 IPVS 实现流量转发。
-
-
无论使用哪种模式,
kube-proxy都会确保流量被正确负载均衡到后端 Pod。
-
-
外部访问:
-
外部用户可以通过任意节点的 IP 地址和 NodePort 访问服务。
-
例如,如果 NodePort 为 31000,节点的 IP 地址为 192.168.1.100,则外部用户可以通过
http://192.168.1.100:31000访问服务。
-
3. NodePort 的配置示例
以下是一个典型的 NodePort Service 的 YAML 配置文件:
apiVersion: v1
kind: Service
metadata:name: my-service # Service 名称namespace: default # 命名空间,默认为 default
spec:type: NodePort # Service 类型selector:app: my-app # 选择标签为 app=my-app 的 Podports:- protocol: TCP # 协议类型,支持 TCP、UDP、SCTPport: 80 # Service 暴露的端口targetPort: 9376 # 后端 Pod 的端口nodePort: 31000 # 手动指定的 NodePort,范围为 30000-32767
-
selector:用于选择后端 Pod,只有匹配标签的 Pod 才会被纳入 Service 的后端。
-
ports:
-
port:Service 暴露的端口,集群内的其他服务通过该端口访问 Service。 -
targetPort:后端 Pod 实际监听的端口。 -
nodePort:手动指定的 NodePort,范围为 30000-32767。如果不指定,Kubernetes 会自动分配一个可用的端口。
-
-
type:Service 类型,这里设置为
NodePort。
4. NodePort 的使用场景
NodePort 适用于以下场景:
-
开发和测试环境:
-
在开发和测试环境中,NodePort 可以快速暴露服务,方便外部访问和调试。
-
-
小型生产环境:
-
在小型生产环境中,如果没有负载均衡器,可以使用 NodePort 暴露服务。
-
-
特殊需求:
-
某些场景下,可能需要直接通过节点的 IP 地址访问服务,例如某些网络设备或旧系统。
-
-
与 LoadBalancer 结合使用:
-
在云环境中,NodePort 通常与 LoadBalancer 结合使用,LoadBalancer 会将外部流量导入 NodePort。
-
5. NodePort 的优缺点
优点:
-
简单易用,快速暴露服务。
-
不需要额外的负载均衡器,适合小型环境。
-
可以在任意节点上访问服务,具有较高的可用性。
缺点:
-
端口范围有限(30000-32767),可能与现有服务冲突。
-
直接暴露节点的 IP 地址,可能存在安全风险。
-
需要手动管理节点的 IP 地址,不适合大规模生产环境。
6. NodePort 的调试和排查
-
查看 Service 信息:
kubectl get svc <service-name>
输出示例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-service NodePort 10.96.123.45 <none> 80:31000/TCP 5m
-
查看 Endpoints:
kubectl get endpoints <service-name>
输出示例:
NAME ENDPOINTS AGE my-service 10.244.1.2:9376,10.244.2.3:9376 5m
-
检查节点端口:
-
登录到节点,检查 NodePort 是否正常开放:
netstat -tuln | grep 31000
-
-
检查 kube-proxy 和 iptables/IPVS 规则:
-
登录到节点,检查 iptables 或 IPVS 规则是否正常配置。
-
7. 总结
NodePort 是 Kubernetes 中用于对外暴露服务的 Service 类型,它通过在集群的每个节点上开放一个静态端口,使得外部用户可以通过节点的 IP 地址和该端口访问集群内部的服务。NodePort 简单易用,适合开发和测试环境,但在生产环境中通常需要结合 LoadBalancer 或 Ingress 使用,以提供更高的可用性和安全性。
使用 NodePort 暴露 Nginx 服务的示例
以下是一个完整的示例,展示如何在 Kubernetes 中使用 NodePort Service 暴露一个 Nginx 服务。这个示例包括:
-
部署一个 Nginx Pod。
-
创建一个 NodePort Service 来暴露 Nginx 服务。
1. 创建 Nginx 部署
首先,创建一个 Deployment 来运行 Nginx Pod。以下是一个简单的 YAML 文件:
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment # 部署名称labels:app: nginx # 标签,用于 Service 选择
spec:replicas: 3 # 副本数selector:matchLabels:app: nginx # 选择器,匹配 Pod 标签template:metadata:labels:app: nginx # Pod 标签spec:containers:- name: nginx # 容器名称image: nginx:latest # 使用官方 Nginx 镜像ports:- containerPort: 80 # 容器监听的端口
将上述内容保存为 nginx-deployment.yaml,然后使用以下命令创建 Deployment:
kubectl apply -f nginx-deployment.yaml
2. 创建 NodePort Service
接下来,创建一个 NodePort Service 来暴露 Nginx 服务。以下是一个简单的 YAML 文件:
apiVersion: v1
kind: Service
metadata:name: nginx-service # Service 名称
spec:type: NodePort # Service 类型selector:app: nginx # 选择标签为 app=nginx 的 Podports:- protocol: TCP # 协议类型port: 80 # Service 暴露的端口targetPort: 80 # 后端 Pod 的端口nodePort: 30080 # 手动指定的 NodePort,范围为 30000-32767
将上述内容保存为 nginx-service.yaml,然后使用以下命令创建 Service:
kubectl apply -f nginx-service.yaml
3. 验证部署和 Service
-
查看 Deployment 状态:
kubectl get deployments
输出示例:
-
查看 Pod 状态:
kubectl get pods
-
查看 Service 状态:
kubectl get svc nginx-service
4. 访问 Nginx 服务
-
获取节点的 IP 地址:
使用kubect get nodes -o wide获取节点信息-
输出示例:
- 可以发现节点ip
-
如果你在云环境或物理机中,可以使用节点的公网或内网 IP。
-
-
通过 NodePort 访问 Nginx:
-
打开浏览器,访问
http://<NodeIP>:30080。 -
例如,如果节点 IP 是
192.168.30.130,则访问http://192.168.30.130:30080。 -
你应该会看到 Nginx 的默认欢迎页面。
-
可以在外部浏览器看到ngnix的页面

-
5. 清理资源
完成测试后,可以删除 Deployment 和 Service:
kubectl delete -f nginx-deployment.yaml kubectl delete -f nginx-service.yaml
相关文章:
k8s中service概述(二)NodePort
NodePort 是 Kubernetes 中一种用于对外暴露服务的 Service 类型。它通过在集群的每个节点上开放一个静态端口(NodePort),使得外部用户可以通过节点的 IP 地址和该端口访问集群内部的服务。以下是关于 NodePort Service 的详细说明࿱…...
Oracle归档配置及检查
配置归档位置到 USE_DB_RECOVERY_FILE_DEST,并设置存储大小 startup mount; !mkdir /db/archivelog ALTER SYSTEM SET db_recovery_file_dest_size100G SCOPEBOTH; ALTER SYSTEM SET db_recovery_file_dest/db/archivelog SCOPEBOTH; ALTER SYSTEM SET log_archive…...
计算机二级:函数基础题
函数基础题 第一题 rinput("请输入半径:") c3.1415926*r*2 print("{:.0f}".format(c))输出: Type Error第二题 a7 b2 print(a%2)输出 1第三题 ab4 def my_ab(ab,xy):abpow(ab,xy)print(ab,end"\n") my_ab(ab,2)prin…...
Python爬虫-爬取AliExpress商品搜索词排名数据
前言 本文是该专栏的第49篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者以AliExpress平台为例。基于Python爬虫,通过某个指定的“搜索关键词”,批量获取该“搜索关键词”的商品排名数据。 具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。废…...
AI 时代,我们需要什么样的数据库?
AI 时代,我们需要什么样的数据库? 人工智能正在悄然改变软件开发的方式。过去一年间,诸如 GitHub Spark、Replit 和 Bolt 等新兴 AI 工具层出不穷,能够快速生成简单的前端应用,甚至无需传统意义上的后端服务就能部署上…...
刷机维修进阶教程-----adb禁用错了系统app导致无法开机 如何保数据无损恢复机型
在刷机维修过程中 。我们会遇到一些由于客户使用adb指令来禁用手机app而导致手机无法开机进入系统的故障机型。通常此类问题机型有好几种解决方法。但如果客户需要保数据来恢复机型。其实操作也是很简单的.还有类似误删除应用导致不开机等等如何保数据。 通过博文了解💝💝�…...
Vue3 实战:基于 mxGraph 与 WebSocket 的动态流程图构建
本文将详细介绍如何在 Vue3 项目中集成 mxGraph 可视化库,并通过 WebSocket 实现画布元素的实时更新。适合有 Vue 基础的前端开发者学习参考。 一、技术栈准备 Vue3:采用 Composition API 开发mxGraph:JavaScript 流程图库(版本 …...
Ubuntu AX200 iwlwifi-cc-46.3cfab8da.0.tgz无法下载的解决办法
文章目录 前言一、检查网卡是否被识别二、确认内核模块是否可用1.AX200 wifi 要求内核5.12.检查 iwlwifi.ko 是否存在:3.如果未找到,可能是内核模块未正确生成。尝试安装 linux-modules-extra:4.再次检查 iwlwifi.ko 是否存在:5.确…...
蓝桥杯,利用 Vue.js 构建简易任务管理器
在日常开发中,我们经常需要处理各种任务和计划。一个简单且高效的任务管理器可以帮助我们更好地组织和安排时间。今天,我将向大家展示如何使用 Vue.js 构建一个简易的任务管理器。这个项目不仅能够帮助我们更好地理解 Vue.js 的基本语法和功能࿰…...
国际机构Gartner发布2025年网络安全趋势
转自:中国新闻网 中新网北京3月14日电 国际机构高德纳(Gartner)14日发布的消息称,网络安全和风险管理在2025年“面临挑战与机遇并存的局面”,“实现转型和提高弹性”对确保企业在快速变化的数字世界中,实现安全且可持续的创新至关…...
【设计模式】单件模式
七、单件模式 单件(Singleton) 模式也称单例模式/单态模式,是一种创建型模式,用于创建只能产生 一个对象实例 的类。该模式比较特殊,其实现代码中没有用到设计模式中经常提起的抽象概念,而是使用了一种比较特殊的语法结构&#x…...
Elasticsearch + Docker:实现容器化部署指南
Elasticsearch是一款强大的分布式搜索和分析引擎,广泛应用于日志分析、全文检索、实时数据分析等场景。而Docker作为一种轻量级的容器化技术,能够帮助开发者快速部署和管理应用。将Elasticsearch与Docker结合,不仅可以简化部署流程࿰…...
win32汇编环境,网络编程入门之十一
;win32汇编环境,网络编程入门之十一 ;在上一教程里,我们学习了如何读取大容量的网页内容,在这一教程里,我们学习一下如何在wininet或winhttp机制中提取网页中的超链接 ;>>>>>>>>>>>>>>>>>…...
穿越之程序员周树人的狂人日记Part3__人机共生纪元
穿越之程序员周树人的狂人日记Part3__人机共生纪元 代码知识点:协程、内存管理、版本控制 故事一【协程陷阱】择偶标准的多核运算 故事二【内存泄漏】中产幻觉的垃圾回收 故事三【版本控制】人设仓库的强制推送 故事四【容器化生存】:员工生存之现状 静夜…...
后端——AOP异步日志
需求分析 在SpringBoot系统中,一般会对访问系统的请求做日志记录的需求,确保系统的安全维护以及查看接口的调用情况,可以使用AOP对controller层的接口进行增强,作日志记录。日志保存在数据库当中,为了避免影响接口的响…...
【C#语言】深入理解C#多线程编程:从基础到高性能实践
文章目录 ⭐前言⭐一、多线程的本质价值🌟1、现代计算需求🌟2、C#线程演进史 ⭐二、线程实现方案对比🌟1、传统线程模型🌟2、现代任务模型(推荐)🌟3、异步编程范式 ⭐三、线程安全深度解析&…...
第十四章:模板实例化_《C++ Templates》notes
模板实例化 核心知识点解析多选题设计题关键点总结 核心知识点解析 两阶段查找(Two-Phase Lookup) 原理: 模板在编译时分两个阶段处理: 第一阶段(定义时):检查模板语法和非依赖名称࿰…...
循环查询指定服务器开放端口(Python)
循环查询指定服务器开放端口列表 # Time : 2025/3/22 # Author : cookie # Desc :import socket import concurrent.futures from datetime import datetime# 设置目标IP和端口范围 target_ip input("请输入目标IP地址: ") start_port int(input("请输入…...
算法 | 蜣螂优化算法原理,引言,公式,算法改进综述,应用场景及matlab完整代码
蜣螂优化算法(Dung Beetle Optimizer, DBO)详解 1. 算法原理 蜣螂优化算法(DBO)是一种基于自然界蜣螂行为的元启发式优化算法,灵感来源于蜣螂的滚球、繁殖、觅食和偷窃行为。其核心思想是通过模拟蜣螂在复杂环境中的协作与竞争机制,解决全局优化问题。关键行为模拟: 滚球…...
排序复习_代码纯享
头文件 #pragma once #include<iostream> #include<vector> #include<utility> using std::vector; using std::cout; using std::cin; using std::endl; using std::swap;//插入排序 //1、直接插入排序(稳定) void InsertSort(vecto…...
【STM32】第一个工程的创建
目录 1、获取 KEIL5 安装包2、开始安装 KEIL52.1、 激活2.2、安装DFP库 3、工程创建4、搭建框架5、开始编写代码 1、获取 KEIL5 安装包 要想获得 KEIL5 的安装包,在百度里面搜索“KEIL5 下载”即可找到很多网友提供的下载文件,或者到 KEIL 的官网下载&a…...
SpringBoot+策略模式+枚举类,优雅消除if-else
需求分析 公司做物联网系统的,使用nettry进行设备连接,对设备进行数据采集,根据设备的协议对数据进行解析,解析完成之后存放数据库,但是不同厂家的设备协议不同。公司系统使用了使用了函数式编程的去写了一个解析类&am…...
前端框架学习路径与注意事项
学习前端框架是一个系统化的过程,需要结合理论、实践和工具链的综合掌握。以下是学习路径的关键方面和注意事项: 一、学习路径的核心方面 1. 基础概念与核心思想 组件化开发:理解组件的作用(复用性、隔离性)、组件通信…...
kubeval结合kube-score实现k8s yaml文件校验
一、工具定位与互补性 工具核心能力检查范围kubeval校验 YAML 语法和 API 版本兼容性确保资源配置符合 Kubernetes 版本规范kube-score检查安全配置与最佳实践识别资源限制缺失、权限过高等问题 协同作用: kubeval 确保配置文件的语法正确性,避免低级错…...
Linux驱动开发-①platform平台②MISC字符驱动框架③input框架
Linux驱动开发-①platform平台②MISC字符驱动框架③input框架 一,platform1.1 platform框架(设备树下)1.2 platform框架(配置设备函数) 二,MISC字符驱动框架三,input框架 一,platfor…...
【mysql】唯一性约束unique
文章目录 唯一性约束 1. 作用2. 关键字3. 特点4. 添加唯一约束5. 关于复合唯一约束 唯一性约束 1. 作用 用来限制某个字段/某列的值不能重复。 2. 关键字 UNIQUE3. 特点 同一个表可以有多个唯一约束。唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯…...
pytest的测试报告allure
1、安装jdk,安装allure、下载allure,配置环境变量 1.1、下载地址:https://repo.maven.apache.org/maven2/io/qameta/allure/allurecommandline 找到最新版本下载即可 【下载zip包】解压到任意目录,建议目录不要在C盘 不要太深 最好不要有中文;进入allure解压后的目录,找到…...
常见中间件漏洞:Jboss篇
CVE-2015-7501 环境搭建 cd vulhub-master/jboss/JMXInvokerServlet-deserialization docker-compose up -d 过程 访问网址,存在页面说明接口存在且存在反序列化漏洞 http://8.130.17.222:8080/invoker/JMXInvokerServlet 2.下载 ysoserial ⼯具进⾏漏洞利⽤…...
2025年优化算法:龙卷风优化算法(Tornado optimizer with Coriolis force,TOC)
龙卷风优化算法(Tornado optimizer with Coriolis force)是发表在中科院二区期刊“ARTIFICIAL INTELLIGENCE REVIEW”(IF:11.7)的2025年智能优化算法 01.引言 当自然界的狂暴之力,化身数字世界的智慧引擎&…...
3.24-3 接口测试断言
一.postman 断言 1.断言再test中 #状态码是否等于200 tests["Status code is 200"] responseCode.code 200; #断言响应时间小于200ms tests["Response time is less than 200ms"] responseTime < 200; #断言响应体包含内容 tests["Body…...
