从集群外部访问Kubernetes Service
2017-01-17
Kubernetes通过Service资源在Kubernetes集群内针对容器实现了服务发现和负载均衡。 如果服务要暴露到集群外部,从集群外部访问服务,需要借助一些集群外部提供的负载均衡策略。
先来看一下Kubernetes Service的类型:
Kubernetes Service类型 #
- ClusterIp:默认类型,自动分配集群内部可以访问的虚拟IP, ClusterIp
- NodePort:基于ClusterIp提供的功能,为Service在Kubernetes集群的每个Node上绑定一个端口,即NodePort,集群外部可基于任何一个NodeIP:NodePort的形式来访问Service。Service在每个Node的NodePort端口上都可用。
- LoadBalancer:基于NodePort提供的功能,借助云服务供应商提供的外部负载均衡器,将请求转发到各个NodeIp:NodePort。只有特定的云服务商和GCE(Google Container Engine)支持该方案。
Service提供的负载均衡功能,但在使用上有以下限制:
- 只提供4层负载均衡功能,而没有7层功能,但有时我们可能需要更多的匹配规则来转发请求,这点上4层负载均衡是不支持的。
- 使用NodePort类型的Service,需要在集群外部部署外部的负载均衡器
- 使用LoadBalancer类型的Service,Kubernetes必须运行在特定的云服务上。
Ingress #
Ingress支持将Service暴露到Kubernetes集群外边,同时可以自定义Service的访问策略。 Ingress能够把Service配置成外网能够访问的URL,也支持提供按域名访问的虚拟主机功能。例如,通过负载均衡器实现不同的二级域名到不同Service的访问。
Ingress需要一个Ingress Controller,通常是一个负载均衡器将Service暴露到集群外网。 Ingress examples这里是官方提供的示例。