k8s Service 详解
k8sService 详解做一个服务发现的功能通过标签选择匹配pod,每一个svc可以理解为一个微服务deployment 创建了三个pod,每个pod 里都有三个标签,接着又定义了一个 svc(frontend service),他的标签是 app = webapprole = frontend。匹配成功后,pod的信息会被写入到svc中,当我们访问到svc 时会随机访问到一个pod,轮巡算法(
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 都不需要进行处理
主要是想将外部的应用转换至集群内部
更多推荐
所有评论(0)