最近更新时间:2022-02-11
用户在Kubernetes中可以部署各种容器,其中一部分是通过HTTP、HTTPS协议对外提供七层网络服务,另一部分是通过TCP、UDP协议提供四层网络服务。而Kubernetes定义的Service资源就是用来管理集群中四层网络的服务访问。
Kubernetes的ServiceTypes允许指定Service类型,默认为ClusterIP类型。ServiceTypes的可取值以及行为描述如下:
ClusterIP:通过集群的内部IP暴露服务。当您的服务只需要在集群内部被访问时,请使用该类型。该类型为默认的ServiceType。
NodePort:通过每个集群节点上的IP和静态端口(NodePort)暴露服务。NodePort服务会路由到ClusterIP服务,该ClusterIP服务会自动创建。通过请求<NodeIP>:<NodePort>,可从集群的外部访问该NodePort服务。除了测试以及非生产环境以外,不推荐在生产环境中直接通过集群节点对外甚至公网提供服务。从安全上考虑,使用该类型会直接暴露集群节点,容易受到攻击。通常认为集群节点是动态的、可伸缩的,使用该类型使得对外提供服务的地址和集群节点产生了耦合。
Load Balancer:通过负载均衡向公网或内网暴露服务。负载均衡可以路由到NodePort服务,或直接转发到处于VPC-CNI网络条件下的容器中。
创建完成后的服务在集群外可通过负载均衡IP地址+服务端口方式访问服务,集群内可通过服务名+服务端口访问服务。在访问时从负载均衡过来的流量会先访问到节点,然后通过Service转发到Pod。