Kubernetes 中使用 Service 实现应用访问管理

阅读时长 5 分钟读完

在 Kubernetes 集群中,Service 是一种可以将 Pod 分组并提供稳定访问 IP 和 DNS 名称的抽象机制。通过 Service,我们可以将应用暴露给集群内或外的其他服务或用户。

Service 的类型

Kubernetes 中的 Service 有以下几种类型:

ClusterIP

ClusterIP 是最常用的 Service 类型,它将 Pod 分组并暴露一个稳定的 IP 地址。这个 IP 地址只在集群内可见,不能从集群外部访问。

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

上面的 YAML 文件定义了一个名为 my-service 的 Service,它将 Pod 中标签为 app=my-app 的应用分组并暴露一个名为 http 的端口。这个端口会将请求转发到 Pod 中的 8080 端口。

NodePort

NodePort 类型的 Service 会将 Pod 分组并暴露一个稳定的 IP 地址和端口号。这个端口号是在集群节点上随机分配的,可以从集群外部访问。

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

上面的 YAML 文件定义了一个名为 my-service 的 NodePort 类型的 Service,它将 Pod 中标签为 app=my-app 的应用分组并暴露一个名为 http 的端口。这个端口会将请求转发到 Pod 中的 8080 端口,并在所有节点上分配一个随机端口号。

LoadBalancer

LoadBalancer 类型的 Service 会将 Pod 分组并暴露一个稳定的 IP 地址和端口号,并在集群外部创建一个负载均衡器,将请求分配给这些 IP 地址和端口号。

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

上面的 YAML 文件定义了一个名为 my-service 的 LoadBalancer 类型的 Service,它将 Pod 中标签为 app=my-app 的应用分组并暴露一个名为 http 的端口。这个端口会将请求转发到 Pod 中的 8080 端口,并在集群外部创建一个负载均衡器,将请求分配给这些 IP 地址和端口号。

ExternalName

ExternalName 类型的 Service 用于将集群内部的服务解析为外部 DNS 名称。

上面的 YAML 文件定义了一个名为 my-service 的 ExternalName 类型的 Service,它将集群内部的服务解析为外部 DNS 名称 my.database.example.com。

Service 的使用

使用 Service 可以方便地将应用暴露给其他服务或用户。下面是一个使用 ClusterIP 类型的 Service 的示例:

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

上面的 YAML 文件定义了一个名为 my-app 的 Deployment,它将 Pod 中标签为 app=my-app 的应用部署到集群中。同时,还定义了一个名为 my-service 的 ClusterIP 类型的 Service,它将 Pod 中标签为 app=my-app 的应用分组并暴露一个名为 http 的端口。

使用这个 Service,其他应用可以通过访问 http://my-service 来访问这个应用。

总结

使用 Service 可以方便地将应用暴露给其他服务或用户,并提供稳定的 IP 地址和 DNS 名称。Kubernetes 中的 Service 有多种类型,可以根据不同的需求选择不同的类型。

在使用 Service 的时候,需要注意 Pod 的标签和端口号的匹配关系,以及 Service 的类型和暴露的端口号。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65e592c21886fbafa4124332

纠错
反馈