从k8s 1.2
版本开始提供Ingress来实现对外暴露服务;目前k8s有三种暴露方式
- LoadBlancer Service
- NodePort Service
- Ingress
K8s-LBS
LBS是k8s与云平台深度结合的一个组件,当使用LBS暴露服务时,实际上是通过底层云平台申请创建一个负载均衡器来向外暴露服务。目前LBS支持的云平台有GCE、DigitalOcean、Aliyun、私有云Openstack等等,由于LBS与云平台深度结合,所以只能在这些平台上使用。
NodePort
k8s的端口分为:
- Port
service上暴露出来的端口,提供给集群(集群指整个容器集群)内部客户访问的端口。 - NodePort
node上暴露的端口,提供给集群外部客户访问的端口。 - TargetPort
endpoint上暴露的端口,也可以当作Pod上暴露的端口,无论从Port或NodePort上来的数据最终都会经过kube-proxy转发到Pod的TargetPort端口上。
k8s的IP分为:
- ClusterIP
service上虚拟ip地址,它由kube-proxy使用iptables规则重新定向到本地端口,再均衡到后端的Pod上。 - NodeIP
node节点的物理ip地址,它被kube-proxy使用iptables规则重定向到本地端口。 - ContainerIP/PodIP
K8s中以Pod为最小部署单位,一个Pod中共享一个网络资源(无论Pod中有几个容器)。每个Pod启动时,会自动创建一个镜像为gcr.io/google_containers/pause:0.8.0的容器,容器内部与外部的通信经由此容器代理,所以ContainerIP就是PodIP。
暴露方法及API
1 | apiVersion: v1 |
实现原理
ip地址及端口的暴露都是通过修改iptables规则来实现的。
1 | iptables -t nat -L -n |
Ingress
Todo…