前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubernetes 通讯浅谈

kubernetes 通讯浅谈

作者头像
张琳兮
发布2019-10-15 15:08:36
1.3K0
发布2019-10-15 15:08:36
举报
文章被收录于专栏:首富手记首富手记

kubernetes 通讯浅谈

我们在日常工作中,能遇见的情况只有下面三种,k8s集群内部之间的相互连接,k8s集群内部访问k8s集群外部的服务,还有就是k8s集群外部服务访问k8s集群内部的访问。下面我们来讲解下他们都是如何实现的,我们将使用分步的方式来讲解

kubernetes集群内部的通讯

当k8s里面只有两个POD之间的通信是最为简单的

image.png
image.png

上图所示是我们Pod B客户端去链接请求Pod A服务端,这个时候我们只需要把Pod A的地址告诉Pod B即可,这个时候Pod A扛不住请求了,我们需要在扩展一个Pod A

image.png
image.png

那我门是不是就想要办法在Pod A服务端前面放个Nginx或者什么的来做负载,只有这样Pod B才能按照以前的地址去请求服务啊,所以我们这个时候在Pod A上面添加上一个service服务

image.png
image.png

svc资源通过matchLables字段选择打有对应标签的Pod,这个时候Pod B在来请求服务的时候就直接去访问SVC A,我们告诉Pod B SVC A所对应的IP地址是什么,SVC A会自动负载到后端的POD A上,需要注意的是:当这个时候如果 A服务还是扛不住压力,那我们就只需要多启动几个Pod A就行了,启动的新的Pod之后,svc还是会根据matchLables把它自动添加到负载里面去 我们k8s集群里面不可能只有两种服务啊,肯定有很多服务,但我们不可能每个都手工去配置吧,所以这个时候就引入了CoreDNS的概念,我们用CoreDNS来维护svc 和clusterIP的关系

image.png
image.png

其实这个时候 k8s集群内部的通讯就大致讲清楚了,但是这个里面有个及其特殊的svc:headless svc,这个svc当别的客户端来请求他的时候,他不会去负载的向下面pod去做请求,而是把下面POD的所有IP返回给客户端,由客户端自己来决定链接那个POD。

k8s集群内部请求集群外部的服务

如果是单个服务,我们可以选择直接在内部直接连接外部的服务,但是如果外部服务是个集群的话,那如果我们还这样做就需要在外部集群前面做个负载,

image.png
image.png

但是这样如果有很多个集群我们就要创建很多个nginx的4层负载,太麻烦了,我们可以把负载放到k8s集群里面,我们采用k8s的svc+endpoints来实现外部集群的负载均衡

image.png
image.png

这个时候svcendpoint是通过名字来进行绑定的,这样我们就实现了集群内部和集群外部通讯

k8s集群外部和k8s集群内部通信

在实际工作中,除了k8s集群内部通讯,我认为就是这种通讯方式使用的比较多,因为我们在k8s上跑的集群不就是为了让客户来访问的吗?下面我们将下三种实现方式

nodeport

nodeport是我们在node上面所端口绑定,所以node上都会开放此pord端口,我们任意请求其中一个node端口,即使这个pod没有落在这个node上也行,当请求到node port的时候他会自动转发到对应的Podip上来实现访问

image.png
image.png

hostport

必须pod落在那个node上,那个node才会开放对应的端口

ingress

ingress是我们使用最普遍的暴漏k8s集群内部服务让外部来访问的方式,ingress是一类资源的统称,我们现在一般都适用ingress-nginx,关于ingress 请参考https://www.zhangshoufu.com/articles/2019/07/19/1563529715618.html, 这里不在细说

视频讲解:https://www.bilibili.com/video/av71139472

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • kubernetes 通讯浅谈
    • kubernetes集群内部的通讯
      • k8s集群内部请求集群外部的服务
        • k8s集群外部和k8s集群内部通信
          • nodeport
          • hostport
          • ingress
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档