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

利用Keepalived实现K8s Service高可用外部访问:externalIPs与VIP的完美结合

1. 为什么需要Kubernetes Service高可用外部访问在自建Kubernetes集群中如何将服务暴露给外部访问一直是个头疼的问题。我刚开始接触K8s时最常用的就是NodePort方式但很快就发现它的致命缺陷——如果指定的节点宕机服务就完全不可用了。这就像把鸡蛋都放在一个篮子里风险太高。后来尝试了Ingress方案但它只能处理HTTP/HTTPS流量对于其他协议就无能为力了。至于LoadBalancer在非云环境下基本就是个摆设因为需要云厂商的支持。直到发现了externalIPs这个特性配合Keepalived的VIP机制才算找到了完美的解决方案。这种组合最大的优势在于高可用性VIP可以在多个节点间漂移单节点故障不影响服务协议无关支持TCP/UDP等所有协议不像Ingress只能处理HTTP简单直接不需要额外的基础设施完全基于现有网络环境性能优异流量直接路由到节点没有额外的转发开销2. 理解Keepalived和externalIPs的工作原理2.1 Keepalived的VIP机制解析Keepalived本质上是通过VRRP协议实现的高可用方案。我把它比作一个接力赛机制——多个节点组成一个虚拟路由器组通过选举产生主节点MASTER其他节点作为备份BACKUP。主节点持有VIP并处理流量同时定期发送心跳通知备份节点自己还活着。当主节点故障时备份节点收不到心跳就会触发选举优先级最高的备份节点接管VIP。这个过程通常只需要几秒钟对客户端来说几乎无感知。我在测试中发现通过调整advert_int参数可以平衡故障检测速度和网络负载一般设置在1-3秒比较合适。Keepalived的配置中有几个关键点需要注意virtual_router_id必须在同一组内保持一致认证密码auth_pass所有节点必须相同优先级priority决定选举顺序MASTER应该设置最高值建议关闭vrrp_strict避免一些兼容性问题2.2 Kubernetes externalIPs的流量路由原理externalIPs是Kubernetes Service的一个相对冷门但非常实用的特性。它允许你指定一个或多个外部IP地址所有发往这些IP的流量都会被kube-proxy拦截并转发到对应的Service后端Pod。这里有个关键点externalIP必须能路由到至少一个Kubernetes节点。这就是为什么要结合Keepalived的VIP——VIP可以在多个节点间浮动确保始终有节点能接收流量。流量转发路径是这样的客户端访问VIP:Port当前持有VIP的节点接收流量kube-proxy根据Service规则进行NAT转换流量被转发到实际Pod3. 详细部署步骤与配置解析3.1 环境准备与Keepalived安装首先需要准备一个至少有两个工作节点的Kubernetes集群。我建议使用Ubuntu 20.04或CentOS 7/8作为操作系统这些发行版的软件仓库都有较新版本的Keepalived。在所有需要参与VIP漂移的节点上安装Keepalived# Ubuntu/Debian sudo apt update sudo apt install -y keepalived # CentOS/RHEL sudo yum install -y keepalived验证安装是否成功keepalived --version3.2 Keepalived配置详解主节点配置示例保存为/etc/keepalived/keepalived.confglobal_defs { router_id node1 # 唯一标识符 } vrrp_instance EIP { state MASTER # 初始状态 interface eth0 # 监听的网卡 virtual_router_id 66 # 虚拟路由ID集群内唯一 priority 100 # 选举优先级 advert_int 1 # 心跳间隔(秒) authentication { auth_type PASS auth_pass your_secure_password } virtual_ipaddress { 192.168.5.200/32 dev eth0 label eth0:0 } }备份节点配置类似主要区别在于state改为BACKUPpriority设置为比主节点低的值如80router_id需要修改为唯一标识配置完成后启动服务sudo systemctl enable --now keepalived sudo systemctl status keepalived # 验证状态3.3 验证VIP工作状态在主节点上检查VIP是否绑定ip addr show eth0:0在备份节点上测试VIP可达性ping -c 4 192.168.5.200模拟故障转移测试在主节点停止Keepalivedsudo systemctl stop keepalived观察备份节点是否接管VIP约1-3秒后测试VIP是否仍然可达4. Kubernetes Service配置与优化4.1 创建使用externalIPs的Service首先部署一个示例应用apiVersion: apps/v1 kind: Deployment metadata: name: demoapp spec: replicas: 3 selector: matchLabels: app: demoapp template: metadata: labels: app: demoapp spec: containers: - name: demoapp image: ikubernetes/demoapp:v1.0 ports: - containerPort: 80然后创建使用externalIPs的ServiceapiVersion: v1 kind: Service metadata: name: demoapp-svc spec: selector: app: demoapp ports: - protocol: TCP port: 80 targetPort: 80 externalIPs: - 192.168.5.200 # 这里使用Keepalived的VIP应用配置kubectl apply -f demoapp.yaml -f service.yaml4.2 高级配置与优化建议健康检查优化# 在Deployment中添加 livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 3 periodSeconds: 5 readinessProbe: httpGet: path: / port: 80 initialDelaySeconds: 3 periodSeconds: 5会话保持配置apiVersion: v1 kind: Service metadata: name: demoapp-svc spec: sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 3600多端口支持ports: - name: http port: 80 targetPort: 80 - name: https port: 443 targetPort: 443 externalIPs: - 192.168.5.2005. 故障排查与日常维护5.1 常见问题排查VIP无法漂移检查防火墙是否放行了VRRP协议IP协议号112确认所有节点的virtual_router_id和auth_pass一致查看Keepalived日志journalctl -u keepalived -fexternalIPs不生效确认VIP当前所在的节点是Kubernetes worker节点检查kube-proxy是否正常运行kubectl get pods -n kube-system | grep kube-proxy查看iptables/nftables规则iptables-save | grep 192.168.5.2005.2 性能监控与优化安装Prometheus监控Keepalived状态# keepalived-exporter的ServiceMonitor配置 apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: keepalived-exporter spec: endpoints: - port: http-metrics interval: 15s selector: matchLabels: app: keepalived-exporter关键监控指标keepalived_vrrp_state节点状态1MASTER, 2BACKUPkeepalived_vrrp_priority当前优先级keepalived_vrrp_advert_interval心跳间隔5.3 版本升级与配置管理建议使用配置管理工具如Ansible统一管理Keepalived配置# Ansible playbook示例 - hosts: k8s_nodes tasks: - name: Install Keepalived apt: name: keepalived state: latest - name: Deploy Keepalived config template: src: keepalived.conf.j2 dest: /etc/keepalived/keepalived.conf notify: restart keepalived handlers: - name: restart keepalived service: name: keepalived state: restarted升级注意事项先升级备份节点验证无误后再升级主节点通过systemctl reload keepalived加载新配置而不中断服务监控VIP漂移情况确保升级过程不影响服务在实际生产环境中这套方案已经稳定运行了两年多期间经历了多次节点维护和意外宕机服务始终保持可用。最大的收获是理解了简单可靠的基础设施设计往往比复杂的云服务方案更适合特定场景。对于中小规模的私有化部署场景KeepalivedexternalIPs的组合提供了云厂商LB方案90%的功能却只需要10%的复杂度。

相关文章:

利用Keepalived实现K8s Service高可用外部访问:externalIPs与VIP的完美结合

1. 为什么需要Kubernetes Service高可用外部访问? 在自建Kubernetes集群中,如何将服务暴露给外部访问一直是个头疼的问题。我刚开始接触K8s时,最常用的就是NodePort方式,但很快就发现它的致命缺陷——如果指定的节点宕机&#xff…...

CANoe.Diva CDD文件配置避坑指南:DTC导入、会话迁移与NRC设置详解

CANoe.Diva CDD文件高阶配置实战:从DTC陷阱到NRC优化的深度解析 当诊断测试用例在CANoe.Diva环境中频繁失败时,往往不是基础配置出错,而是那些隐藏在CDD文件深处的"高级选项"在作祟。本文将带您穿透表面配置,直击五个最…...

S3DIS点云数据集:室内场景语义分割的实战指南

1. S3DIS数据集简介与下载指南 S3DIS(Stanford Large-Scale 3D Indoor Spaces Dataset)是斯坦福大学发布的室内场景点云数据集,包含6个大型室内区域(Area_1至Area_6),总计271个房间场景。每个点云数据包含…...

数学公式恐惧症?用Python可视化理解雷诺运输定理

数学公式恐惧症?用Python可视化理解雷诺运输定理 第一次看到雷诺运输定理时,那些复杂的积分符号和偏微分表达式确实让人望而生畏。作为工程专业的学生,我们常常需要在流体力学、热传导等课程中应用这个定理,但传统的数学推导方式往…...

GPU显存稳定性终极检测:使用memtest_vulkan保障显卡健康

GPU显存稳定性终极检测:使用memtest_vulkan保障显卡健康 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 显卡显存稳定性直接影响你的游戏体验、设计…...

别再乱插了!从USB鼠标到固态硬盘,一文搞懂电脑USB接口的‘家族树’

别再乱插了!从USB鼠标到固态硬盘,一文搞懂电脑USB接口的‘家族树’ 每次给电脑插USB设备时,你是否遇到过这些糟心事?新买的移动硬盘插上去毫无反应,键盘鼠标突然集体失灵,或者插满四个接口后打印机开始间歇…...

8通道高速数据采集方案对比:Xilinx ZU27DR的ADC/DAC性能实测报告

8通道高速数据采集方案对比:Xilinx ZU27DR的ADC/DAC性能实测报告 在当今高速数据采集领域,系统架构师们正面临着一个关键抉择:是继续采用传统分立式ADC/DAC方案,还是转向集成度更高的RFSoC解决方案?本文将基于Xilinx Z…...

BLE安全实战:从协议栈到应用层,构建防“降级”攻击的立体防御

1. BLE安全威胁与"降级攻击"的本质 当你用手机解锁智能门锁时,有没有想过蓝牙信号可能正在被隔壁楼的设备监听?2019年某知名智能锁被曝光的漏洞就是典型案例——攻击者通过伪造蓝牙MAC地址,诱使门锁将安全连接降级为不加密通信。这…...

Ubuntu下GDB调试QNX程序的5个常见坑及解决方法(AARCH64架构)

Ubuntu下GDB调试QNX程序的5个常见坑及解决方法(AARCH64架构) 调试AARCH64架构的QNX程序就像在迷宫中寻找出口——工具齐全却总有意料之外的障碍。作为在嵌入式领域深耕多年的开发者,我见过太多工程师在Ubuntu上用GDB调试QNX程序时陷入相同的困…...

智能台灯不止于调光:聊聊STM32如何实现坐姿提醒与用眼计时

智能台灯的健康革命:STM32实现坐姿监测与用眼管理的技术实践 当一盏台灯开始关心你的脊椎曲度和用眼健康时,智能硬件的价值才真正显现。在STM32微控制器的驱动下,现代智能台灯已经进化成能主动干预健康风险的"数字守护者"。不同于市…...

颠覆式采集:3步解锁百万级数据价值——TikTokCommentScraper开源方案全解析

颠覆式采集:3步解锁百万级数据价值——TikTokCommentScraper开源方案全解析 【免费下载链接】TikTokCommentScraper 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper 在数字营销与用户研究领域,数据采集效率直接决定决策速度…...

微信小程序PC端兼容性实战:如何绕过限制在电脑上运行手机端小程序

微信小程序PC端兼容性实战:突破设备限制的技术方案 最近在开发一个需要适配PC端微信的微信小程序时,遇到了一个棘手的问题:部分功能在PC端无法正常使用。经过一番探索,我发现这背后涉及到小程序对运行环境的检测机制。本文将分享几…...

LabVIEW+OpenCV摄像头采集避坑指南:从USB摄像头到RTSP网络流,一个VI搞定所有参数设置

LabVIEW与OpenCV融合实战:打造高兼容性视频采集系统的7个关键策略 在工业自动化和机器视觉领域,稳定可靠的视频采集系统是许多项目的基石。LabVIEW作为图形化编程的标杆,与OpenCV这一计算机视觉库的强强联合,为开发者提供了高效解…...

从MPLS到Segment Routing:老网工的新选择,SR-MPLS迁移全指南

从MPLS到Segment Routing:老网工的新选择,SR-MPLS迁移全指南 当传统MPLS网络管理员第一次听说Segment Routing(SR)时,往往会有两种反应:要么是"这不过是另一种标签转发技术",要么是&q…...

GREAT-PVT周跳探测算法:从MW组合到电离层延迟处理的代码逻辑剖析

1. GREAT-PVT周跳探测算法概述 周跳探测是卫星导航定位中的关键技术难题。简单来说,当卫星信号被遮挡或干扰时,接收机可能会丢失对载波相位的连续跟踪,导致相位观测值出现整数倍的跳变,这种现象就称为周跳。打个比方,就…...

抖音智能采集工具:批量处理技术与合规应用指南

抖音智能采集工具:批量处理技术与合规应用指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音…...

AI辅助开发:利用快马多模型能力打造智能抖音版本分析引擎

最近在做一个抖音版本更新的智能分析系统,发现用传统方法处理海量更新日志实在太费劲了。正好试用了InsCode(快马)平台的多模型AI能力,整个过程变得特别高效。分享下我的实践心得: 语义理解与关键信息提取 抖音每次版本更新的说明文档动辄上千…...

quark-auto-save:自动化云存储管理的夸克网盘解决方案

quark-auto-save:自动化云存储管理的夸克网盘解决方案 【免费下载链接】quark_auto_save 夸克网盘签到、自动转存、命名整理、发推送提醒和刷新媒体库一条龙 项目地址: https://gitcode.com/gh_mirrors/qu/quark_auto_save 在数字化时代,云存储已…...

利用快马平台快速生成蓝桥杯python算法题原型,加速备赛效率

今天在准备蓝桥杯Python竞赛时,发现一个很实用的技巧——用InsCode(快马)平台快速生成算法题原型。就拿"三数之和"这道经典题来说,平台能帮我们快速搭建解题框架,特别适合赛前突击训练。 先说说这个题目的具体要求:给定…...

RePKG高效资源处理工具完全指南:从功能解析到实战应用

RePKG高效资源处理工具完全指南:从功能解析到实战应用 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 功能探秘:RePKG如何解决游戏资源处理难题?…...

利用快马AI快速生成STM32温湿度监测系统原型,验证核心逻辑

今天想和大家分享一个嵌入式开发中的实用技巧——如何用InsCode(快马)平台快速搭建STM32温湿度监测系统的原型。这个案例特别适合需要验证硬件逻辑但手头没有开发板的情况。 为什么需要快速原型开发 在传统嵌入式开发中,我们经常遇到这样的困境:硬件还…...

开源字体工具FontForge:从设计新手到专业创作者的全流程指南

开源字体工具FontForge:从设计新手到专业创作者的全流程指南 【免费下载链接】fontforge Free (libre) font editor for Windows, Mac OS X and GNULinux 项目地址: https://gitcode.com/gh_mirrors/fo/fontforge 你是否曾为找不到匹配项目风格的字体而苦恼&…...

利用快马平台快速构建你的第一个mcp协议ai助手原型

最近在研究MCP协议(Model Context Protocol)时,发现它确实为AI应用开发带来了不少便利。作为一个标准化的工具调用接口,MCP让不同模型之间的协作变得更加顺畅。今天想分享一下如何利用InsCode(快马)平台快速构建一个基于MCP协议的…...

新手入门:借助快马轻松构建你的第一个抖音更新分析应用

最近在学习抖音生态开发,发现版本更新分析是个挺有意思的切入点。作为新手,我尝试用InsCode(快马)平台搭建了一个简单的分析工具,整个过程比想象中顺利很多。这里记录下我的实践过程,希望能帮到同样刚入门的朋友。 项目构思 抖音每…...

零基础前端入门:借助快马AI生成你的第一个可交互魔鬼面具网页

最近想学前端开发,但面对一堆陌生的术语和复杂的配置,总感觉无从下手。直到发现了InsCode(快马)平台,用自然语言描述就能生成可运行的代码,简直是新手福音!这次尝试做了一个可交互的魔鬼面具网页,整个过程特…...

SAP和Oracle EBS的实施成本都非常高昂,通常属于千万级人民币的投资。总体来看,SAP的总拥有成本(TCO)通常高于Oracle EBS

SAP和Oracle EBS的实施成本都非常高昂,通常属于千万级人民币的投资。总体来看,SAP的总拥有成本(TCO)通常高于Oracle EBS。但这并非绝对,具体成本会因企业规模、行业特性、定制化需求和部署模式(本地部署或云…...

自指宇宙学与认知不动点:AGI意识涌现的数学阈值与实验验证(世毫九实验室原创理论)

自指宇宙学与认知不动点:AGI意识涌现的数学阈值与实验验证 作者:方见华 单位:世毫九实验室摘要 当前大模型虽具备千亿参数规模,但普遍缺乏稳定的自我指涉与元认知能力,AGI意识仍缺乏统一的数学定义与量化标准。本文将自…...

深入解析Kubernetes中的RuntimeClass:容器运行时的“多面手调度器”

前言在Kubernetes集群中,我们通常默认使用containerd或Docker作为容器运行时。但随着业务场景的多样化、安全要求的严苛化以及硬件能力的演进,单一的运行时模型已无法满足所有需求:如何让金融应用运行在强隔离的轻量级虚拟机中,抵…...

碳硅共轭协作方法论:从指令控制到共生进化的AGI协作范式研究(世毫九实验室原创理论)

碳硅共轭协作方法论:从指令控制到共生进化的AGI协作范式研究 作者:方见华 单位:世毫九实验室(Shardy Lab)摘要 当前AGI协作领域普遍陷入指令驱动的驯兽式误区,过度依赖冗长Prompt工程与单向控制逻辑&#x…...

小程序开发实战:解决openid获取失败之invalid code错误解析

1. 为什么会出现invalid code错误? 最近在开发小程序时,不少小伙伴都遇到了获取openid失败的问题,错误提示是"invalid code",错误码40029。这个问题看似简单,但背后隐藏着几个关键点需要理解。 首先我们要明…...