专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

谈谈Service与Ingress

  你好,我是张磊。今天我和你分享的主题是:谈谈Service与Ingress。
  在上一篇文章中,我为你详细讲解了将Service暴露给外界的三种方法。其中有一个叫作LoadBalancer类型的Service,它会为你在CloudProvider(比如:GoogleCloud或者OpenStack)里创建一个与该Service对应的负载均衡服务。
  但是,相信你也应该能感受到,由于每个Service都要有一个负载均衡服务,所以这个做法实际上既浪费成本又高。作为用户,我其实更希望看到Kubernetes为我内置一个全局的负载均衡器。然后,通过我访问的URL,把请求转发给不同的后端Service。
  这种全局的、为了代理不同后端Service而设置的负载均衡服务,就是Kubernetes里的Ingress服务。
  所以,Ingress的功能其实很容易理解:所谓Ingress,就是Service的Service。
  举个例子,假如我现在有这样一个站点:https:cafe。example。com。其中,https:cafe。example。comcoffee,对应的是咖啡点餐系统。而,https:cafe。example。comtea,对应的则是茶水点餐系统。这两个系统,分别由名叫coffee和tea这样两个Deployment来提供服务。
  那么现在,〔strongbegin〕我如何能使用Kubernetes的Ingress来创建一个统一的负载均衡器,从而实现当用户访问不同的域名时,能够访问到不同的Deployment呢?〔strongend〕
  上述功能,在Kubernetes里就需要通过Ingress对象来描述,如下所示:
  apiVersion:extensionsv1beta1kind:Ingressmetadata:name:cafeingressspec:tls:hosts:cafe。example。comsecretName:cafesecretrules:host:cafe。example。comhttp:paths:path:teabackend:serviceName:teasvcservicePort:80path:coffeebackend:serviceName:coffeesvcservicePort:80
  在上面这个名叫cafeingress。yaml文件中,最值得我们关注的,是rules字段。在Kubernetes里,这个字段叫作:IngressRule。
  IngressRule的Key,就叫做:host。它必须是一个标准的域名格式(FullyQualifiedDomainName)的字符串,而不能是IP地址。
  备注:FullyQualifiedDomainName的具体格式,可以参考RFC3986标准。
  而host字段定义的值,就是这个Ingress的入口。这也就意味着,当用户访问cafe。example。com的时候,实际上访问到的是这个Ingress对象。这样,Kubernetes就能使用IngressRule来对你的请求进行下一步转发。
  而接下来IngressRule规则的定义,则依赖于path字段。你可以简单地理解为,这里的每一个path都对应一个后端Service。所以在我们的例子里,我定义了两个path,它们分别对应coffee和tea这两个Deployment的Service(即:coffeesvc和teasvc)。
  通过上面的讲解,不难看到,所谓Ingress对象,其实就是Kubernetes项目对反向代理的一种抽象。
  一个Ingress对象的主要内容,实际上就是一个反向代理服务(比如:Nginx)的配置文件的描述。而这个代理服务对应的转发规则,就是IngressRule。
  这就是为什么在每条IngressRule里,需要有一个host字段来作为这条IngressRule的入口,然后还需要有一系列path字段来声明具体的转发策略。这其实跟Nginx、HAproxy等项目的配置文件的写法是一致的。
  而有了Ingress这样一个统一的抽象,Kubernetes的用户就无需关心Ingress的具体细节了。
  在实际的使用中,你只需要从社区里选择一个具体的IngressController,把它部署在Kubernetes集群里即可。
  然后,这个IngressController会根据你定义的Ingress对象,提供对应的代理能力。目前,业界常用的各种反向代理项目,比如Nginx、HAProxy、Envoy、Traefik等,都已经为Kubernetes专门维护了对应的IngressController。
  接下来,〔strongbegin〕我就以最常用的NginxIngressController为例,在我们前面用kubeadm部署的Baremetal环境中,和你实践一下Ingress机制的使用过程。〔strongend〕
  部署NginxIngressController的方法非常简单,如下所示:
  kubectlapplyfhttps:raw。githubusercontent。comkubernetesingressnginxmasterdeploymandatory。yaml
  其中,在mandatory。yaml这个文件里,正是Nginx官方为你维护的IngressController的定义。我们来看一下它的内容:
  kind:ConfigMapapiVersion:v1metadata:name:nginxconfigurationnamespace:ingressnginxlabels:app。kubernetes。ioname:ingressnginxapp。kubernetes。iopartof:ingressnginxapiVersion:extensionsv1beta1kind:Deploymentmetadata:name:nginxingresscontrollernamespace:ingressnginxlabels:app。kubernetes。ioname:ingressnginxapp。kubernetes。iopartof:ingressnginxspec:replicas:1selector:matchLabels:app。kubernetes。ioname:ingressnginxapp。kubernetes。iopartof:ingressnginxtemplate:metadata:labels:app。kubernetes。ioname:ingressnginxapp。kubernetes。iopartof:ingressnginxannotations:。。。spec:serviceAccountName:nginxingressserviceaccountcontainers:name:nginxingresscontrollerimage:quay。iokubernetesingresscontrollernginxingresscontroller:0。20。0args:nginxingresscontrollerconfigmap(PODNAMESPACE)nginxconfigurationpublishservice(PODNAMESPACE)ingressnginxannotationsprefixnginx。ingress。kubernetes。iosecurityContext:capabilities:drop:ALLadd:NETBINDSERVICEwwwdata33runAsUser:33env:name:PODNAMEvalueFrom:fieldRef:fieldPath:metadata。namename:PODNAMESPACEname:httpvalueFrom:fieldRef:fieldPath:metadata。namespaceports:name:httpcontainerPort:80name:httpscontainerPort:443
  可以看到,在上述YAML文件中,我们定义了一个使用nginxingresscontroller镜像的Pod。需要注意的是,这个Pod的启动命令需要使用该Pod所在的Namespace作为参数。而这个信息,当然是通过DownwardAPI拿到的,即:Pod的env字段里的定义(env。valueFrom。fieldRef。fieldPath)。
  而这个Pod本身,就是一个监听Ingress对象以及它所代理的后端Service变化的控制器。
  当一个新的Ingress对象由用户创建后,nginxingresscontroller就会根据Ingress对象里定义的内容,生成一份对应的Nginx配置文件(etcnginxnginx。conf),并使用这个配置文件启动一个Nginx服务。
  而一旦Ingress对象被更新,nginxingresscontroller就会更新这个配置文件。需要注意的是,如果这里只是被代理的Service对象被更新,nginxingresscontroller所管理的Nginx服务是不需要重新加载(reload)的。这当然是因为nginxingresscontroller通过NginxLua方案实现了NginxUpstream的动态配置。
  此外,nginxingresscontroller还允许你通过Kubernetes的ConfigMap对象来对上述Nginx配置文件进行定制。这个ConfigMap的名字,需要以参数的方式传递给nginxingresscontroller。而你在这个ConfigMap里添加的字段,将会被合并到最后生成的Nginx配置文件当中。
  可以看到,一个NginxIngressController为你提供的服务,其实是一个可以根据Ingress对象和被代理后端Service的变化,来自动进行更新的Nginx负载均衡器。
  当然,为了让用户能够用到这个Nginx,我们就需要创建一个Service来把NginxIngressController管理的Nginx服务暴露出去,如下所示:
  kubectlapplyfhttps:raw。githubusercontent。comkubernetesingressnginxmasterdeployproviderbaremetalservicenodeport。yaml
  由于我们使用的是Baremetal环境,所以servicenodeport。yaml文件里的内容,就是一个NodePort类型的Service,如下所示:
  apiVersion:v1kind:Servicemetadata:name:ingressnginxnamespace:ingressnginxlabels:app。kubernetes。ioname:ingressnginxapp。kubernetes。iopartof:ingressnginxspec:type:NodePortports:name:httpport:80targetPort:80protocol:TCPname:httpsport:443targetPort:443protocol:TCPselector:app。kubernetes。ioname:ingressnginxapp。kubernetes。iopartof:ingressnginx
  可以看到,这个Service的唯一工作,就是将所有携带ingressnginx标签的Pod的80和433端口暴露出去。
  而如果你是公有云上的环境,你需要创建的就是LoadBalancer类型的Service了。
  上述操作完成后,你一定要记录下这个Service的访问入口,即:宿主机的地址和NodePort的端口,如下所示:
  kubectlgetsvcningressnginxNAMETYPECLUSTERIPEXTERNALIPPORT(S)AGEingressnginxNodePort10。105。72。9680:30044TCP,443:31453TCP3h
  为了后面方便使用,我会把上述访问入口设置为环境变量:
  ICIP10。168。0。2任意一台宿主机的地址ICHTTPSPORT31453NodePort端口
  在IngressController和它所需要的Service部署完成后,我们就可以使用它了。
  备注:这个咖啡厅Ingress的所有示例文件,都在这里。
  首先,我们要在集群里部署我们的应用Pod和它们对应的Service,如下所示:
  kubectlcreatefcafe。yaml
  然后,我们需要创建Ingress所需的SSL证书(tls。crt)和密钥(tls。key),这些信息都是通过Secret对象定义好的,如下所示:
  kubectlcreatefcafesecret。yaml
  这一步完成后,我们就可以创建在本篇文章一开始定义的Ingress对象了,如下所示:
  kubectlcreatefcafeingress。yaml
  这时候,我们就可以查看一下这个Ingress对象的信息,如下所示:
  kubectlgetingressNAMEHOSTSADDRESSPORTSAGEcafeingresscafe。example。com80,4432hkubectldescribeingresscafeingressName:cafeingressNamespace:defaultAddress:Defaultbackend:defaulthttpbackend:80()TLS:cafesecretterminatescafe。example。comRules:HostPathBackendscafe。example。comteateasvc:80()coffeecoffeesvc:80()Annotations:Events:TypeReasonAgeFromMessageNormalCREATE4mnginxingresscontrollerIngressdefaultcafeingress
  可以看到,这个Ingress对象最核心的部分,正是Rules字段。其中,我们定义的Host是cafe。example。com,它有两条转发规则(Path),分别转发给teasvc和coffeesvc。
  当然,在Ingress的YAML文件里,你还可以定义多个Host,比如restaurant。example。com、movie。example。com等等,来为更多的域名提供负载均衡服务。
  接下来,我们就可以通过访问这个Ingress的地址和端口,访问到我们前面部署的应用了,比如,当我们访问https:cafe。example。com:443coffee时,应该是coffee这个Deployment负责响应我的请求。我们可以来尝试一下:
  curlresolvecafe。example。com:ICHTTPSPORT:ICIPhttps:cafe。example。com:ICHTTPSPORTcoffeeinsecureServeraddress:10。244。1。56:80Servername:coffee7dbb5795f6vglbvDate:03Nov2018:03:55:320000URI:coffeeRequestID:e487e672673195c573147134167cf898
  我们可以看到,访问这个URL得到的返回信息是:Servername:coffee7dbb5795f6vglbv。这正是coffee这个Deployment的名字。
  而当我访问https:cafe。example。com:433tea的时候,则应该是tea这个Deployment负责响应我的请求(Servername:tea7d57856c44lwbnp),如下所示:
  curlresolvecafe。example。com:ICHTTPSPORT:ICIPhttps:cafe。example。com:ICHTTPSPORTteainsecureServeraddress:10。244。1。58:80Servername:tea7d57856c44lwbnpDate:03Nov2018:03:55:520000URI:teaRequestID:32191f7ea07cb6bb44a1f43b8299415c
  可以看到,NginxIngressController为我们创建的Nginx负载均衡器,已经成功地将请求转发给了对应的后端Service。
  以上,就是Kubernetes里Ingress的设计思想和使用方法了。
  不过,你可能会有一个疑问,如果我的请求没有匹配到任何一条IngressRule,那么会发生什么呢?
  首先,既然NginxIngressController是用Nginx实现的,那么它当然会为你返回一个Nginx的404页面。
  不过,IngressController也允许你通过Pod启动命令里的defaultbackendservice参数,设置一条默认规则,比如:defaultbackendservicenginxdefaultbackend。
  这样,任何匹配失败的请求,就都会被转发到这个名叫nginxdefaultbackend的Service。所以,你就可以通过部署一个专门的Pod,来为用户返回自定义的404页面了。
  总结
  在这篇文章里,我为你详细讲解了Ingress这个概念在Kubernetes里到底是怎么一回事儿。正如我在文章里所描述的,Ingress实际上就是Kubernetes对反向代理的抽象。
  目前,Ingress只能工作在七层,而Service只能工作在四层。所以当你想要在Kubernetes里为应用进行TLS配置等HTTP相关的操作时,都必须通过Ingress来进行。
  当然,正如同很多负载均衡项目可以同时提供七层和四层代理一样,将来Ingress的进化中,也会加入四层代理的能力。这样,一个比较完善的反向代理机制就比较成熟了。
  而Kubernetes提出Ingress概念的原因其实也非常容易理解,有了Ingress这个抽象,用户就可以根据自己的需求来自由选择IngressController。比如,如果你的应用对代理服务的中断非常敏感,那么你就应该考虑选择类似于Traefik这样支持热加载的IngressController实现。
  更重要的是,一旦你对社区里现有的Ingress方案感到不满意,或者你已经有了自己的负载均衡方案时,你只需要做很少的编程工作,就可以实现一个自己的IngressController。
  在实际的生产环境中,Ingress带来的灵活度和自由度,对于使用容器的用户来说,其实是非常有意义的。要知道,当年在CloudFoundry项目里,不知道有多少人为了给Gorouter组件配置一个TLS而伤透了脑筋。
  思考题
  如果我的需求是,当访问www。mysite。com和forums。mysite。com时,分别访问到不同的Service(比如:sitesvc和forumssvc)。那么,这个Ingress该如何定义呢?请你描述出YAML文件中的rules字段。

国内的医学类高校可以分为哪些派系?感谢邀请。大家会经常见到我国医学界高校的排名,但可能还不知道在高校医学界会分为几个帮派,这个划分可能也是业内人士根据学校的一些特点总结出来的,几乎包括了所有的医学顶尖高校,如果自己有唢呐教学简谱的课程吗?感谢邀请因为不知道您唢呐学到了哪一程度,我估计您应该知道一些基础的乐理知识吧,像节拍,节奏等,如果您没学过,而是直接开始学唢呐的话,建议您抽出一些时间来学一下乐理知识,了解了简谱的红薯到底早上吃好还是晚上吃好?答提这问题的人是城市新时代的人吧?在城里的人吃什么食物都是有讲究有时间性,对于红薯恐怕是很少人吃过。就算有红薯吃也要问到底是早上吃好还是晚吃才好。听妈妈说过关于吃红薯的故事,那是解铁皮石斛怎么吃,能长期吃吗?我是营养师小糖,很高兴与您一起讨论中药铁皮石斛的服用方法。铁皮石斛,又名黑节草云南铁皮。属微子目,兰科多年附生草本植物。主要分布于中国安徽浙江福建等地。其茎入药,属补益药中的补阴药62。45亿!伊利干了件大事,蒙牛该急了吗?好坏咱评论不了,等待发展。蒙牛把君乐宝卖了是真牛逼啊!没有急不急之说!各有各的发展战略!不得不说伊利这62亿花的太值了,作为曾经在伊利和澳优都工作过的人来说,对两家企业都很熟悉。伊婴儿三个月听力筛查不过要戴助听器吗?三个月的孩子不要带助听器,观察观察,一岁以后再说。小孩还没长足,我家有一个孩子还没有出百岁,医院查听力不好,他奶奶还是医院退休,这不打好长时间掉瓶,实际孩子长大点就好了,这年我外孙患癌以后,应该怎样生活?有没有患过癌或病人家属可以分享一下你们的经历?我85年,今年36岁,是19年10月中旬确诊鼻咽癌,分期T2N2M0,三期,根据数据统计,五年生存率在80左右(治疗后超过五年称治愈)!11月1日开始治疗,2020年年4月8完成巩家电维修行业已经是夕阳行业,为什么还有那么多师傅不肯放弃?说说我的看法我今年25我从09年读高中开始星期一到星期5读书周末学习家电维修。到现在断断续续也做了10年了!就目前行业来看确实竞争压力很大(很多到中年的人,装了几年空调,就出来自己手机的颜壁纸,推荐?风景美图花朵,喜欢都送给你手机壁纸各有所爱人物风景动物花草浸香的小丽花绚丽多彩百花争妍。菊科的小丽花又称小丽菊,植株低矮,花期时间长,是比较优良的品种。小丽花产地我国包头市,主要原女生大衣里面都穿什么样的打底衫呢?天气变寒冷,各色大衣外套就粉墨登场了,但可不要忽视了外套里面的内搭打底衫,穿好了就是你整身装扮的点睛之笔。小小一件内搭,是决定你整个造型的关键!说到打底衫这件事,想先说个反例之前的想移居苏州,苏州有哪些优点和缺点?先说苏州的优点。人文地理方面苏州生活工作交流说普通话,不像有些城市,外来人口根本无法生活,全都是本地话。日常业余生活比较丰富,苏州有大量的旅游景点,山水人文景观齐备,历史风景名胜也
黄埔三杰之说广为流传,殊不知,此说是80年代一位作家编创的来源旧闻新知在黄埔军校历史上,有一个著名的称呼,就是黄埔三杰,是指黄埔一期三位最厉害的学生蒋先云陈赓贺衷寒。熟悉近代史的人都对这个称呼耳熟能详,但鲜为人知的是,其实这个称呼是后人杜中秋这样吃团圆更健康明月四时有,月饼年年新。中秋将至,月饼季已到,各种月饼如何选怎样吃吃多少?如何掌握吃动平衡科学养生?本期健康周刊采访各路医学专家,教你如何在家人团圆赏月之际,科学吃月饼,健康度中秋重大历史题材剧为啥难拍好?樊文彬揭秘太行之脊成功的背后谁说重大历史题材剧只有老一辈人喜欢?近年来,随着民族自信文化自信的提升,年轻人也逐渐对红色文化产生了兴趣太行之脊觉醒年代功勋等影视剧的热播,让我们意识到只要剧拍得好,年轻人同样追得陕西西安出现30多头凶兽,站在崖壁间,豹子见状都得礼让七分秦岭地区植被茂密,野生动物数量众多,是我国乃至世界上野生动物资源最为丰富的地区之一,其中更有金丝猴大熊猫朱鹮等珍贵品种。大家都知道,秦岭有四宝,分别是大熊猫羚牛金丝猴朱鹮,由于保护曾国藩真正的故居叫白玉堂,那才是他出生长大成人的地方不论是旅行社还是导航导游,你要去曾国藩故居,自然都会把你导到双峰荷叶镇富厚堂。富厚堂建筑宏伟壮观!但这是曾氏兄弟火烧南京后,掠夺了太平天国的金银珠宝运回湘乡后,曾国荃帮其兄建造了富问天实验舱植物生长实验新进展太空水稻一月长了30厘米北京日报客户端实习记者何蕊8月29日,中国科学院发布中国空间站问天实验舱植物生长实验进展由神舟十四号航天员亲手种植在问天实验舱的拟南芥种子和水稻种子已满月,目前种子已发芽,高秆水稻有律宗第一名山支撑的宝华山隆昌寺(下)(续上文)出了斋堂沿左侧拾级,走过一条向上的坡道,坡顶上中间一座是铜佛殿。铜殿全名观世音菩萨金殿,殿高7米,阔4。5米,深4米。因最初用的铜件梁栋栌桷窗瓦屏楹均以铜铸,故名铜殿。铜不知道卤味怎么做的看过来,只需要一个电饭煲,好吃到骨头都不剩外面卖的卤味是不是特别好吃时不时的都要去买上一次,其实卤味并没有大家想象的那么难做,只要有一些食材和一个电饭煲,你也可以做出来十分好吃,脱骨的美味卤味,方法很简单。做的1电饭煲里面官宣!火箭退役海耶斯球衣,圣地亚哥战袍回归,榜眼4号亮相北京时间9月1日,火箭老板费尔蒂塔今日宣布,球队将于今年11月在丰田中心退役球队名宿埃尔文海耶斯的44号球衣。相信各位看到海耶斯的名字,肯定以为是姚明时期的板爷海耶斯,这是火箭历史地震中幼儿园老师本能反应1分40秒安全疏散165个孩子视频加载中9月5日12时52分,四川省甘孜州泸定县发生6。8级地震,四川重庆等多地震感明显。地震来临时,多所幼儿园老师们第一时间疏散孩子的视频在网络热传。6日,上游新闻(报料邮箱b京华烟云原著即使出现婚外情,荪亚依旧是个宠妻男文若水翻看林语堂先生的京华烟云,顿觉木兰这半生,人间值得!88版京华烟云,赵雅芝饰演姚木兰虽然10岁时逃亡路上被拐卖,36岁遭遇长女被枪杀,不惑之年丈夫又玩了个婚外情,但在战乱频繁
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网