Kubernetes–Servic
- 笔记
- 8天前
- 18热度
- 0评论
一、容器 / Pod 带来的核心问题
Pod 是临时性资源:Deployment 滚动更新、节点宕机、资源不足驱逐、扩容缩容都会销毁重建 Pod;重建后的 Pod IP、所在节点都会变化。
如果客户端直接写 Pod IP 访问:Pod 一重建,IP 失效,服务调用直接失败;多个 Pod 还要自己做负载均衡、健康检查,很难维护。
二、解决方案:K8s Service(核心)
Service是一组Pod的稳定四层访问入口,提供固定虚拟IP(ClusterIP) + 负载均衡,Service声明周期内ClusterIP永远不变。
底层原理:
Service靠selector标签匹配,去找后端Pod,自动生成维护Endpoints(存储真实PodIP + 端口),Kube-proxy监听Service和Endpoints,
通过iptables/ipvs规则进行负载均衡和流量转发到后端Pod。
三、Service访问类型
1.ClusterIP
默认,集群内访问,分配ClusterIP,集群外不能直接访问。
注意:ClusterIP是碎金分配的,如果想使用固定IP,可以自定义,但IP的范围必须符合CIDR。
使用场景:微服务之间内部调用。
|
|
2.Externalname
不代理流量,CNAME转发,把service映射到外部域名,无selector。
使用场景:集群内Pod直接访问外部数据库/第三方域名。
3.loadbalancer
在nodePort基础上,对接云厂商LB,对外暴露公网IP。
4.nodePort
在所有节点打开nodePort端口,ip + 端口,集群内外都能访问。
注意:所有节点上开放同一个静态端口(范围:30000~32767)
底层自动创建ClusterIP,nodePort流量会转发到ClusterIP,再到Pot
四、Ingress
Ingress:提供从集群外部到集群内服务的七层路由规则,不能转发流量。
Ingress Controller(控制器):真正干活的反向代理程序,读取Ingress规则,处理外部流量
ps:k8s默认不自带,需要手动安装,常用ingress-nginx
官网地址、可参考写yaml文件:https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/
获取控制器镜像及资源文件:https://github.com/kubernetes/ingress-nginx
思考题
Kube-proxy和Ingress Controller区别?
kube-proxy是集群内部的Service代理,处理四层:ip+端口,依赖CNI网络插件。
Ingresss Controller是集群入口网关,专门处理外部七层: url地址,域名,依赖kube-proxy。
