在 Kubernetes 中使用 Service 资源

什么是 Service?

在 Kubernetes 中,Service 是一种资源对象,用于将 Pod 组织成一个逻辑单元,并为它们提供稳定的网络服务。

Service 通过一个虚拟 IP(Cluster IP)暴露一个或多个 Pod,这些 Pod 可以是同一个 Deployment 中的,也可以是不同的 Deployment。Service 提供了一种抽象层,使得用户无需关心 Pod 的具体 IP 地址,只需要通过 Service 的 Cluster IP 来访问它们。

此外,Service 还支持多种负载均衡策略,包括轮询、随机、IP hash 等,可以根据实际需求进行配置。

如何创建 Service?

在 Kubernetes 中,可以通过 YAML 文件或命令行工具 kubectl 来创建 Service。

YAML 文件方式

以下是一个简单的 Service YAML 文件示例:

----------- --
----- -------
---------
  ----- ----------
-----
  ---------
    ---- ------
  ------
    - ----- ----
      ----- --
      ----------- ----
  ----- ---------

其中,metadata 字段用于指定 Service 的元数据,如名称等;spec 字段用于指定 Service 的具体配置,包括选择器、端口映射和负载均衡方式等。

kubectl 命令方式

以下是通过 kubectl 命令创建 Service 的示例:

------- ------ ---------- ------------- ----------------- --------- ------------------ ----------------

其中,expose 命令用于创建 Service,deployment 参数指定要暴露的 Deployment,name 参数指定 Service 的名称,porttarget-port 参数分别指定 Service 端口和目标端口,type 参数指定 Service 的类型。

如何使用 Service?

使用 Service 可以通过 Cluster IP 或 NodePort 来访问 Pod。

Cluster IP 方式

如果 Service 的类型为 ClusterIP,可以通过 Service 的 Cluster IP 来访问 Pod。例如,如果 Service 名称为 my-service,端口为 80,可以使用以下方式进行访问:

---- --------------------

NodePort 方式

如果 Service 的类型为 NodePort,可以在每个 Node 上开放一个端口,通过 Node IP 和 NodePort 来访问 Pod。例如,如果 Service 名称为 my-service,端口为 80,可以使用以下方式进行访问:

---- ----------------------------

其中,node-ip 是 Node 的 IP 地址,node-port 是 Service 的 NodePort 端口。

如何配置负载均衡策略?

Service 支持多种负载均衡策略,可以通过 spec 字段中的 sessionAffinitytype 字段进行配置。

sessionAffinity

sessionAffinity 字段用于指定会话亲和性,即将同一客户端的请求路由到同一个 Pod 上。可选值有 None、ClientIP 和 ClientIPHash。

type

type 字段用于指定 Service 的类型,可选值有 ClusterIP、NodePort 和 LoadBalancer。

以下是一个配置负载均衡策略的 Service YAML 文件示例:

----------- --
----- -------
---------
  ----- ----------
-----
  ---------
    ---- ------
  ------
    - ----- ----
      ----- --
      ----------- ----
  ----- ------------
  ---------------- --------

总结

Service 是 Kubernetes 中重要的资源对象,可以将 Pod 组织成一个逻辑单元,并为它们提供稳定的网络服务。通过 YAML 文件或 kubectl 命令可以创建 Service,通过 Cluster IP 或 NodePort 可以访问 Pod。负载均衡策略可以通过 sessionAffinity 和 type 字段进行配置。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/662f0d73d3423812e4d042c6