当前位置: Http > K8S > pod、deployment、service端口、标签区别与联系

pod、deployment、service端口、标签区别与联系

2025-05-21 分类:K8S 作者:admin 阅读(23)

1. Pod 中的端口配置

Pod 是 Kubernetes 中最小的调度单元,端口配置在 Pod 中用于定义容器暴露的端口。

关键字段:

  • containers.ports:在 Pod 的容器中定义端口。

    • containerPort:容器内应用监听的端口(仅作为文档说明,实际不控制端口暴露)。

    • name:端口的名称(可选,用于 Service 中引用)。

    • protocol:协议类型(TCP/UDP/SCTP,默认为 TCP)。

作用:

  • 声明容器需要暴露的端口(Kubernetes 不会自动映射,仅作为元数据)。

  • 供 Service 或 Ingress 引用。

 Deployment 中的端口配置

Deployment 是管理 Pod 副本的更高层抽象,其端口配置实际是通过 Pod 模板(spec.template.spec)定义的,与 Pod 的配置完全一致。

作用:

  • 通过 Pod 模板声明容器端口,确保所有副本 Pod 使用相同的端口配置。

Service 中的端口配置

Service 用于将一组 Pod 暴露为网络服务,其端口配置定义了服务的访问规则。

关键字段:

  • spec.ports:定义 Service 的端口映射规则。

    • port:Service 对外暴露的端口(集群内或外部可访问的端口)。

    • targetPort:目标端口(Pod/容器的端口,与 containerPort 对应)。

    • nodePort:当 Service 类型为 NodePort 或 LoadBalancer 时,节点上暴露的端口(范围 30000-32767)。

    • protocol:协议类型(TCP/UDP/SCTP)。

作用:

  • 将 Service 的 port 映射到后端 Pod 的 targetPort(即 containerPort)。

  • 支持端口重定向(例如 Service 端口 80 映射到 Pod 端口 8080)。

常见场景示例

场景:Service 端口与 Pod 端口不同

场景:多端口 Service

总结

  1. Pod 的 containerPort 是声明性的,仅说明容器监听的端口。

  2. Deployment 通过 Pod 模板继承 Pod 的端口配置。

  3. Service 的 targetPort 必须与 Pod 的 containerPort 匹配,而 port 是 Service 自身的虚拟端口。


在 Kubernetes 的 YAML 配置文件中,metadata.namemetadata.labels.appspec.selector 这些字段在 PodDeployment 和 Service 中均有出现,但它们的用途和关联逻辑不同。以下是它们的区别和联系:

metadata.name

作用

  • 唯一标识资源:在同一个命名空间(Namespace)中,metadata.name 必须是唯一的,用于区分不同的资源(如 Pod、Deployment、Service)。

  • 无直接关联性name 仅用于资源本身的标识,不直接影响其他资源的绑定关系。

metadata.labels 和 metadata.labels.app

作用

  • 标签(Labels):metadata.labels 是键值对(如 app: nginx),用于标记资源(如 Pod、Deployment、Service),方便其他资源(如 Service、Deployment)通过 selector 筛选匹配的资源。

  • 常见约定metadata.labels.app 是一个常用标签,通常表示应用名称(如 app: nginx),但 Kubernetes 本身不强制要求使用 app,可以自定义(如 tier: frontend)。

spec.selector

作用

  • 选择器(Selector):用于 匹配目标资源(如 Deployment 匹配 Pod、Service 匹配 Pod)。

  • 必须匹配 metadata.labelsselector 通过标签选择器(matchLabels 或 matchExpressions)找到符合条件的资源。

    不同资源的 selector 用途

    资源类型 selector 作用 示例
    Deployment 选择它管理的 Pod(通过 spec.template.metadata.labels 匹配) selector.matchLabels.app: nginx 会管理所有 labels.app: nginx 的 Pod
    Service 选择它代理的 Pod(通过 metadata.labels 匹配) selector.app: nginx 会代理所有 labels.app: nginx 的 Pod

三者的联系

  1. metadata.labels 是标记,用于标识资源(如 Pod)。

  2. spec.selector 是选择器,用于匹配带有特定 labels 的资源(如 Deployment 选择 Pod,否则无法管理 Pod。Service 选择 Pod,否则无法代理流量)。

  3. metadata.name 是唯一标识,不直接影响绑定,但可用于手动查找资源。

「三年博客,如果觉得我的文章对您有用,请帮助本站成长」

赞(0) 打赏

支付宝
微信
0

支付宝
微信
标签:

上一篇:

下一篇:

你可能感兴趣

共有 0 - pod、deployment、service端口、标签区别与联系

博客简介

精彩评论

  • admin(6年前 (2020-03-09))

    分别用不同厚度的筏板定义,画图后这设置筏板变截面处理。 http://f.fwxgx.co...

    评:新文章!
  • admin(6年前 (2020-03-09))

    分别用不同厚度的筏板定义,画图后这设置筏板变截面处理。 http://f.fwxgx.co...

    评:新文章!
  • admin(6年前 (2020-03-09))

    新增一个框架图! http://biji.jinli.vip/wp-content/upl...

    评:新文章!
  • 一位WordPress评论者(6年前 (2020-02-13))

    嗨,这是一条评论。 要开始审核、编辑及删除评论,请访问仪表盘的“评论”页面。 评论者头像来自...

    评:世界,您好!