k8s Service 详解

做一个服务发现的功能
在这里插入图片描述
通过标签选择匹配pod,每一个svc可以理解为一个微服务

deployment 创建了三个pod,每个pod 里都有三个标签,接着又定义了一个 svc(frontend service),他的标签是 app = webapp role = frontend。匹配成功后,pod的信息会被写入到svc中,当我们访问到svc 时会随机访问到一个pod,轮巡算法(RR)。当后期有新的pod创建时,该pod的信息也会同样被更新到 svc 中

限制

在这里插入图片描述
只能通过ip和端口来实现负载均衡,无法通过计算机 域名来负载均衡(默认无法实现,可以通过其他方式实现)

SVC 类型

在这里插入图片描述

cluster IP

svc创建成功后会创建一个集群内部ip(cluster ip),该标签匹配的pod 可以被集群内部其他pod 访问,直接通过cluster ip 访问到。
在这里插入图片描述

nodeport

在每一个node物理机上开启端口,可以供外部访问
在这里插入图片描述
Nginx,负载均衡器

loadBalance

不采用nginx 作为 负载均衡器,而用的是云供应商做负载均衡
在这里插入图片描述

ExternalName

在集群内部记录访问外部的 ip 和端口,后续如果被访问的服务更新,只需修改本集群内部记录的信息即可
在这里插入图片描述

svc 架构

需要以下组件进行配合
在这里插入图片描述

apiserver 监听服务和端点,通过 kube-proxy 监控,kube-proxy 负责监控到对应匹配的pod的信息,并写入到 iptables 的规则中,当客户端想要访问我们的svc的时候,其实访问的就是iptables规则。然后导向到后端的 pod

需要注意的是:

  • 客户端访问服务是通过 访问 iptables 规则
  • iptables 规则是通过kube-proxy 写入的
  • apiserver 通过监控 kube-proxy 进行服务和端点信息的发现(监控)
  • kube-proxy 通过 pod的标签去判断 端点信息是否写入到 apiserver (svc)对应的endpoint

实验

cluster ip

在这里插入图片描述
先创建 deployment pod

模板
在这里插入图片描述

填写模板信息
在这里插入图片描述
创建pod,deployment 是声明式的,所以应 apply
在这里插入图片描述
查看是否创建成功
在这里插入图片描述

pod创建后会有很多随机的ip地址,我们当然可以直接访问这些ip地址,但是ip地址很多,而且如果有的pod 重建后ip地址会发生变化,造成我们访问起来很麻烦,所以我们需要建立一个svc

创建 SVC

模板信息
在这里插入图片描述
vim 填写模板信息
apply 创建
在这里插入图片描述
查看svc是否创建成功
在这里插入图片描述

删除资源的时候也可以通过 直接删除 文件来进行删除
在这里插入图片描述
故一些重要的资源要保存在特性的目录下

有时不需要负载均衡时,不需要 svc ip ,这种情况下 可以通过指定 cluster ip 的值为 none 来创建的 Headless Service,也叫无头服务

这种的 svc 不会分配cluster ip , kube-proxy 不会处理他们,平台也不会为他们做负载均衡和路由

无头服务也是cluster ip,只是比较特殊

NodePort

在这里插入图片描述
模板
在这里插入图片描述

一组pod 可以对应多个svc,只要标签一致

查询流程
在这里插入图片描述

LoadBalance

在这里插入图片描述

和nodeport类似,只是支持通过 云供应商做节点导流。客户访问到云供应商时,云供应商会根据负载,导流到对应的nodeport上
收费的

ExternalName

在这里插入图片描述
模板
在这里插入图片描述
创建
在这里插入图片描述
查看
在这里插入图片描述

在这里插入图片描述

DNS内部的CNAME(别名记录),iptables 和 ipvs 都不需要进行处理
主要是想将外部的应用转换至集群内部

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐