在 Kubernetes 中,targetPort 是一个 Service 资源定义中的一个关键字段,它指定了流量将被转发到后端 Pod 上的哪个端口。这个机制允许你在 Pod 内部使用一个端口,而在集群外部使用另一个端口来访问这些 Pod,从而提供了额外的灵活性和封装。
参考文章: 深入理解 Kubernetes:targetport
Service 和 targetPort 解释
-
Service:在 Kubernetes 中,Service 是定义一组逻辑上相同的 Pod 访问规则的抽象方式。它允许你通过一个固定的 IP 地址和端口来访问这一组 Pod,无论这些 Pod 的实际 IP 地址和端口是什么。
-
targetPort:这是 Service 中的一个字段,用来指定流量最终被转发到 Pod 上的哪个端口。targetPort可以是一个数字,也可以是字符串(如果你的 Pod 定义中有命名的端口)。
targetPort 使用场景
假设你有一组运行 HTTP 服务器的 Pod,这些服务器内部监听 8080 端口。但是,你希望集群外的用户能够通过标准的 HTTP 端口 80 来访问这些服务。在这种情况下,你可以创建一个 Service,并设置 port(Service 上的端口)为 80,targetPort(Pod 上的端口)为 8080。
示例
下面是一个 Service 定义的示例,演示了如何使用 targetPort:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80 # Service 上暴露的端口
targetPort: 8080 # 流量将被转发到 Pod 上的这个端口
在这个示例中,任何发往 my-service 的流量都会被转发到标签为 app: MyApp 的 Pod 上,且这些 Pod 上的目标端口是 8080。这意味着即使 Pod 内部的应用监听在 8080 端口,外部用户也可以通过访问 Service 的 80 端口来访问应用。
注意事项
- 端口命名:在 Pod 模板中给端口命名可以提高配置的可读性。当你使用命名端口时,可以在
targetPort中使用这个名称,而不是数字端口号。 - 默认行为:如果在 Service 定义中省略了
targetPort,Kubernetes 默认将targetPort设置为与port字段相同的值。 - 灵活性:
targetPort提供了灵活性,使得你可以在不影响外部访问的情况下,更改 Pod 内部的端口配置。
通过合理使用 targetPort,你可以在 Kubernetes 中灵活地管理服务的访问规则,确保应用的可访问性和安全性。
本文详细介绍了Kubernetes中targetPort的概念,它是Service定义中的关键字段,用于指定流量转发至后端Pod的端口。通过targetPort,可以实现外部通过标准端口访问内部非标准端口的服务,提供灵活性和封装。
1705

被折叠的 条评论
为什么被折叠?



