Kubernetes 中的服务概念

2023-12-02  本文已影响0人  木火应

在 Kubernetes 中,服务是一种抽象,用于定义一组 Pod 的访问方式,提供了稳定的网络终结点。服务为应用程序的组件提供了一个统一的入口,使得这些组件之间可以相互发现和通信,而无需了解底层的网络细节。

主要组成部分:

  1. Pod:
    • Pod 是服务的实际运行单元。Service 将流量负载均衡到 Pod,使得在应用程序升级或扩展时,Pod 的 IP 地址和端口可能发生变化时,服务仍然可以提供稳定的访问方式。
  2. Service:
    • Service 定义了一组 Pod,并提供一个固定的虚拟 IP 地址和端口,作为对这组 Pod 的入口。Service 可以通过多种方式暴露,如 ClusterIP、NodePort、LoadBalancer 等。
  3. Selector:
    • Selector 是一个用于标识将包括在服务中的 Pod 的标签选择器。Service 使用标签选择器来匹配关联的 Pod。
  4. Endpoint:
    • Endpoint 是 Service 后面实际运行的 Pod 的 IP 地址和端口。Endpoints Controller 负责动态更新 Service 的 Endpoint。

Service 类型:

  1. ClusterIP:
    • 默认类型。在集群内部创建一个虚拟 IP,仅在集群内部可访问。
  2. NodePort:
    • 在每个节点上绑定一个静态端口,允许从集群外访问 Service。
  3. LoadBalancer:
    • 在云服务提供商中创建一个外部负载均衡器,自动分配外部 IP,并将流量导向 Service。
  4. ExternalName:
    • 提供了一个服务的 CNAME 记录,通过这个 CNAME 记录可以访问外部服务,而不是通过 ClusterIP。

创建 Service 的示例:

以下是一个创建 ClusterIP 类型的 Service 的示例 YAML 文件:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: ClusterIP

在这个示例中:

创建这个 Service 后,其他 Pod 可以通过 my-service 访问匹配标签选择器的 Pod,而不用关心 Pod 的具体 IP 地址和端口。这种抽象使得服务的维护更加灵活,不受底层 Pod 变化的影响。

上一篇下一篇

猜你喜欢

热点阅读