TKE集群超级节点pod访问Local模式LoadBalancer类型service不通

1. 问题现象

tke集群添加了超级节点,然后部署的服务通过LoadBalancer模式的servcie对外提供服务,当客户端pod调度到普通节点上,可以通过clb的vip访问到后端服务,当pod调度到超级节点上,访问clb的vip不通,具体测试看下图。

这里clb的vip是172.16.200.2,并且配置了service的模式是Local模式,一般配置Local模式是为了后端pod能获取到真实的客户端ip,因为Local模式,能够保留来源IP,并可以保证公网、VPC内网访问(LoadBalancer)和主机端口访问(NodePort)模式下流量仅在本节点转发。

当pod调度在正常节点上,是可以直接通过vip访问到后端nginx服务的,下面我们将客户端pod调度到超级节点上测试下。

这里pod ip和节点ip一致并且有计费规格,则说明pod是调度到了超级节点上,登陆容器测试可以发现,通过vip访问nginx服务就不通了,这里是什么原因呢?为什么客户端pod在普通节点就可以正常访问,调度到超级节点就不行了。

2. 问题原因

解释说明这个现象前,这里简单的说明下超级节点的pod底层的是一个什么样构成,因为超级节点底层是没有物理资源的,其实只是k8s的一个对象而且。超级节点的每一个pod,都是单独一台机器,上面会运行containerd,和类似于kubelet、kube-proxy的组件,但是kube-proxy都是ipvs模式,这也是为什么超级节点pod能访问到集群的svc原因。

其实在超级节点上pod无法访问,就是因为ipvs模式本身实现导致的,因为ipvs模式下,service为Local模式,只会放过同节点上的流量,当前客户端pod和服务端不在同一个节点,则访问不通,具体可以参考这个issue https://github.com/kubernetes/kubernetes/issues/93456

那很多人又会疑惑,为什么普通节点能通,这里是因为我的集群是iptables模式,普通节点部署的kube-proxy是iptables模式,iptables模式是没问题,如果是集群是ipvs模式,也是同样的现象,大家可以测试下。

3. 解决方案

3.1 服务端pod和客户端pod在同一个节点

这里大致了解原因了,先我们来看看如何解决这个问题。首先超级节点的pod kube-proxy模式是不能改的,默认都是ipvs,如果因为需要获取到真实客户端ip,servcie模式不能改成cluster模式,那就只能将服务端pod调度到和客户端同一个超级节点上

这里nginx pod调度到超级节点后,客户端pod就能正常通过vip访问了,但是这里因为我是测试集群,只有一个超级节点,因此会在同一个节点上,如果是集群有多个超级节点,为了让服务端pod和客户端pod在同一个超级节点,需要通过nodeselector或者节点亲和性来保证。

3.2 service采用直连模式

除了让服务端pod和客户端pod在同一个节点这个方法,还有别的方案,service配置Local模式一般都是为了获取真实客户端ip,这里获取真实客户端ip,其实可以service采用直连pod的模式,因为clb会直接透传客户端ip到后端rs的,这里直连模式,clb监听的后端rs直接就是pod,不再经过nodeport的转发了,因此pod也能直接获取到真实的客户端ip,现在VPC-CNI和GlobalRoute这2种网络模式都支持直连了,具体如何配置直连可以参考文档https://cloud.tencent.com/document/product/457/41897

如果service采用了直连,就可以不用配置为Local模式来获取真实客户端ip了,这里超级节点pod通过clb vip访问也就没问题。

本文转载于网络 如有侵权请联系删除

相关文章

  • Typecho插件 - 美化你的模板编辑器

    灵感来源Typecho的模板编辑器特别简陋,像我这种用习惯IDE的人,没有高亮真的很不舒服。所以说很早之前就萌发了这样的一个念头,但是始终没有思路。无独有偶,今天晚上在翻泽泽大佬的Typecho爱好者发现了一款叫做MbEditor的插件,一下子勾起了我的兴趣,但是一看插件的付费版还是15块钱,其实我真的想说,15块钱买包子他不香嘛(没错,还是因为没有钱)。 反正有个免费版就凑合用吧,下载了免费版发现很好用,但是主题有点鸡肋,不是很喜欢这种主题,于是便想换主题。后来我感觉免费版和付费版无非就是多了一个切换主题和支持通过cdn来加载文件,那我是不是也可以写呢。说干就干,按照泽泽大佬插件介绍里面的截图和我自己的思路高仿了一个1:1的插件。然后更名为ThemeEditorPro,我感觉我这种不算是改版权,因为我基本上是将所有的代码都写了一遍,希望大家会喜欢。安装说明这个插件没有海报那么复杂,只需要将插件压缩包上传到/usr/plugins/并将文件夹的名字改为ThemeEditorPro就可以了。 我把codemirror的所有主题都内置进去了,一共63款总有一款适合你。插件截图插件配置界面(

  • 深度学习实战之手写签名识别(100%准确率、语音播报)

    手写签名在日常生活中随处可见,简单来说就是亲笔书写自己的名字,在纸质文档上使用手写签名主要用以确定签字者的身份,并表示签字者同意所签署文档中规定的内容,对文档的真实性负责,且具有法律效力。由此看见手写签名的重要性。在现实的生活中不乏有不法分子模仿其他人的字体,进而模仿他人的签名获得不发的利益。尽管会有鉴别字体的工作,但在鉴别时不仅不准确,而且还十分的消耗人力以及财力。为了解决这一客观显示存在的问题,笔者结合着人工智能的思想和并使用计算机视觉技术对手写签名进行训练,得到了高达100%的训练准确率。并将训练模型进行优化后运用实现了一套手写签名识别系统。1.开发环境笔者的开发环境如下,大家可以参考进行配置python3.6或python3.7pytorch1.0.1torchvision0.2.2.post3visomubuntu16.04和windows102.准备阶段在完成了上述的环境搭建后,即可进入到准备阶段了。这里准备的有数据集的准备、以及相关代码的主备。数据集的准备 笔者这里的数据集是自己准备的,收集了六个人的手写签名,约4500张签名图片 在这里插入图片描述 在这里插入图片描述数

  • 21 个 curl 命令练习

    最近,我对人们如何学习新事物感兴趣。我正在读KathySierra的好书《Badass:MakingUsersAwesome》,它探讨了有关“刻意练习”的想法。这个想法是,你找到一个可以用三节45分钟课程内能够学会的小技能,并专注于学习这项小技能。因此,作为一项练习,我尝试考虑一项能够在三节45分钟课程内学会的计算机技能。我认为使用curl构造HTTP请求也许就是这样的一项技能,所以这里有一些curl练习作为实验!什么是curl?curl是用于构造HTTP请求的命令行工具。我喜欢使用curl,因为它能够很轻松地测试服务器或API的行为是否符合预期,但是刚开始接触它的时候会让你感到一些困惑!下面是一幅解释curl常用命令行参数的漫画(在我的BiteSizeNetworking杂志的第6页)。熟能生巧对于任何命令行工具,我认为熟练使用是很有帮助的,能够做到只输入必要的命令真是太好了。例如,最近我在测试GumroadAPI,我只需要输入:curlhttps://api.gumroad.com/v2/sales\ -d"access_token=<SECRET>"

  • 白话Elasticsearch05- 结构化搜索之使用range query来进行范围过滤

    文章目录概述数据准备小示例搜索浏览量在30~60之间的帖子搜索发帖日期在最近1个月的帖子概述继续跟中华石杉老师学习ES,第五篇课程地址:https://www.roncoo.com/view/55rangefilter已经被rangequery取代了,所以我们这里直接来看rangequery吧https://www.elastic.co/guide/en/elasticsearch/reference/6.4/query-dsl-range-filter.htmlhttps://www.elastic.co/guide/en/elasticsearch/reference/7.0/query-dsl-range-query.html#query-dsl-range-query数据准备为了演示范围查询,我们增加个浏览量view_cnt字段,更新DSL如下POST/forum/article/_bulk {"update":{"_id":"1"}} {"doc":{"view_cnt":30

  • 【动态规划/背包问题】分组背包问题练习篇

    前言今天是我们讲解「动态规划专题」中的「背包问题」的第十三篇。今天将完成一道「分组背包」练习题。由于LeetCode没有与「分组背包求最大价值」相关的题目,因此我们使用「分组背包求方案数」来作为练习篇。另外,我在文章结尾处列举了我所整理的关于背包问题的相关题目。背包问题我会按照编排好的顺序进行讲解(每隔几天更新一篇,确保大家消化)。你可以先尝试做做,也欢迎你向我留言补充,你觉得与背包相关的DP类型题目~题目描述这是LeetCode上的「1155.掷骰子的N种方法」,难度为「中等」。Tag:「背包问题」、「动态规划」、「分组背包」这里有d个一样的骰子,每个骰子上都有f个面,分别标号为1,2,...,f。我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和。如果需要掷出的总点数为target,请你计算出有多少种不同的组合情况(所有的组合情况总共有f^d种),模10^9+7后返回。示例1:输入:d=1,f=6,target=3 输出:1 复制示例2:输入:d=2,f=6,target=7 输出:6 复制示例3:输入:d=2,f=5,target=10 输出:1 复制示例4:输入:d=

  • (十一)golang--键盘输入

    两种方式:fmt.Scanln()和fmt.Scanf()(1)fmt.Scanlnpackagemain import"fmt" funcmain(){ //获取一行的数据 varnamestring varagebyte varsalfloat32 varisPassbool fmt.Println("请输入姓名:") fmt.Scanln(&name) fmt.Println("请输入年龄:") fmt.Scanln(&age) fmt.Println("请输入薪水:") fmt.Scanln(&sal) fmt.Println("请输入是否通过考试:") fmt.Scanln(&isPass) fmt.Printf("名字:%v\n年龄:%v\n薪水:%v\n是否通过考试:%v\n", name,age,sal,isPass) }复制(2)fmt.Scanf()packagemain import"fmt&qu

  • 回顾|揭秘 Serverless SSR 应用监控平台(内附源码)

    5月22日15:00,TencentServerlessHours在线分享会第二期,腾讯云高级产品经理方坤丁、粟俊娥直播《揭秘Serverless应用级监控能力》,在线分享了ServerlessDarhboard能力的详细设计思路与应用。并通过在线Demo,详解如何一站式部署具备应用级监控能力的SSR应用。ServerlessDashboard设计解读腾讯云高级产品经理方坤丁首先分享了腾讯云Serverless近期发布的新能力——应用级监控平台ServerlessDashboard。据介绍,ServerlessDashboard基于新版的ServerlessComponent开发,能够支持用户查看实时日志和应用监控。ServerlessFramework特性【降低门槛】交互式的一键部署指引:只需在终端输入serverless,即可快速部署Serverless应用;【极速部署】将一个Express.js应用部署到云端只需要6s时间,本地和云端代码快速同步;【灵活复用】支持云端注册中心,每位开发者都可以贡献自己的组件到注册中心,便于团队复用;【实时日志】支持部署阶段实时输出请求日志、错误等

  • 国产数据库建模工具,看到界面第一眼,良心了! ​

    软件开发中,数据建模是必不可少的,说到数据库建模工具,很多人想到的第一个工具就是powerdesigner,但是单数据库建模这块来说,给人的感觉还是太重了,并且不支持多种客户端,像我现在用Mac只能望洋生叹了。今天无意中看到一款国产建模工具PDMan,看到简介和界面,就让我精神一震,决定来尝尝鲜!主要支持的功能如下:demo示例支持多个系统客户端(linux,mac,windows)数据库建模生成DDL脚本并执行支持目前主流数据库数据库逆向解析导出WORD,PDF,HTMLMarkDown四种格式的文档自定义模板生成程序代码demo示例软件下载下来就自带两个项目案例,通过案例来模板是最好入门的,发现都是一系列的傻瓜式操作,贼方便。image关系图查看点击项目上的关系图即可一览全局,说实话,界面真的挺好看的。属性查看和修改别说,说就让你看图,都是中文,建模的时候可以关闭那些英文翻译软件了。imageimageimageimage支持多个数据库不多说,一个动态图就看懂 xxx连接数据库,直接执行DDL语句imageimage从数据库进行逆向解析image导出文档,pdf交接的时候最麻烦的就

  • 一关系图让你理解K8s中的概念,Pod、Service、Job等到底有啥关系

    查看原文获得更好阅读体验。刚开始接触K8s的同学可能都会觉得有一定的学习难度,扑面而来的各种概念到底是什么。比如,如何提供一个服务给别人,我是应该用Pod还是用Deployment来运行我的应用等,在接下来的文章中,希望能够解答你的这些疑惑。Kubernetes可以看做云原生时代的操作系统,统一管理下层的基础设施,如计算资源、网络资源、存储资源等等。将集群中存在的各种复杂关系抽象成各种API资源,以统一的方式暴露出各种接口,也便于未来的扩展以及开发团队根据自己的需要定制。因此,我们可以看到在K8s中Docker仅仅是容器运行时的一个实现而已,只要遵守它的约定,实际上是可以替换为适合的其他容器技术的。基于这样的设计思路,理清各种API对象的作用和关系就变得很重要了,只有理解了才能正确地使用K8s,接下来我们就通过一张关系图一点点的来说明。通过Pod终结单容器的蛮荒时代image在接触K8s之前,大多人首先要接触到的就是Docker。我们得到一个容器的镜像之后,要把应用运行起来最简单的方式就是dockerrun的命令。然而在实际的生产环境中,很少仅靠一个单容器就能够满足。比如,一个Web前

  • 【大型网站技术架构笔记】(一)演化过程

    开篇明义:【大型网站技术架构笔记】系列是阅读《大型网站技术架构核心原理与实践》一书的一些笔记,记录了原书的一些重要内容以及我的个人理解。其中很多内容网上都能找得到。其实整本书,我最赞同的是作者阐述的网站架构的价值观——“业务成就技术,而不是相反”。在没有业务场景的时候就一味追逐架构,为技术而技术,或者一上来就想要设计出一个可以适用所有场景的解决方案,是不理智的。我们有的时候可能会陷入技术的怪圈而忘了考虑业务本身。我曾经看到的一句我很喜欢的话,在这边也与诸君分享:好的架构都是进化来的,不是设计来的。以下为(一)演化过程内容:一、初始阶段初始阶段考虑到使用量规范较小,且快速开发等原因,采用单服务器,将文件、数据库与应用程序一起部署即可。语言可以采用LAMP。如下图:二、应用服务于数据服务分离随着访问量的增多,导致存储空间不足,所以需要将应用与数据存储分离部署。文件和数据库存储需要分开。以避免由于大文件io而导致实时数据库服务的长响应延时。文件服务器需要更多的磁盘空间,数据库服务由于需要进行磁盘检索和数据缓存,所以需要较多的磁盘和内存。而应用服务器由于需要业务逻辑带来的频繁密集计算,所以需要

  • 71-函数练习:数学游戏

    随机生成100以内的两个数字,实现随机的加减法。如果是减法,结果不能是负数。 算错三次,给出正确答案。fromrandomimportrandint,choice defadd(x,y): returnx+y defsub(x,y): returnx-y defexam(): cmds={'+':add,'-':sub} nums=[randint(1,100)foriinrange(2)] nums.sort(reverse=True)#列表降序排列 op=choice('+-') result=cmds[op](*nums) prompt="%s%s%s="%(nums[0],op,nums[1]) tries=0 whiletries<3: try: answer=int(input(prompt)) except:#简单粗暴地捕获所有异常 continue ifanswer==result: print('Verygood!') break else: print

  • springMVC框架的理解加深,个人的一些想法

    一写spring-boot整合的时候,有种想看源码的冲动!呸,是钻牛角尖的毛病犯了...@RequestMapping("/index") publicStringindex(Map<String,Object>map){ map.put("hello","fromHiControllermap"); Map<String,Object>temp=newHashMap(); temp.put("hi","fromHiControllernewmap"); /*不用写后缀*/ return"/index"; }复制问题的产生就是为什么hello能传到前端,hi不能,因为都是同种类型的数据啊?二其实,大家靠猜都猜到spring通过反射,对@RequestMapping标志的方法都做了一些操作,那么具体是什么操作呢?通过看源码,spring里面的invokeHandlerMethod,resolveHandlerArguments说的很清楚了,详细的

  • 【专访】国家超级计算无锡中心主任杨广文:神威·太湖之光将加大对深度学习的支持

    【新智元导读】关于无锡超算对深度学习的支持,杨广文教授说:“第一个开发了大量深度学习算法并行软件;第二,研发了一个深度学习平台swCaffe,来支持用户基于这个进行深度学习应用;第三,我们也在布局,与国家并行计算机工程技术中心基于申威26010芯片开展小型化机器研发,特备针对特殊应用开展专用机的研制。2017年9月7日,由中国工程院信息与电子工程学部主办、浪潮集团承办的首届人工智能计算大会(AIComputingConference,简称AICC)在北京举行。清华大学教授、国家超级计算无锡中心主任杨广文在会上作了《神威·太湖之光的深度学习应用》的主题演讲。介绍了此前登顶全球超级计算机500强榜单榜首的神威·太湖之光在深度学习上的应用。“神威·太湖之光”是世界上首台峰值浮点运算性能超过每秒十亿亿次的超级计算机。该系统是我国“十二五”期间“863计划”的重大科研成果,由国家并行计算机工程技术研究中心研制,运算系统全面采用了由国家高性能集成电路设计中心通过自主核心技术研制的国产“申威26010”众核处理器。“神威·太湖之光”也是我国第一台全部采用国产处理器构建的世界排名第一的超级计算机。此外

  • 贫穷限制了我的想象力!一只电子猫竟抵得上百套住房……

    小时候家里穷,肚子饿了就抬头看天度日。我一次看着天上的云说:“爸爸,你看天上那朵云,像不像一只大鸡腿?”“不像。””为啥呀爸爸?““贫穷限制了我的想象力。”也许你觉得一只纯种的宠物猫价格上万元已经非常贵了,可是如今区块链上一只电子猫价格已经上亿,顶得上百套住房的价格,到底发生了什么,难道是贫穷限制了我的想象力?云养猫历史突破说起区块链中的比特币,大部分认为它只是可能有类似有货币支付的属性。可是如今随着一款区块链上养猫游戏风靡整个币圈,让所有人见识到原来区块链下的应用还能这么玩!加密猫游戏(Crytokitties)是全球第一款结合区块链技术的宠物育成游戏,由在温哥华和旧金山的一个叫AxiomZen工作室所设计,包括了猫的生育、收集、购买、销售等多个环节。每只小猫都有256组基因,不同的基因组合会让小猫的背景颜色、长相和条纹等都有差异,甚至还有隐性基因的设计。每只小猫可能继承父母的特质,但也可能产生新的特质,比如一只蓝眼睛的小猫和一只棕眼睛的小猫可能会生出绿色眼睛的猫。每只猫都是完全由个人拥有,没法复制,没法带走,没法销毁,这正是区块链技术所带来的独有属性。用户可以通过两种猫来生育新猫,

  • 指令周期,时钟周期,总线周期概念辨析图_总线周期是指

    《指令周期、时钟周期、总线周期概念辨析》由会员分享,可在线阅读,更多相关《指令周期、时钟周期、总线周期概念辨析(2页珍藏版)》请在人人文库网上搜索。指令周期、时钟周期、总线周期概念辨析在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。通常用内存中读取一个指令字的最短时间来规定CPU周期,(也就是计算机通过内部或外部总线进行一次信息传输从而完成一个或几个微操作所需要的时间)),它一般由12个时钟周期组成。而时钟周期=1秒/晶振频率,因此单片机的机器周期=12秒/晶振频率。指令周期(InstructionCycle):取出并执行一条指令的时间。总线周期(BUSCycle):也就是一个访存储器或I/O端口操作所用的时间。时钟周期(ClockCycle):又称节拍周期,是处理操作的最基本单位。(晶振频率的倒数,也称T状态)。指令周期、总线周期和时钟周期之间的关系:一个指令周期由若干个总线周期组成

  • 腾讯云物联网智能视频服务(行业版)更新时间模板api接口

    1.接口描述接口请求域名:iotvideoindustry.tencentcloudapi.com。 本接口(UpdateTimeTemplate)用于更新时间模板。 默认接口请求频率限制:20次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:UpdateTimeTemplate。 Version 是 String 公共参数,本接口取值:2020-12-01。 Region 是 String 公共参数,详见产品支持的地域列表。 TemplateId 是 String 时间模板ID Name 否 String 时间模板名称 IsAllWeek 否 Integer 是否全时录制,即7*24小时录制。0:非全时录制;1:全时录制。默认1 TimeTem

  • 解决 IIS 文件下载直接被打开

    点击网页链接的*.txt,*.jpg,*.xml等文件时会在浏览器上直接显示,并没有像*.doc那样弹出下载提示框。 解决方法: 在部署的网站上,选择存放文件的目录,选择HTTP响应标头,添加一个HTTP响应头,名称为:Content-Disposition,值为:attachment即可。 作者:AllenChen无影出处:http://www.cnblogs.com/allen0118/ 邮箱:allen0717@163.com本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

  • 博客迁移说明

    前一段时间,我一直在csdn写文章,接下来的一段时间,我将会在博客园更新我的博客。 由于时间和精力关系,我无法将CSDN的文章搬迁到博客园,主要是因为许多公式需要重新编辑,需要大量的时间。因此,我在这里粘贴我CSDN的地址。方便内容的延续性。 CSDN博客地址

  • 信息标记的三种形式及三种信息标记形式的比较

    信息的三种标记形式: 信息的标记 标记后的信息可形成信息组织结构,增加了信息维度 标记后的信息可用于通信、存储或展示 标记的结构与信息一样具有重要价值 标记后的信息更利于程序理解和运用 HTML的信息标记 HTML是WWW(WorldWideWeb)的信息组织方式。 H:hyper;T:text;M:markup;L:language。              HTML可以通过预定义的<>...</>标签形式组织不同类型的信息。 信息标记的三种形式 XML:eXtensibleMarkupLanguage              XML中注释的格式:            

  • C++:复合类型————引用(左值引用)

    C++新增的复合类型————引用。 引用变量的主要用途是用作函数的形参,通过将引用变量用作参数,函数将使用原始数据,而不是其副本,这样除了指针之外引用也将为函数处理大型结构提供了一种非常方便的途径。 一、创建引用变量 #include<iostream> usingnamespacestd; intmain() { intnumber1=50,number2=100,number3; int&refer=number1; cout<<"int&refer=number1"<<endl; cout<<"Thevalueofrefer:"<<refer<<"referat"<<&refer<<endl; cout<<"Thevalueofnumber1:"<<number1<<"number1at"<<&number1<<endl; cout<<endl<<"refer=

  • 利用hugo生成静态站点

    动机 使用Markdown撰写博客,并以静态页面形式发布。 选择hugo 现在jekyll似乎更加流行,但是jekyll是基于Ruby的,在windows下安装很繁琐。 而hugo是用go写的,windows版本只有一个exe,安装起来非常方便。 因此决定使用hugo作为站点生成器。 系统环境 Windows8.1x64(主流Windows系统应该都没有问题) git(用来下载皮肤) 安装hugo 下载 通过Github的下载页面获得最新版本的hugo。 解压并配置PATH 解压到任意文件夹,例如:D:\soft\hugo。 将该文件夹追加到系统环境变量的PATH变量下。 检验 在命令行下输入如下命令: hugoversion 复制 如果配置成功,会显示当前hugo的版本号。 建立hugo工程 建立工作文件夹 例如:D:\soft\hugo\blog 进入该文件夹: D:\>cdD:\soft\hugo\blog D:\soft\hugo\blog> 复制 建立站点 例如:blog.mute-g.com D:\soft\hugo\blog>hugone

相关推荐

推荐阅读