教程

Kubernetes v1.12 版本的文档已不再维护。您现在看到的版本来自于一份静态的快照。如需查阅最新文档,请点击 最新版本。

Edit This Page

使用服务发布您的应用程序

目标

  • 了解 Kubernetes 中的服务
  • 了解标签和标签选择器对象如何与服务相关联
  • 通过 Service 在 Kubernetes 集群外发布应用程序

Kubernetes 服务概述

Kubernetes Pods 终有一死。 Pods 实际上有一个 生命周期。 当工作节点死机时,节点上运行的Pod也将丢失。 一个 ReplicationController 可能会通过创建新的Pod以动态地将集群恢复到所需的状态,以保持您的应用程序运行。 比如说,假如一个图像处理软件有三个副本。这些副本是可替代的,前端系统不应关心后端副本,即使Pod丢失并重建也不会更改。 也就是说,Kubernetes 集群中的每个 Pod 都有一个唯一的IP地址,即使在同一个节点上的 Pods 也是如此,所以此时就需要一种自动调整更改 Pod 的方法,以便您的应用程序继续运行。

服务:Kubernetes 中的服务是一个抽象对象,它定义了一组逻辑的 Pods 和一个访问它们的策略。 服务让互相依赖的 Pod 之间的耦合松动。 服务像所有 Kubernetes 对象一样,由 YAML (首选) 或 JSON 定义。 针对服务的一组 Pod 通常由 LabelSelector 确定(参见下文,为什么您可能不希望将 选择器 包含在规范中)。

虽然每个 Pod 都有一个唯一的 IP 地址,但是这些 IP 不会在没有服务的情况下公开在群集之外。服务允许您的应用程序接收流量。 可以通过在 ServiceSpec 中指定类型 以不同方式显示服务:

  • ClusterIP(默认) - 在集群中的内部IP上公开服务。此类型使服务只能从集群中访问。
  • NodePort —— 使用NAT在群集中每个选定的节点的同一端口上显示该服务。使用 :可以从群集外部访问服务。建立 ClusterIP 的超集。
  • LoadBalancer —— 在当前云中创建外部负载平衡器(如果支持),并为服务分配固定的外部IP。建立 NodePort 的超集。
  • ExternalName —— 使用任意名称显示该服务(由规范中的externalName 指定),本过程通过使用该名称返回 CNAME 记录达成。无须使用代理。这种类型需要 v1.7 或更高版本的 kube-dns.

有关不同类型服务的详细信息,请参见 使用源IP 教程。另请参阅 使用服务连接应用程序.

另外,请注意,服务中有一些使用案例涉及在规范中不定义选择器 。不使用 选择器 创建的服务也不会创建相应的端点对象。 这允许用户手动将服务映射到特定端点。没有选择器还有可能是因为您严格地使用了 type: ExternalName.

摘要

  • 对外部流量曝光 Pod
  • 跨多个 Pods 进行流量负载均衡
  • 使用标签

Kubernetes 服务是一个抽象层,它定义了一组逻辑的Pods,并为这些Pods启用了外部流量曝光、负载平衡和服务发现。


服务和标签

A服务可以跨一组 Pod 路由流量。服务是允许 Pod 在 Kubernetes 中死亡和复制而不影响应用程序的抽象层。相关 Pod 之间的发现和路由(如应用程序中的前端和后端组件)是由 Kubernetes Services 处理的。

服务使用 标签和选择器,匹配一组 Pod,成为分组原语,此原语允许在 Kubernetes 中的对象进行逻辑运算。 标签是一对附加到对象的键/值对,可以以多种方式使用,方式如下:

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

您可以在使用
--expose 在 kubectl 中创建部署的同时创建服务。



标签可以在创建时或之后附加到对象后,并支持随时修改。让我们现在开始使用服务公开我们的应用程序并应用一些标签吧。


反馈