视频加载失败

k8s Service:给一组 Pod 稳定入口

341 字
2 分钟
k8s Service:给一组 Pod 稳定入口

k8s Service#

Service 给一组 Pod 提供稳定访问入口。Pod 会销毁、重建、换 IP,但 Service 的名字和虚拟 IP 相对稳定。

Pasted image 20260616204746.png
Pasted image 20260616204746.png

它解决什么问题#

Deployment 后面可能有多个 Pod:

user-api Pod A: 10.1.0.11
user-api Pod B: 10.1.0.12
user-api Pod C: 10.1.0.13

客户端不应该记住这些 Pod IP,因为 Pod 随时会变化。Service 通过 label selector 找到这些 Pod,对外提供一个稳定入口。

client -> Service -> matching Pods

最小示例#

apiVersion: v1
kind: Service
metadata:
name: user-service
spec:
type: ClusterIP
selector:
app: user-service
ports:
- name: http
port: 80
targetPort: 8000

关键字段:

字段作用
selector找到带有对应 label 的 Pod
portService 暴露的端口
targetPortPod 容器里的端口
typeService 暴露方式

Service 类型#

类型用途
ClusterIP只在集群内部访问,默认类型
NodePort通过每台 Node 的端口访问
LoadBalancer云厂商创建负载均衡器
ExternalName映射到外部 DNS 名称

实际项目例子#

项目里有:

  • user-api:把流量转发到 app: user-api 的 Pod。
  • admin-api:把流量转发到 app: admin-api 的 Pod。

本地调试时常用 port-forward:

Terminal window
kubectl port-forward -n demo svc/user-api 18000:80
curl http://localhost:18000/readyz

常用命令#

Terminal window
kubectl get svc -n demo
kubectl describe svc user-api -n demo
kubectl get endpoints -n demo

如果 Service 没有转发到 Pod,优先检查:

  • Service 的 selector 是否匹配 Pod 的 labels。
  • Pod 是否处于 Ready 状态。
  • targetPort 是否等于容器实际监听端口。

相关笔记:pod、k8s deployment、Kubernetes 排障手册

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

k8s Service:给一组 Pod 稳定入口
https://blog.81vm3.xyz/posts/k8s-service/
作者
Blume
发布于
2026-03-03
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Blume
I build interesting things.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
38
分类
5
标签
98
总字数
23,078
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录