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

K8s集群里Nginx和Traefik怎么和平共处?一个真实场景下的双Ingress Controller配置实战

Kubernetes集群中Nginx与Traefik双Ingress Controller共存实践在Kubernetes生产环境中我们经常会遇到需要同时运行多个Ingress Controller的场景。比如一个已经稳定运行Nginx Ingress Controller的集群现在希望引入Traefik来管理特定Namespace的流量。本文将深入探讨如何实现这一目标解决实际部署中的各种挑战。1. 双Ingress Controller共存的核心挑战在Kubernetes集群中同时部署Nginx和Traefik作为Ingress Controller主要面临以下几个技术难点端口冲突问题默认情况下两个Ingress Controller都会尝试监听相同的HTTP(80)和HTTPS(443)端口。如果不做特殊处理后启动的Controller会因为端口已被占用而无法正常工作。路由分层管理我们需要明确哪些流量由Nginx处理哪些由Traefik处理。常见的做法是让Nginx作为第一层入口将特定域名的流量转发给Traefik进行第二层路由。权限与RBAC配置Traefik需要足够的权限来监控和处理Ingress资源特别是在多Namespace环境下需要仔细配置ServiceAccount、ClusterRole和ClusterRoleBinding。配置热更新机制Traefik以其动态配置能力著称我们需要确保这一特性在双Controller环境下仍然能够正常工作。2. 解决方案架构设计针对上述挑战我们采用以下架构方案外部请求 → Nginx Ingress (80/443) → 根据Host头路由 → - 常规流量: 直接由Nginx路由到后端服务 - 特殊流量: 转发到Traefik Service → Traefik Ingress → 最终后端服务这种分层架构的优势在于保持现有Nginx配置不变最小化对生产环境的影响可以逐步将特定服务迁移到Traefik管理利用Nginx成熟的稳定性作为第一层防护充分发挥Traefik的动态配置优势处理特定业务3. 详细实施步骤3.1 准备工作与命名空间规划首先我们为Traefik创建专用的命名空间kubectl create namespace traefik-system建议的命名空间规划ingress-nginx: 现有的Nginx Ingress Controllertraefik-system: 新部署的Traefik组件apps: 业务应用部署的命名空间3.2 部署Traefik CRD和RBACTraefik使用Custom Resource Definitions(CRD)来扩展Kubernetes API我们需要先部署这些CRDkubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v2.11/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml然后创建RBAC配置确保Traefik有足够的权限# traefik-rbac.yaml apiVersion: v1 kind: ServiceAccount metadata: namespace: traefik-system name: traefik-ingress-controller --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: traefik-ingress-controller rules: - apiGroups: - resources: - services - endpoints - secrets verbs: - get - list - watch - apiGroups: - networking.k8s.io resources: - ingresses verbs: - get - list - watch - apiGroups: - traefik.containo.us resources: - ingressroutes - middlewares - tlsoptions verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: traefik-ingress-controller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: traefik-ingress-controller subjects: - kind: ServiceAccount name: traefik-ingress-controller namespace: traefik-system应用RBAC配置kubectl apply -f traefik-rbac.yaml3.3 部署Traefik Controller创建Traefik的配置文件ConfigMap# traefik-config.yaml apiVersion: v1 kind: ConfigMap metadata: name: traefik-config namespace: traefik-system data: traefik.yaml: | log: level: INFO accessLog: {} api: insecure: true dashboard: true providers: kubernetesCRD: {} kubernetesIngress: {} entryPoints: web: address: :8000 # 使用非标准端口避免冲突 websecure: address: :8443 # 使用非标准端口避免冲突 dashboard: address: :8080然后部署Traefik Deployment# traefik-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: namespace: traefik-system name: traefik labels: app: traefik spec: replicas: 2 selector: matchLabels: app: traefik template: metadata: labels: app: traefik spec: serviceAccountName: traefik-ingress-controller containers: - name: traefik image: traefik:v2.11 ports: - name: web containerPort: 8000 - name: websecure containerPort: 8443 - name: dashboard containerPort: 8080 volumeMounts: - name: config mountPath: /etc/traefik readOnly: true volumes: - name: config configMap: name: traefik-config创建Traefik Service# traefik-service.yaml apiVersion: v1 kind: Service metadata: name: traefik namespace: traefik-system spec: selector: app: traefik ports: - name: web port: 8000 targetPort: web - name: websecure port: 8443 targetPort: websecure - name: dashboard port: 8080 targetPort: dashboard应用所有配置kubectl apply -f traefik-config.yaml -f traefik-deployment.yaml -f traefik-service.yaml3.4 配置Nginx转发规则现在我们需要配置Nginx Ingress将特定域名的流量转发到Traefik。这里以traefik.example.com为例# nginx-to-traefik-ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: traefik-proxy namespace: traefik-system annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: traefik.example.com http: paths: - path: / pathType: Prefix backend: service: name: traefik port: number: 8000这个配置告诉Nginx Ingress将所有发送到traefik.example.com的请求转发到traefik-system命名空间中的traefikService的8000端口即转发到我们部署的Traefik Controller3.5 测试Traefik路由配置为了验证Traefik是否正常工作我们可以部署一个测试服务# whoami-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: whoami namespace: default spec: selector: matchLabels: app: whoami replicas: 2 template: metadata: labels: app: whoami spec: containers: - name: whoami image: containous/whoami ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: whoami namespace: default spec: selector: app: whoami ports: - protocol: TCP port: 80 targetPort: 80然后创建Traefik特有的IngressRoute# whoami-ingressroute.yaml apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: whoami namespace: default spec: entryPoints: - web routes: - match: Host(traefik.example.com) PathPrefix(/whoami) kind: Rule services: - name: whoami port: 80应用这些配置后我们可以测试curl http://traefik.example.com/whoami应该能看到whoami服务的响应证明整个链路已经打通请求首先到达Nginx IngressNginx根据Host头转发到Traefik ServiceTraefik根据IngressRoute规则将请求路由到whoami服务4. 高级配置与优化4.1 启用HTTPS支持为了启用HTTPS我们需要为Traefik配置TLS证书。这里以Lets Encrypt为例首先创建Lets Encrypt生产环境的ClusterIssuer# letsencrypt-prod.yaml apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: acme: email: your-emailexample.com server: https://acme-v02.api.letsencrypt.org/directory privateKeySecretRef: name: letsencrypt-prod solvers: - http01: ingress: class: nginx然后更新Traefik的IngressRoute# whoami-ingressroute-tls.yaml apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: whoami-tls namespace: default spec: entryPoints: - websecure routes: - match: Host(traefik.example.com) PathPrefix(/whoami) kind: Rule services: - name: whoami port: 80 tls: certResolver: letsencrypt4.2 监控与指标收集Traefik内置了Prometheus指标端点我们可以通过以下配置启用更新Traefik的ConfigMap# 在traefik.yaml中添加 metrics: prometheus: entryPoint: metrics然后添加新的entryPointentryPoints: metrics: address: :8082更新Service暴露metrics端口# 在traefik-service.yaml中添加 - name: metrics port: 8082 targetPort: metrics4.3 资源限制与HPA为确保Traefik稳定运行建议设置资源限制# 在traefik-deployment.yaml的container部分添加 resources: limits: cpu: 1 memory: 512Mi requests: cpu: 100m memory: 128Mi同时可以配置Horizontal Pod AutoscalerapiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: traefik namespace: traefik-system spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: traefik minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 705. 生产环境注意事项在实际生产环境中部署双Ingress Controller时还需要考虑以下因素性能考量两层代理会增加约10-20ms的延迟确保节点有足够的资源处理额外流量监控两个Ingress Controller的指标确保没有性能瓶颈安全最佳实践限制Traefik Dashboard的访问仅允许内部IP为不同环境使用不同的证书定期轮换TLS证书和凭据故障排查技巧检查Nginx和Traefik的日志是否显示正常转发使用kubectl get ingress,ingressroute确认资源状态通过kubectl port-forward直接访问服务隔离问题版本升级策略先在一个非关键环境测试新版本保持Nginx和Traefik版本的兼容性准备好回滚方案特别是CRD变更可能不向后兼容

相关文章:

K8s集群里Nginx和Traefik怎么和平共处?一个真实场景下的双Ingress Controller配置实战

Kubernetes集群中Nginx与Traefik双Ingress Controller共存实践 在Kubernetes生产环境中,我们经常会遇到需要同时运行多个Ingress Controller的场景。比如,一个已经稳定运行Nginx Ingress Controller的集群,现在希望引入Traefik来管理特定Nam…...

Win11Debloat终极指南:如何简单快速优化Windows系统性能

Win11Debloat终极指南:如何简单快速优化Windows系统性能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …...

广西大学机械复试上岸学长亲授:从材料准备到导师联系,这份保姆级避坑指南请收好

广西大学机械复试通关手册:一位上岸学长的全流程实战拆解 站在广西大学机械与交通工程学院的红楼前,我还能清晰回忆起去年此时手捧复试材料、心跳加速的自己。作为从双非院校逆袭上岸的"过来人",我深知复试环节那些藏在流程背后的&…...

告别Cesium地形加载慢!用Docker+CTB快速切片你的DEM数据(保姆级教程)

告别Cesium地形加载慢!用DockerCTB快速切片你的DEM数据(保姆级教程) 当你在Cesium项目中加载高精度地形时,是否遇到过浏览器卡顿、数据加载缓慢的困扰?传统的手工处理流程不仅耗时费力,还难以保证输出质量的…...

如何在Mac上免费实现NTFS完美读写?Free-NTFS-for-Mac终极指南

如何在Mac上免费实现NTFS完美读写?Free-NTFS-for-Mac终极指南 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and manage…...

告别云端依赖!OpenStation 大模型本地部署,携手 OpenCode 重构 AI 编程全流程

目录 1. 模型库 2. 部署模式 3. 节点选择策略 4. 运维管理 5. OpenCode安装教程 通用一键安装方法 包管理器安装 6. OpenStation对接OpenCode 配置修改 测试使用OpenCode进行编码 7. OpenStation 快速部署指南 总结 作为长期深耕 AI 辅助编程领域的软件开发者&…...

避坑指南:UG NX二次开发中MoveObjectBuilder的5个常见错误与调试技巧

UG NX二次开发实战:MoveObjectBuilder避坑指南与高阶调试技巧 在UG NX的二次开发领域,MoveObjectBuilder堪称几何变换的瑞士军刀——功能强大却暗藏玄机。许多中高级开发者在实现对象移动、旋转等操作时,往往会被其复杂的参数体系和隐蔽的坐标…...

跨平台鼠标自动化:提升工作效率的智能解决方案

跨平台鼠标自动化:提升工作效率的智能解决方案 【免费下载链接】MouseClick 🖱️ MouseClick 🖱️ 是一款功能强大的鼠标连点器和管理工具,采用 QT Widget 开发 ,具备跨平台兼容性 。软件界面美观 ,操作直观…...

别再只用mdadm了!试试用LVM命令lvcreate直接创建RAID5阵列(附详细参数解析)

LVM RAID实战指南:用lvcreate命令构建企业级存储阵列 在数据中心运维和云计算基础设施管理中,存储系统的可靠性和性能始终是核心挑战。传统方案中,管理员往往需要同时掌握mdadm和LVM两套工具链来实现磁盘阵列和逻辑卷管理——这种割裂的工作流…...

LibreHardwareMonitor:终极硬件监控解决方案,让你的电脑健康一目了然

LibreHardwareMonitor:终极硬件监控解决方案,让你的电脑健康一目了然 【免费下载链接】LibreHardwareMonitor Libre Hardware Monitor is free software that can monitor the temperature sensors, fan speeds, voltages, load and clock speeds of you…...

打卡信奥刷题(3180)用C++实现信奥题 P8015 [COCI 2013/2014 #4] GUMA

P8015 [COCI 2013/2014 #4] GUMA 题目描述 给出一个 N 1 N1 N1 列的矩形,第 i i i 列必须通过水平切割 A i − 1 A_i-1 Ai​−1 次被等分成 A i A_i Ai​ 份,请你求出最少需要几次切割才能按要求分割完。 T i p s : Tips: Tips: 一次切割一次可以…...

终极指南:让Mem Reduct内存管理工具说中文的3种实用方法

终极指南:让Mem Reduct内存管理工具说中文的3种实用方法 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct …...

终极内存诊断指南:Memtest86+ 完整使用教程

终极内存诊断指南:Memtest86 完整使用教程 【免费下载链接】memtest86plus Official repo for Memtest86 项目地址: https://gitcode.com/gh_mirrors/me/memtest86plus 你是否经历过电脑频繁蓝屏、系统无故重启,或者重要数据莫名其妙损坏&#xf…...

R语言新手必看:解决devtools安装GitHub包报错的完整排查手册(附gwasglue实战)

R语言新手必看:解决devtools安装GitHub包报错的完整排查手册(附gwasglue实战) 在R语言生态中,GitHub已成为许多前沿R包的首发平台。对于刚接触R语言的用户来说,使用devtools::install_github()安装GitHub上的R包时&…...

打卡信奥刷题(3179)用C++实现信奥题 P8014 [COCI 2013/2014 #4] SUMO

P8014 [COCI 2013/2014 #4] SUMO 题目描述 有 N N N 个选手参加 M M M 场 1 1 1 对 1 1 1 的比赛,比赛顺序已经定好。 现在让你将这些选手分成 2 2 2 队,使选手尽可能晚地碰到同队的选手。 输出最优方案下第一次有选手碰到同队的的选手的比赛序…...

掌握JSTL核心标签:从入门到精通

JSTL核心标签库学习笔记在现代Java Web开发中,JSP标准标签库(JSTL)扮演着关键角色,它能有效替代JSP页面中的Java脚本代码,提升代码可读性和可维护性。本文将基于学习笔记,系统讲解JSTL核心标签库的核心功能…...

别再只用PWM了!深入剖析ESP32的RMT外设如何精准控制WS2812时序

别再只用PWM了!深入剖析ESP32的RMT外设如何精准控制WS2812时序 当你在ESP32项目中使用WS2812灯条时,是否遇到过颜色显示不准确、灯珠闪烁或响应延迟的问题?这些问题往往源于对时序控制的误解。大多数开发者会本能地选择PWM(脉宽调…...

SparkFun Digi X-ON LoRaWAN开发套件解析与应用

1. SparkFun Digi X-ON LoRaWAN开发套件深度解析最近拿到了一套SparkFun新推出的Digi X-ON LoRaWAN开发套件,作为一名长期从事物联网开发的工程师,我对这种开箱即用的解决方案特别感兴趣。这套设备将网关、节点和传感器模块整合在一起,大大降…...

超时控制:AI Agent 执行超时处理方案

超时控制:AI Agent 执行超时处理方案📝 本章学习目标:本章进入基础执行环节,帮助读者掌握AI Agent的核心执行机制。通过本章学习,你将全面掌握"超时控制:AI Agent 执行超时处理方案"这一核心主题…...

从ECU硬件抽象到功能安全隔离:深入解读AutoSar 4.3.1中ECUC模块的五大核心配置集

从ECU硬件抽象到功能安全隔离:深入解读AutoSar 4.3.1中ECUC模块的五大核心配置集 在汽车电子架构快速演进的今天,AutoSar标准已成为连接芯片硬件与上层应用软件的关键纽带。作为AutoSar基础软件层(BSW)的核心配置中枢,…...

终极XXMI启动器教程:一站式管理所有二次元游戏模组的完整指南

终极XXMI启动器教程:一站式管理所有二次元游戏模组的完整指南 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 你是否厌倦了为不同的二次元游戏安装多个独立的模组管理…...

从ISO标准到实战避坑:搞懂激光光束直径的D4σ、1/e²、FWHM到底该怎么选?

激光光束直径测量:D4σ、1/e与FWHM的工程选择指南 在激光精密加工实验室里,一位工程师正对着屏幕上的光斑轮廓数据皱眉——同样的激光器,用不同设备测出的光束直径竟然相差15%。这种场景在光学实验室并不罕见,根源往往在于测量标准…...

招聘背景核验程序,过往工作,证书上链,企业快速核验,杜绝简历造假,

⚠️ 说明:这是本地模拟区块链思路的演示程序,用于说明“招聘背景核验与简历存证”的技术逻辑,不等同于权威背调系统或人力资源合规平台。 一、实际应用场景描述 企业在招聘过程中常遇到: - 候选人简历中工作经历、职位、在职时间…...

Java开发农业物联网平台必须掌握的6项硬核能力,第4项连高级工程师都常忽略!

更多请点击: https://intelliparadigm.com 第一章:Java农业物联网平台开发全景概览 Java凭借其跨平台性、成熟生态与企业级稳定性,成为构建农业物联网(Agri-IoT)平台的核心语言。在土壤温湿度传感、气象站数据聚合、…...

如何用CheatEngine-DMA插件实现终极内存修改:5步完整指南

如何用CheatEngine-DMA插件实现终极内存修改:5步完整指南 【免费下载链接】CheatEngine-DMA Cheat Engine Plugin for DMA users 项目地址: https://gitcode.com/gh_mirrors/ch/CheatEngine-DMA 在游戏修改和内存分析领域,CheatEngine-DMA插件为D…...

CompressO:轻松压缩视频图片,释放你的设备空间

CompressO:轻松压缩视频图片,释放你的设备空间 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/co/compres…...

别再怕浪涌了!手把手教你用光耦和比较器给220V交流电做‘心脏监护’(过零检测实战)

别再怕浪涌了!手把手教你用光耦和比较器给220V交流电做‘心脏监护’(过零检测实战) 当你在深夜调试智能调光开关时,突然听到"啪"的一声火花声,那种心惊肉跳的感觉我至今难忘。那次经历让我深刻认识到&#x…...

GitHub 热榜项目 - 日榜(2026-04-27)

GitHub 热榜项目 - 日榜(2026-04-27) 生成于:2026-04-27 统计摘要 共发现热门项目: 13 个 榜单类型:日榜 Token赞助:siliconflow 本期热点趋势总结 本期 GitHub 热榜呈现出 AI Agent 深度介入开发者工作流的显著趋势。核心技…...

终极黑苹果配置指南:OpCore-Simplify如何15分钟搞定OpenCore EFI

终极黑苹果配置指南:OpCore-Simplify如何15分钟搞定OpenCore EFI 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置而…...

Win11Debloat:3分钟完成Windows系统优化,告别臃肿与广告困扰

Win11Debloat:3分钟完成Windows系统优化,告别臃肿与广告困扰 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to…...