游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

理解Kubernetes中的NginxIngress

  Ingress有什么作用?管理集群外部对集群内服务的访问,典型如HTTP请求。它可以提供负载均衡、SSL终结和基于域名的虚拟主机访问。我们发现这些功能都比较容易实现,将集群内的服务暴露到集群外部,可以使用NodePort类型的Service,负载均衡可以使用HAProxy来实现,SSL终结功能部署七层反向代理就可以,基于域名的虚拟主机访问也同样比较容易实现,那为什么Kubernetes要引入IngressAPI对象呢?
  Ingress的潜力
  Ingress的功能如开篇所述,可以使用其他技术实现,但是实际在操作过程中发现并没那么简单。在没有Ingress参与的情况下,将集群内服务暴露到集群外使用NodePort类型的Service,那需要给每个微服务都创建此类Service,当服务较多时,排障将非常复杂,协调主机端口使用也会让人抓狂。在集群外部署Nginx或Apache,SSL终结和基于域名的虚拟主机访问可以实现,但是服务发现和配置管理又是个挑战,集群外的Nginx和Apache感知不到集群中服务的增加和减少,需要人为配置,这对集群管理员来说,简直是个噩梦。幸好,Ingress来了。
  安装
  安装服务到Kubernetes一般都比较容易,使用kubectlapply后面跟上yaml文件即可。当然也可以使用Kubernetes的包管理工具Helm。nginxingress根据环境,可选有三种安装方法:使用helmkubectlapplyyamlfiles在minikube或MicroK8s中,插件方式安装
  笔者使用这篇文章介绍的方法安装Kubernetes集群,这里选用第二种方式安装nginxingress,执行下面命令(因版本更新较快,实际部署请参考官网):kubectlapplyfhttps:raw。githubusercontent。comkubernetesingressnginxcontrollerv1。1。1deploystaticproviderbaremetaldeploy。yaml
  安装会从k8s。gcr。io镜像仓拉取镜像,如果拉取失败可选择阿里云或其他。
  查看增加的集群资源,〔rootmaster〕kubectlgetallningressnginxNAMEREADYSTATUSRESTARTSAGEpodingressnginxadmissioncreate7k9kt01Completed014dpodingressnginxadmissionpatch5bcmq01Completed114dpodingressnginxcontroller687578654bf92bq11Running3(42dago)14dNAMETYPECLUSTERIPEXTERNALIPPORT(S)AGEserviceingressnginxcontrollerNodePort10。1。70。249none80:30305TCP,443:31330TCP14dserviceingressnginxcontrolleradmissionClusterIP10。1。124。31none443TCP14dNAMEREADYUPTODATEAVAILABLEAGEdeployment。appsingressnginxcontroller111114dNAMEDESIREDCURRENTREADYAGEreplicaset。appsingressnginxcontroller687578654b11114dNAMECOMPLETIONSDURATIONAGEjob。batchingressnginxadmissioncreate115s14djob。batchingressnginxadmissionpatch117s14d
  因为集群是自建的,ingressnginxcontroller服务类型为NodePort,后面访问服务需要使用这样的方式:NodeIP3030531330Path
  使用
  上步操作成功执行后,便可以创建Ingress类型的API对象了,笔者集群中提前部署一Web服务,Service信息如下:〔rootmaster〕kubectlgetsvcNAMETYPECLUSTERIPEXTERNALIPPORT(S)AGEnginxClusterIP10。1。133。186none80TCP14h
  创建IngressAPI对象,12apiVersion:networking。k8s。iov13kind:Ingress4metadata:5name:selfnginx6namespace:test7annotations:8nginx。ingress。kubernetes。iorewritetarget:9spec:10ingressClassName:nginx11rules:12host:mynginx。example。com13http:14paths:15path:testpath16pathType:Prefix17backend:18service:19name:nginx20port:21number:80
  如果没有将前面安装的nginxingress配置为默认的Ingress,需要加入第10行。否则即使ingress资源提交到APIServer,nginxingresscontroller也没有反应。获取ingressClassName的值,〔rootmaster〕kubectlgetingressclassNAMECONTROLLERPARAMETERSAGEnginxk8s。ioingressnginxnone14d
  查看创建的Ingress,〔rootmaster〕kubectlgetingressNAMECLASSHOSTSADDRESSPORTSAGEselfnginxnginxmynginx。example。com192。168。52。13280125m
  通过Ingress访问Web服务(如果域名没有解析,修改etchosts文件),〔rootmasternginx〕curlmynginx。example。com:30305testpathhellokubernetes!
  原理
  NginxIngress的部署和使用不难,最重要是熟悉它的工作原理,这样在遇到问题时才能迅速定位。ingressnginxcontrollerPod里面仅运行一个容器,但是这个容器里面却有多个守护进程,重要的有两个:controller和nginx。进入Pod执行ps命令查看:〔rootmaster〕kubectlexecitingressnginxcontroller687578654bf92bqningressnginxbinbashbash5。1psPIDUSERTIMECOMMAND1wwwdata0:00usrbindumbinitnginxingresscontrollerelectionidingresscontrollerleadercontrollerclassk8s。ioingressnginxconfig7wwwdata11:28nginxingresscontrollerelectionidingresscontrollerleadercontrollerclassk8s。ioingressnginxconfigmapingressnginxingr25wwwdata0:00nginx:masterprocessusrlocalnginxsbinnginxcetcnginxnginx。conf247wwwdata0:01nginx:workerprocess248wwwdata0:00nginx:cachemanagerprocess
  Controller是管理者,实现服务发现和自动配置功能,见下图(下载自官网),
  nginxingress工作原理
  这幅图看起来很复杂,其实用一句话就可以概括:IngressController(即图中的IC)相当于系统管理员,需求者提交Ingress资源到APIServer,IC从APIServer获取Ingress资源,因为IC既了解Ingress资源又了解Nginx,它完成Ingress的翻译,随即更新Nginx的配置文件,并执行reload操作,核心逻辑就是这样。
  上面我们给nginxService创建了Ingress资源,访问路径配置为testpath,现在进入ingressnginxcontrollerPod看下Nginx的配置文件:etcnginxnginx。conf。
  关于虚拟主机mynginx。example。com的配置有200多行,删掉无关的,startservermynginx。example。comserver{servernamemynginx。example。com;listen80;listen443sslhttp2;setproxyupstreamname;sslcertificatebyluablock{certificate。call()}locationtestpath{setnamespacetest;setingressnameselfnginx;setservicenamenginx;setserviceport80;setlocationpathtestpath;setglobalratelimitexceedingn;。。。。。。setbalancerewmascore1;setproxyupstreamnametestnginx80;setproxyhostproxyupstreamname;setpassaccessschemescheme;。。。。。。rewrite(?i)testpathbreak;proxypasshttp:upstreambalancer;proxyredirectoff;}location{setnamespacetest;setingressnameselfnginx;setservicename;setserviceport;setlocationpath;setglobalratelimitexceedingn;。。。。。。proxypasshttp:upstreambalancer;proxyredirectoff;}}endservermynginx。example。com
  从配置文件中可以看到发往testpath的请求完成一次跳转后最终发送给upstreambalancer,其在Nginx配置文件中的定义如下,upstreamupstreambalancer{Attention!!!Wenolongercreateupstreamsectionforeverybackend。BackendsarehandleddynamicallyusingLua。Ifyouwouldliketodebugandseewhatbackendsingressnginxhasinitsmemoryyoucaninstallourkubectlpluginhttps:kubernetes。github。ioingressnginxkubectlplugin。Onceyouhavethepluginyoucanusekubectlingressnginxbackendscommandtoinspectcurrentbackends。server0。0。0。1;placeholderbalancerbyluablock{balancer。balance()}keepalive320;keepalivetimeout60s;keepaliverequests10000;}
  因Nginx配置文件严重依赖Lua,这里看到的信息不直观。为了看到后端服务,按照注释,为kubectl安装ingressnginx插件。在前面Nginx配置文件有下面一行:
  setproxyupstreamnametestnginx80;
  指出域名mynginx。example。com的backend名为testnginx80。查看Ingress的backends(省略无关行)。〔rootmaster〕kubectlingressnginxbackendsningressnginx〔{name:testnginx80,service:{metadata:{creationTimestamp:null},spec:{ports:〔{name:http,protocol:TCP,port:80,targetPort:80}〕,selector:{app:nginx},clusterIP:10。1。133。186,clusterIPs:〔10。1。133。186〕,type:ClusterIP,sessionAffinity:None,ipFamilies:〔IPv4〕,ipFamilyPolicy:SingleStack,internalTrafficPolicy:Cluster},status:{loadBalancer:{}}},port:80,sslPassthrough:false,endpoints:〔{address:10。244。1。26,port:80}〕,sessionAffinityConfig:{name:,mode:,cookieSessionAffinity:{name:}},upstreamHashByConfig:{upstreamhashbysubsetsize:3},noServer:false,trafficShapingPolicy:{weight:0,weightTotal:0,header:,headerValue:,headerPattern:,cookie:}},。。。。。。〕
  从输出中可以看到后端其实就是名为nginx的Service对应的Endpoints,它的IP是10。244。1。26,〔rootmaster〕kbgetendpointsNAMEENDPOINTSAGEnginx10。244。1。26:8019h
  这里需要强调一点,NginxIngress并不将流量转发给nginxservice,而是直接转发到后端的Pods,转发策略也完全由IngressController来决定。这样不仅减少了一次DNAT,也能实现更丰富的负载均衡策略。Ingress资源中出现的Service对象只是为了选择后端的Endpoints。
  总结
  文章对NginxIngress做了介绍,Kubernetes中可以选择的Ingress有很多,读者可以根据需要选择。
  希望这篇文章能帮到正在努力的你,欢迎点赞、评论!

顶配版苹果16英寸MacBookPro售价高达42820元IT之家11月13日消息苹果公司刚刚推出了其16英寸MacBookPro,是苹果迄今最强大的笔记本电脑。你可以为16英寸MacBookPro配置最高8TB的存储空间和64GB的……巅峰测试火热进行!老牌IP手游魔域手游2带你玩转亚特大陆由原班人马网龙公司和金山世游倾力打造的《魔域手游2》在2023年1月5日正式开启了巅峰测试。听说《魔域手游2》不仅将端游《魔域》的经典玩法完美保留,还对游戏画质进行了全面升级,……当王后不容易!莱后大冬天光腿穿裙亮相太耀眼,配皮草斗篷太好看西班牙王后的衣品一直都很在线,很愿意去尝试各种风格的穿搭。当地时间1月26日,莱后在马德里亮相出席一场会议,大冬天就开始穿春装了,光腿穿裙真是很抗冻啊!一、莱蒂齐亚最新营……罗技FolioTouch上手价格只有妙控键盘一半,但优缺点都上个月,罗技(Logitech)推出了FolioTouch,这是一款售价160美元的键盘配件,可与2018年或2020年iPadPro一起使用。如今已经有人写出了它的上手体验,……外媒曝光新iPadPro渲染图外观变化不大,有望成为首款支持IT之家1月12日消息众所周知,苹果iPadPro2021将于今年晚些时候推出。外媒91mobiles获得了一份来自匿名但可靠的12。9英寸iPadPro的CAD渲染图,揭示了……tumblriOS版重新上架苹果AppStore国区IT之家12月20日消息在经过整顿后,轻博客应用tumblr已经重新回到苹果AppStore中,此前因为存在儿童色情内容被苹果强制下架。tumblr宣布从12月17日起删除所有……结石是吃出来的?医生若不想结石增长,5个饮食禁忌需注意导语:结节,是指因体内湿热浊邪蕴结不散,久经煎熬形成的砂石样病理产物,为继发性病因之一。结石可发生于机体的许多部位,以肝胆、肾、尿道和胃为常见。一般来讲,结石小者,易于排……云日历iOS安卓版1。20重磅更新全新图标新颜主题界面动效及云日历iOS秒开版1。20上架!新图标!新颜!昨天晚上7点也发布了同样新颜的云日历安卓版1。20、云日历电脑版1。21。有没有感觉软媒的Peter最近大力丸吃的过多过猛产……有哪种特质的人,我们一定要断绝来往?人这一生啊,遇见的人真的不计其数,认识的人都是形形色色。但是呢,真正可以深交的人,其实却根本就没有几个。物以类聚,人以群分,和什么样的人相处……备用手机选择哪款好?高手都知道的方法如今,智能手机已经是人们日常生活中必不可少的重要电子产品。在众多品牌推出的智能手机中,也有一些颜值高、性能稳定的手机品牌,同时也是极致的智能体验。本文将详细介绍几款高性价比手机……台积电5纳米工艺明年量产,苹果A14处理器率先尝鲜北京时间7月19日晚间消息,据美国科技网站AppleInsider报道,台积电首席财务官(CFO)何丽梅今日称,受5G智能手机需求的推动,台积电5纳米制造工艺预计于2020年上……日媒今年将有两款新iPhone配备后置浴霸式三摄新浪科技讯北京时间4月8日下午消息,据日本科技博客Macotakara报道,苹果今年将有两款iPhone手机配备三个后置主摄像头。根据媒体之前的报道,苹果今年仍将发布三款……
春节到底多少人出门旅游了?刚刚,数据公布!今年春节长假,全国各地的旅游市场都火了!人山人海的画面刷屏朋友圈今年春节到底有多少人出门旅游了?刚刚,文化和旅游部公布数据。文化和旅游部:春节假期……iPhone14Pro升级iOS16。1正式版这7大设置一定相信很多用户都已经升级到iOS16。1正式版,也有很多用户不断拿到自己的期待已久的心机iPhone14Pro或iPhone14ProMax,今天分享一些新机需要开启的设置,让手……深观察诺奖之于中国如何实现从跟跑到超越每年的诺奖张榜,都成了全球性的新闻事件,也吊足了国人的胃口。10月4日,瑞典皇家科学院宣布,将2022年诺贝尔物理学奖授予法国科学家阿兰阿斯佩、美国科学家约翰克劳泽和奥地利科学……打破纪录?联通靓号15666666666起拍价高达1366万【手机中国新闻】你永远不知道一些手机靓号能值多少钱,经过拍卖平台上的价格追逐之后,它们的身价可能达到你难以想象的地步。9月13日消息,阿里资产拍卖平台近日上线了一个156……维多利亚瀑布,天使也回眸作者介绍吕强前人民日报非洲中心分社记者、主持人、环球旅行家、摄影师、马蜂窝蜂首作者。中国传媒大学新闻与传播专业硕士。担任主持的节目曾获中国新闻奖特别奖。到访过全球5……36年后再看金龟子刘纯燕嫁给山东汉子王宁,到底有多幸运01hr1984年,刘纯燕18岁,彼时她还不是现在深受喜爱的主持人金龟子,而是北京广播学院播音系的一名女学生。这天新生入学,刘纯燕刚进班坐下,就被后面走来的高个子男人震住……为什么这款豪华智能手表无法击败苹果手表当我们决定制造智能手表时,我们的灵感来自从我们的历史中获取一些东西,并赋予它智能技术。我们正试图将制表的故事带入智能手表。对我们来说是真实的东西这就是万宝龙新技术类别总监……要是在纹身之前就明白这些道理,那么还会后悔纹身吗在纹身行业待了这么久每每看到身边有纹身的朋友本妹总要上去问一嘴纹身后不后悔?不出本妹所料本妹身边超过50的纹身朋友们都。。。后。。。悔。。。了……因为vivo,中国高端手机市场战火再燃智谷趋势(ID:zgtrend)王延鹤01hr富士康郑州工厂,被人们称为苹果城,30多万工人在这里组装,平均每分钟有350台手机下线,日产量超50万台。本轮疫情中,……人工智能他等待两千年,终于梦想成真人类制造了会爱的机器人,但人类会爱他们吗?《人工智能》在未来世界,温室效应导致冰川融化,海水淹没了许多城市,人类的生存环境急剧恶化。为减少能源和粮食消耗,许多国家开……昆凌临盆在即,曝第三胎竟是意外发现因便秘去买强效药查出身孕今年1月,周杰伦晒全家福公开昆凌怀孕喜讯,这是两人结婚7年以来第三胎,二人顺其自然,没有表现得太紧张,而周杰伦也放下工作陪伴妻子。据台媒报道,昆凌临盆在即,即将生下第三胎……Counterpoint最畅销的10款手机型号2022年4月手机作为日常较为常见的消费类电子产品,重要性不言而喻,甚至凌驾于电脑、手环、平板三者之上。近日,知名数据调研机构Counterpoint发布了关于2022年4月的全球销量最佳的……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网