【K8S】配置中的port、targetPort、nodePort和containerPort区别

port

port是k8s集群内部访问service的端口,即通过clusterIP: port可以访问到某个service。

仅限于集群节点内互相访问,外部无法访问。

Service 的 port 是一个虚拟的、集群内部的抽象端口随便定义,只要特点条件下不重复即可)。它的主要作用是提供一个稳定的访问端点,与后端 Pod 的实际端口 (targetPort) 解耦。

唯一性约束: namespace + port + protocol

虽然可以相对随意定义,但它必须遵守唯一性规则。Kubernetes 通过组合以下三个要素来唯一确定一个 Service 端口:

  • Service 所在的命名空间 (Namespace)

  • Service 的 port 号码

  • 协议 (Protocol):通常是 TCP 或 UDP(默认为 TCP)

冲突规则:

在同一个命名空间内:你不能创建两个 Service 使用相同的 port 号和相同的协议。

  • ✅ 允许: Service A 的 port: 80 (TCP) 和 Service B 的 port: 80 (TCP) → 冲突!不允许!都是tcp

  • ✅ 允许: Service A 的 port: 80 (TCP) 和 Service B 的 port: 80 (UDP) → 不冲突,允许。 一个tcp,一个udp

  • ✅ 允许: Service A 在 namespace: prod 的 port: 80 和 Service B 在 namespace: dev 的 port: 80 → 不冲突,允许。(因为命名空间不同)

nodePort

nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort可以从外部访问到某个service。

targetPort

targetPort是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器。

targetPort和containerPort必须一致。

containerPort

containerPort是pod内部容器的端口,targetPort映射到containerPort。

图解

在这里插入图片描述

实例讲解

kubia是一个镜像的nodejs镜像,启动后,默认监听8080端口,通过http请求该端口,可以返回一个信息。

kubia是什么?参见《docker 入门 2 启动一个kubia镜像》

在这里插入图片描述
假设我的集群有3个节点,集群内的IP分别是172.33.1.55、172.33.1.56、172.33.1.57,假设其中某个Node的对外IP是10.228.62.129。

然后我创建了一个CLUSTER-IP类型的服务:

[root]$ kubectl get svc
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
kubernetes       ClusterIP   10.254.0.1      <none>        443/TCP                      18d
kubia-nodeport   NodePort   10.254.181.177   <none>        80:30000/TCP,443:32767/TCP   36s

PORT(S) 列显示集群 IP 内部端口 (80, 443) 和节点端口 (30000, 32767)

此时可以有2种方式访问:

  • cluster-ip:80 ,80对应port, 集群内部可以通过 10.254.181.177:80访问
  • nodeIP:30000 , 30000对应nodePort, nodeIP对应node节点的外部IP,假设是10.228.62.129

我可以从浏览器访问 http://10.228.62.129:30000/
在这里插入图片描述
当你访问 10.254.181.177:80http://10.228.62.129:30000/时,代理(就是我们的CLUSTER-IP类型的服务kubia-nodeport)会转发至pod中,那么实际上通过 podIp:targetPort访问。

containerPort就是8080

参考

K8S配置中的port、targetPort、nodePort和containerPort区别
【Kubernetes学习笔记】-服务访问之 Node IP &Cluster IP&port& TargetPort & Endpoint &nodePort 辨析

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值