使用 Service 暴露你的应用

    • 了解 Kubernetes 中的 Service
    • 在 Kubernetes 集群外用 Service 暴露应用

    Kubernetes 中的服务(Service)是一种抽象概念,它定义了 Pod 的逻辑集和访问 Pod 的协议。Service 使从属 Pod 之间的松耦合成为可能。 和其他 Kubernetes 对象一样, Service 用 YAML (更推荐) 或者 JSON 来定义. Service 下的一组 Pod 通常由 LabelSelector (请参阅下面的说明为什么你可能想要一个 spec 中不包含的服务)来标记。

    尽管每个 Pod 都有一个唯一的 IP 地址,但是如果没有 Service ,这些 IP 不会暴露在集群外部。Service 允许你的应用程序接收流量。Service 也可以用在 ServiceSpec 标记type的方式暴露

    • ClusterIP (默认) - 在集群的内部 IP 上公开 Service 。这种类型使得 Service 只能从集群内访问。
    • NodePort - 使用 NAT 在集群中每个选定 Node 的相同端口上公开 Service 。使用<NodeIP>:<NodePort> 从集群外部访问 Service。是 ClusterIP 的超集。
    • LoadBalancer - 在当前云中创建一个外部负载均衡器(如果支持的话),并为 Service 分配一个固定的外部IP。是 NodePort 的超集。
    • ExternalName - 通过返回带有该名称的 CNAME 记录,使用任意名称(由 spec 中的指定)公开 Service。不使用代理。这种类型需要kube-dns的v1.7或更高版本。

    更多关于不同 Service 类型的信息可以在 教程。 也请参阅 连接应用程序和 Service

    • 跨多个 Pod 的负载均衡
    • 使用标签(Label)

    Kubernetes 的 Service 是一个抽象层,它定义了一组 Pod 的逻辑集,并为这些 Pod 支持外部流量暴露、负载平衡和服务发现。

    Service 通过一组 Pod 路由通信。Service 是一种抽象,它允许 Pod 死亡并在 Kubernetes 中复制,而不会影响应用程序。在依赖的 Pod (如应用程序中的前端和后端组件)之间进行发现和路由是由Kubernetes Service 处理的。

    • 指定用于开发,测试和生产的对象
    • 嵌入版本标签
    • 使用 Label 将对象进行分类

    你也可以在创建 Deployment 的同时用 --expose创建一个 Service 。

    使用 Service 暴露你的应用 - 图2

    标签(Label)可以在创建时或之后附加到对象上。他们可以随时被修改。现在使用 Service 发布我们的应用程序并添加一些 Label 。