kubernetes service类型ClusterIp、NodePort、LoadBalance、ExternalName
一、关系图
二、路由图
三、service类型
1. ClusterIp
默认类型,每个Node分配一个集群内部的Ip,这是私有ip ,内部可以互相访问,外部无法访问集群内部。
clusterIP主要在每个node节点使用iptables,将发向clusterIP对应端口的数据,转发到kube-proxy中。
然后kube-proxy自己内部实现有负载均衡的方法,并可以查询到这个service下对应pod的地址和端口,进而把数据转发给对应的pod的地址和端口。
2. NodePort
基于ClusterIp,另外在每个Node上开放一个端口,将service的port映射到每个node的一个指定内部port上,映射的每个node的内部port都一样。将向该端口的流量导入到kube-proxy,然后由kube-proxy进一步导给对应的pod。可以从所有的位置访问这个地址。
3. LoadBalance
基于NodePort,云服务商在外部创建了一个负载均衡层,会向cloud provider申请映射到service本身的负载均衡,将流量导入到对应Port。要收费的。
LoadBalancer跟nodePort其实是同一种方式。
区别在于LoadBalancer比nodePort多了一步,就是可以调用cloud provider去创建LB来向节点导流。
4. ExternalName
将外部地址经过集群内部的再一次封装(实际上就是集群DNS服务器将CNAME解析到了外部地址上),实现了集群内部访问即可。要求kube-dns的版本为1.7或以上.
例如你们公司的镜像仓库,最开始是用ip访问,等到后面域名下来了再使用域名访问。你不可能去修改每处的引用。但是可以创建一个ExternalName,首先指向到ip,等后面再指向到域名。所有需要访问仓库的地方,统一访问这个服务即可
https://www.cnblogs.com/zhoushiya/p/12259886.html
https://blog.****.net/m0_37556444/article/details/84991535