2026/8/31 6:11:33

K8s Service 入门:一个 YAML 看懂 DNS、类型、标签与端口转发

K8s Service 入门:一个 YAML 看懂 DNS、类型、标签与端口转发 根据K8S资源协作关系图我们本篇介绍一下service首先介绍一下什么是service给一组不断变化的 Pod 提供一个永远不变的访问地址在我们的架构图中service跟ingress一起实现的外部访问pod内部的行为service提供的是集群内部的访问服务而ingress提供的是集群外部的访问功能外部用户会通过一个统一的入口来访问ingress然后ingress会转发流量到serviceservice再进行分发到pod。那么service只能进行集群内部的访问么好我们先来看一个简单的service的yaml文件apiVersion:v1# Service 属于核心组不需要 apps/ 前缀kind:Servicemetadata:name:web-svc# ① 名字 集群内的访问域名spec:type:ClusterIP# ② 类型决定谁能访问selector:# ③ 标签选择器决定流量分给谁app:webports:# ④ 端口规则流量怎么转-port:80# 入口端口targetPort:8080# 转发到容器的端口四个核心配置块逐个讲① name不只是个名字是 DNS 域名# Service 创建后集群 DNS 自动注册一条记录# 集群内任何 Pod 都可以这样访问curl http://web-svc:80curl http://web-svc.default.svc.cluster.local:80# 跨命名空间的全名② type四种类型决定暴露范围type:ClusterIP# 默认。集群内部访问。生产中应用互访都用它type:NodePort# 每个节点开 30000-32767 的端口外部通过 节点IP:端口 访问type:LoadBalancer# 云上自动创建负载均衡器公网直接访问type:ExternalName# 不转发给 Pod返回 CNAME 指向外部域名少用这里列举几个简单的使用场景前端调后端 API临时给测试同学看个 demo云上生产直接对外那么这三个场景分别用到那种类型的呢?ClusterIP、NodePort、LoadBalancer层级关系NodePort 包含 ClusterIP 的能力LoadBalancer 包含 NodePort 的能力。③ selector流量分给谁靠标签匹配selector:app:web# Service 持续监听所有带 appweb 标签的 Pod④ ports三个端口的关系ports:-port:80# Service 的端口调用方访问用targetPort:8080# 容器端口应用真实监听的# nodePort: 30080 # NodePort 类型时节点上开的端口选填易错点targetPort 必须和容器里应用监听的端口一致。写错的现象是——Service 正常、Endpoints 有 IP但 curl 超时。