概述

Kubernetes 是一种流行的容器编排系统,用于部署和管理容器化应用程序。作为这个生态系统中不可或缺的部分,Kubernetes 服务 提供了一个稳定的端点,用于访问 Kubernetes 集群内的运行 pod。

通过 服务,用户无需知道 IP 地址或端口号。然而,为了确保将流量正确路由到负责的 [pod] 中的 [Kubernetes] *[服务]*,理解在定义 [服务]porttargetPort 字段之间的区别至关重要。尽管这两个字段看起来相似,但它们具有不同的功能,因此正确配置它们对于确保 服务 和 pod 之间有效通信至关重要。

本文将讨论 porttargetPort 之间的差异,并了解如何正确配置它们以确保 服务 和 pod 之间的有效通信。

1. port 的介绍

服务 定义中,使用 port 字段指定 服务 将监听的端口号,用于接收传入流量。服务 使用此端口将流量路由到它负责的 pod。

以下是一个使用 port 字段设置为 8080服务 YAML 定义示例:

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

我们将 port 字段设置为 8080,这样就可以将传入流量引导至 服务 的端口 8080。同样,我们还将 targetPort 字段设置为 8080,以便将流量路由到 服务 负责的 pod,具体是其端口 8080

2. port 是什么?

服务 定义中,使用 port 字段指定 服务 将监听的端口号,用于接收传入流量。服务 使用此端口将流量路由到它负责的 pod。

以下是一个 服务 YAML 定义的示例,其中 port 字段设置为 8080

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

我们将 port 字段设置为 8080,这样就可以将传入流量引导至 服务 的端口 8080。同样,我们还将 targetPort 字段设置为 8080,以便将流量路由到 服务 负责的 pod,即那些特定的端口 8080

3. targetPort 是什么?

服务 定义中,targetPort 字段在路由流量至 服务 的 pod 中扮演着关键角色。此字段设置为 服务 负责路由流量至的 pod 的端口号。通过这样做,我们可以确保流量被定向至适当的 pod,并使我们的 服务 如预期般运行。

举个例子,假设一个 pod 正在运行 Web 服务器,端口号为 8080。在这种情况下,服务 定义中的 targetPort 字段会设置为 8080,从而允许流量被路由至特定的 pod。正确设置 targetPort 字段对于维护应用的可靠性和可用性至关重要。

以下是一个 服务 YAML 定义的示例,其中 targetPort 字段设置为 8080

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

targetPort 字段将流量路由至 服务 的 pod 的端口 8080。而 port 字段则将传入流量引导至 服务 的端口 80

4. porttargetPort 的差异

porttargetPort 之间的主要区别在于,port 指定 服务 用于接收外部客户端流量的端口号。targetPort 字段指定用于将流量路由至 服务 的 pod 的端口号。

简单来说,port 用于接收来自外部客户端的传入流量,而 targetPort服务 与负责处理该流量的 pod 之间的内部通信端口。*

5. 结论

在这篇文章中,我们学习了 Kubernetes 服务 定义中 porttargetPort 字段的重要性。理解它们之间的差异对于有效路由至负责的 pod 非常关键。应将 targetPort 设置为 pod 的端口号,而 port 则应设置为客户可访问的外部端口以供 服务 访问。