k8s的service及相关知识

k8s的service网络

 

K8s内部网络整体图

 

 


Service是什么:

  1. k8s定义服务是一种将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。
  2. 这些Pod拥有相同的selector==》label
  3. k8s为Pods 提供自己的 IP 地址,并为一组 Pod 提供相同的 DNS 名, 并且可以在它们之间进行负载均衡。
  4. 而且使用 k8s,你无需修改应用程序,即可使用不熟悉的服务发现机制,黑盒式使用,简单易上手。


Service为什么出现的?缘由

  1. Pod是临时资源,随时可能被创建、删除等。参考Depolyment
  2. 每个Pod有自己的IP
  3. Pod创建、删除后,完整的服务应该都能正常工作,就需要一个前后端隔离的“代理层”,能够统筹后端的所有Pod
  4. 前端不关心现在有哪些Pod,前端只需要关注一个点==》service即可

那k8s为啥不用DNS轮询机制,而要自己实现一套流量转发机制呢?

DNS有缓存

注意:service与nignx不同

 

那k8s是怎么做的呢

插入一个知识点:k8s中的IP
Node IP:Node节点的IP地址,即物理网卡的IP地址

Pod IP:Pod的IP地址,即docker容器的IP地址,此为虚拟IP地址。

Cluster IP:Service的IP地址,此为虚拟IP地址。


每个Node上运行kube-proxy,kube-proxy管理service的入口。

kube-proxyt通过监听api种service的变化,可以使用endpiont来记录所有pod的ip

service对外暴露一个V IP,也成为Cluster IP,集群内通过访问这个Cluster IP:Port就能访问到集群内对应的serivce下的Pod。

 

 

kube-proxy的代理示意图(user space)

 

 

 

 

 

 

 附:

获取Node IP
1.kubectl get nodes
2.kubectl describe node nodeName
3.显示出来的InternalIP就是NodeIP

获取Pode IP
1.kubectl get pods
2.kubectl describe pod podName

获取Cluster IP

 kubectl get svc

 参考:https://kubernetes.io/docs/concepts/services-networking/service

posted @ 2022-04-19 16:29  JustDotNet  阅读(212)  评论(0编辑  收藏  举报