解决k8s通过traefik暴露域名失败并报错:Connection Refused的问题

我敢说本篇文章是网上为数不多的解决traefik暴露域名失败问题的正确文章。

我看了网上太多讲述traefik夸夸其谈的文章了,包含一大堆复制粘贴的水文和还有什么所谓“阿里技术专家”的文章,讲的全都是错的!基本没有一个能说到点子上去! 所以这些垃圾文章导致你最后配置ingress规则以后,访问域名还是会报错: Connection Refused

你所看到的这些水文就是把官方或者网上互相抄来抄去的文章,拿来复制粘贴一大片代码,不知所云,完全就是流水账!

我们要明白解决问题的关键,在于分析问题的思考模式和分析过程!这个非常重要!

然后回到开头,为什么会出现Connection Refused错误,我们不考虑什么所谓的k8s和traefik这些杂七杂八的东西,而是回归到网络的本质中去!

这种情况只有一种可能: 端口可能根本就没有监听!

对了,这就是问题的关键!

所以,因为k8s的部署是容器网络,容器的端口默认是不对外暴露的,所以即便deployment部署了,如果没有没有暴露端口,就等同于没有监听端口,此时访问域名就必然是Connection Refused!

有人说:那你配置service不就完了。service再搞个NodePort不就完了!

那我问你NodePort的端口是多少!是30000-32767! 这玩意能用吗?!

所以注意了:对于traefik来说:service不是对外提供服务的,它是被k8s集群内部所调用的,特别是为ingress服务!

我们始终要记住网络的基本原则:一个请求进来,服务器必须对它所请求的端口有监听,否则就会产生Connection Refused错误

这是第一个问题。

然后第二个问题: 域名怎么解析。或者说ingress规则中host中的域名应该解析到哪一台机器?

大家有没有想过这个问题? 给你10秒钟好好想一想

。。。。。。。。。。。。。

时间到了! 有没有一点idea。 作为一个常识,我们应该不会想到这个域名必须绑定到其中某一台机器吧,对不对,否则就失去了做集群的必要性了!

我们需要的是一种集群边缘触发方式,也就是说把访问域名解析到集群中的任意一台机器

所以,这里要严厉批判traefik官方文档! traefik官方文档简直就是胡说八道!竟然把deployment搞进来了!  deployment是啥玩意? 说到底它就是一个动态的东西,通过deployment生成的pod,你根本没法知道:它会分配到哪一台机器。 这他妈不是坑爹吗? 那么我现在没法知道traefik controller pod具体在哪一台机器,我怎么做域名解析? 难道我通过kubectl get pods 命令获取到了traefik controller pod的信息,然后知道了它在哪台机器,然后把域名解析到这台机器。但是如果后来删除了deployment,又重新部署了分配了新的pod, 这种情况怎么办?

这样的运作规则跟集群边缘触发方式完全是互相矛盾的!

我们需要的是:每一台机器都能有traefik controller pod,这个只有DaemonSet能满足!因为DaemonSet可以确保在每个节点上都运行一个Pod的副本

好了,知道了原因,我来谈谈怎么解决这个问题:

1. traefik controller 的部署方式必须DaemonSet.

2. traefik controller的80端口必须通过hostPort暴露出来:

3. ingress规则中的域名执行k8s集群中任何一台机器就ok了

最后谈一点:ingress规则中的namespace必须跟它后面路由转发的service的namespace保持一致

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

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

相关文章

VSCode配置msvc编译调试环境

1.VS Code简介 VS Code 使用 Electron 框架构建用户界面,该框架使用 Chromium 和 Node.js 构建桌面应用程序。这使得 VS Code 能够在 Windows、Linux 和 macOS 上运行,并且可以使用 Web 技术 (HTML、CSS 和 JavaScript) 构建用户界面。 VS Code 使用 Monaco 引擎来提供文本编辑…

Visual Studio Code安装和设置中文

文章目录 Visual Studio Code安装Visual Studio Code设置中文 步骤如下: Visual Studio Code安装 1.下载安装包 VS Code的官网 下载链接中的“az764295.vo.msecnd.net” 替换为国内镜像地址“vscode.cdn.azure.cn”,下载速度直接飙升至几十 Mb/s。(在官网下载速度…

Linux 图形界面配置RAID

目录 RAID 1 配置 RAID 5配置 , RAID 配置起来要比 LVM 方便,因为它不像 LVM 那样分了物理卷、卷组和逻辑卷三层,而且每层都需要配置。我们在图形安装界面中配置 RAID 1和 RAID 5,先来看看 RAID 1 的配置方法。 RAID 1 配置 配置 RAID 1…

sql查询结果跟in传入参数顺序一致

Orcle、postgresql、td-sql中可以使用如下语句 select namefrom tbl_user_infowhere id in (4,3,1)order by instr(4,3,1,id);查询结果:

开源项目datavines内存泄漏问题分析

应用程序开启JMX java -Dspring.profiles.activemysql -Dcom.sun.management.jmxremote.port1099 -Dcom.sun.management.jmxremote.sslfalse -Dcom.sun.management.jmxremote.authenticatefalse -Djava.rmi.server.hostname127.0.0.1 -jar dataVines.jar 通过jdk自带工具&…

Reids集群

目录 一、集群的概念 1.为什么要搭建集群? 2.Redis搭建集群是否需要考虑状态同步的问题? 二、Redis集群的模式 1.redis集群--主从模式 1.1什么是Redis的主从模式? 1.2.主从模式它们之间的数据是怎么实现一个同步的? 1.3.主…

NovelD: A Simple yet Effective Exploration Criterion论文笔记

NovelD:一种简单而有效的探索准则 1、Motivation 针对稀疏奖励环境下的智能体探索问题,许多工作中采用各种内在奖励(Intrinsic Reward)设计来指导困难探索环境中的探索 ,例如: ICM:基于前向动力学模型的好奇心驱动探索RND&…

【Qt-23】Qt charts绘制曲线图

一、QChart简介 QChart是Qt中专门用于绘制图表的模块,支持折线图、柱状图、饼图等常见类型。其主要组成部分有: QChart:整个图表的容器,管理图表中的所有数据和图形属性QChartView:继承自QGraphicsView,用于…

蓝桥杯算法心得——拼数(排列型回溯dfs)

大家好,我是晴天学长,排列型的dfs,在一些需要暴搜的题中很中很重要,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .拼数 2) .算法思路 超级递归 1.遍历数组&#…

【从删库到跑路】MySQL数据库 | 全局锁 | 表级锁 | 行级锁

文章目录 🌹简述🎄全局锁⭐数据备份🎈设置全局锁🎈对表进行备份🎈释放锁 🎄表级锁🛸表锁⭐读锁⭐写锁 🛸元数据锁🛸意向锁⭐意向共享锁⭐意向排他锁 🎄行级锁…

国产企业级低代码开发哪个最好?这一款超好用

低代码开发平台(Low-code Development Platform)正在迅速崛起,成为未来软件技术发展的主导趋势。通过使用低代码开发平台,企业能够显著提高开发效率,降低对专业开发人员的依赖,并实现更快速的软件交付和使用…

[数据结构]—带头双向循环链表——超详解

💓作者简介🎉:在校大二迷茫大学生 💖个人主页🎉:小李很执着 💗系列专栏🎉:数据结构 每日分享✨:旅行是为了迷路,迷路是为了遇上美好❣️❣️❣️ …