概述
Kubernetes 是一种流行的容器编排系统,用于部署和管理容器化应用程序。作为这个生态系统中不可或缺的部分,Kubernetes 服务 提供了一个稳定的端点,用于访问 Kubernetes 集群内的运行 pod。
通过 服务,用户无需知道 IP 地址或端口号。然而,为了确保将流量正确路由到负责的 [pod] 中的 [Kubernetes] *[服务]*,理解在定义 [服务] 时 port 和 targetPort 字段之间的区别至关重要。尽管这两个字段看起来相似,但它们具有不同的功能,因此正确配置它们对于确保 服务 和 pod 之间有效通信至关重要。
本文将讨论 port 和 targetPort 之间的差异,并了解如何正确配置它们以确保 服务 和 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. port 和 targetPort 的差异
port 和 targetPort 之间的主要区别在于,port 指定 服务 用于接收外部客户端流量的端口号。targetPort 字段指定用于将流量路由至 服务 的 pod 的端口号。
简单来说,port 用于接收来自外部客户端的传入流量,而 targetPort 是 服务 与负责处理该流量的 pod 之间的内部通信端口。*
5. 结论
在这篇文章中,我们学习了 Kubernetes 服务 定义中 port 和 targetPort 字段的重要性。理解它们之间的差异对于有效路由至负责的 pod 非常关键。应将 targetPort 设置为 pod 的端口号,而 port 则应设置为客户可访问的外部端口以供 服务 访问。