服务概述
什么是服务
服务是将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。每一个服务后面都有很多对应的容器来提供支持,对外表现为一个单一访问接口。借助服务,应用可以方便的实现服务发现与负载均衡,并实现应用的零宕机升级。
服务有一个固定 IP 地址(在创建 QEK 集群时有一个 “Service 网段” 的设置,这个网段专门用于给服务分配 IP 地址),服务将访问它的流量转发给 Pod,具体转发给哪些 Pod 通过 Label 来选择,而且服务可以给这些 Pod 做负载均衡。
服务类型
Kubernetes 允许在您创建服务时,指定你所需要的服务类型。类型的取值及行为如下表说明。
服务类型 | 说明 |
---|---|
ClusterIP | 通过集群的内部 IP 暴露服务,即服务只能够在集群内部访问。 这也是默认的服务类型。 当您的服务只需要在集群内部被访问时,请使用该类型。 |
NodePort | 在每个节点的 IP 上开放一个静态端口,通过静态端口对外暴露服务。NodePort 服务会路由到自动创建的 ClusterIP 服务。通过请求 <节点 IP>:<节点端口> ,你可以从集群的外部访问一个 NodePort 服务。注意 除了测试以及非生产环境以外,不推荐在生产环境中直接通过集群节点对外甚至公网提供服务。从安全上考虑,使用该类型会直接暴露集群节点,容易受到攻击。 |
LoadBalancer | 使用云提供商的负载均衡器向外部暴露服务。 外部负载均衡器可以将流量路由到自动创建的 NodePort 服务和 ClusterIP 服务上。LoadBalancer 服务一般为需要暴露到公网的服务。 |
externalName | 通过返回 CNAME 和对应值,可以将服务映射到 externalName 字段的内容(例如,foo.bar.example.com )。 无需创建任何类型代理。说明 需要使用 kube-dns 1.7 及以上版本或者 CoreDNS 0.0.8 及以上版本才能使用 ExternalName 类型。 |
Headless | Headless 服务即不需要 Cluster IP 的服务,可以在创建服务的时候指定 spec.clusterIP=None 。Headless 服务包括两种类型:
|