# 什么是Kubernetes服务？

> 来源：梦飞idc云平台 | 原文：https://www.mfisp.com/7012.html | 发布：2022-05-24 | 更新：2022-05-24 | 分类：IDC云库

Kubernetes服务是集群中部署的一组 pod 的逻辑抽象（它们都执行相同的功能）。由于 Pod 是短暂的，因此服务可以为一组提供特定功能（Web 服务、图像处理等）的 Pod 分配一个名称和唯一的 IP 地址（clusterIP）。

Kubernetes服务是集群中部署的一组 pod 的逻辑抽象（它们都执行相同的功能）。由于 Pod 是短暂的，因此服务可以为一组提供特定功能（Web 服务、图像处理等）的 Pod 分配一个名称和唯一的 IP 地址（clusterIP）。只要服务正在运行该 IP 地址，它就不会改变。服务还为其访问定义策略。

 

![什么是Kubernetes服务？](https://www.mfisp.com/wp-content/uploads/2021/10/6ab6b9f54c17f1_1_post.webp)

 

**在 Kubernetes 中，服务和部署有什么区别？**

 

在Kubernetes中，部署是一种使用容器化应用程序启动 pod 并确保集群上始终运行必要数量的副本的方法。另一方面，服务负责向这些 pod 公开接口，这使得可以从集群内部或外部进程与服务之间进行网络访问。

 

**Kubernetes 服务的组件有哪些？**

 

Kubernetes 服务将一组 pod 连接到一个抽象的服务名称和 IP 地址。服务提供 pod 之间的发现和路由。例如，服务将应用程序前端连接到其后端，每个后端都在集群中的单独部署中运行。服务使用标签和选择器将 pod 与其他应用程序匹配。Kubernetes 服务的核心属性是：

 
 
- 定位 pod 的标签选择器 
- clusterIP IP 地址和分配的端口号 
- 端口定义 
- 传入端口到 targetPort 的可选映射 

 

可以在没有 pod 选择器的情况下定义服务。例如，将服务指向不同命名空间或集群中的另一个服务。

 

**Kubernetes 服务有哪些类型？**

 
 
- 集群IP。公开只能从集群内部访问的服务。 
- 节点端口。通过每个节点 IP 上的静态端口公开服务。 
- 负载均衡器。通过云提供商的负载均衡器公开服务。 
- 外部名称。通过返回 CNAME 记录的值将服务映射到预定义的 externalName 字段。 

 

**什么是 Kubernetes ClusterIP 服务？**

 

ClusterIP 是默认的服务类型，用于在集群内部的 IP 地址上公开服务。仅允许从集群内部访问。

 

![什么是Kubernetes服务？](https://www.mfisp.com/wp-content/uploads/2021/10/672de867bd1697_1_post.webp)

 

**什么是 Kubernetes 无头服务？**

 

不需要负载平衡且仅公开单个 IP 的服务可以通过将 clusterIP 指定为“none”来创建“无头”服务。可以使用选择器定义无头服务，在这种情况下，端点记录在 API 中创建，修改 DNS 以返回指向公开服务的 pod 的地址。没有选择器的无头服务不会创建端点记录。DNS 系统为与服务同名的端点配置 CNAME 记录或记录。

 

**什么是 Kubernetes NodePort 服务？**

 

NodePorts 是每个集群节点上的开放端口。Kubernetes 会将进入 NodePort 的流量路由到服务，即使该服务没有在该节点上运行。NodePort 旨在作为其他更高级别的入口方法（例如负载平衡器）的基础，并且在开发中很有用。

 

**什么是 Kubernetes ExternalName 服务？**

 

ExternalName 服务与其他 Kubernetes 服务类似；但是，它不是通过 clusterIP 地址访问，而是返回一个 CNAME 记录，其值在创建服务时在 externalName: 参数中定义。

 

**什么是 Kubernetes 负载均衡器服务？**

 

对于在 AWS 或 Azure 等公共云提供商上运行的集群，创建负载 LoadBalancer 服务提供了与 clusterIP 服务等效的功能，将其扩展到特定于云提供商的外部负载均衡器。Kubernetes 将自动创建负载均衡器，在需要时提供防火墙规则，并使用云提供商分配的外部 IP 地址填充服务。

 

![什么是Kubernetes服务？](https://www.mfisp.com/wp-content/uploads/2021/10/626fbcea470f91_1_post.webp)

 

**Kubernetes 服务如何工作？**

 

服务只是使用标签指向 pod。由于服务不是特定于节点的，因此服务可以指向一个 pod，而不管它在任何给定时刻在集群中的哪个位置运行。通过公开服务 IP 地址和 DNS 服务名称，只要服务存在，就可以通过任一方法访问应用程序。

 

**您如何定义 Kubernetes 服务？**

 

服务在 YAML 中定义，所有 Kubernetes 对象也是如此。假设您部署了运行后端服务的 pod，以处理来自 Web 前端的数据。要在部署“deployment-backend”上公开名为“service-backend”的服务，您可以使用：

 

api版本： v1

 

种类：服务

 

元数据：

 

名称：服务后端

 

规格：

 

端口：

 

- 端口： 4000

 

协议： TCP

 

目标端口： 333

 

选择器：

 

运行：部署后端

 

类型：集群IP

 

将创建服务“service-backend”，集群中的任何 pod 都可以通过 http://service-backend:4000 在其端口 333 上访问它，或者使用端口 4000 在集群的 IP 地址上访问它。

 

Kubernetes 服务也可以使用“kubectl expose”命令创建，该命令不需要 YAML 文件。可以使用以下命令创建相同的服务：

 

kubectl 暴露部署部署后端--端口=333--目标端口=4000--名称=服务后端

 

**如何访问 Kubernetes 服务？**

 

有两种方法可以发现 Kubernetes 服务：

 

DNS（最常见）： DNS 方法是发现服务的推荐方法。要使用此方法，必须首先在集群上安装 DNS 服务器。DNS 服务器监控 Kubernetes API，当一个新服务被创建时，它的名字就可以用于请求应用程序的轻松解析。

 

ENV 变量：此方法依赖于 kubelet 为运行 pod 的每个节点的每个活动服务添加环境变量。

---
本页由 梦飞idc云平台（https://www.mfisp.com）提供。站点导航见 https://www.mfisp.com/llms.txt
