Kubernetes之Service
Service存在的意义
- 防止Pod失联
- 定义一组Pod访问策略
- 支持ClusterIp,NodePort以及LoadBalancer三种类型
Pod与Service的关系
- 通过label-selector相关联
- 通过Service实现Pod的负载均衡(TCP/UDP 4层)
示例
svc.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | apiVersion: v1 kind: Service metadata: labels: app: java - demo name: java - demo spec: ports: - port: 80 protocol: TCP targetPort: 8080 selector: app: java - demo type : NodePort |
selector根据标签关联一组资源
service类型
ClusterIP在集群内部访问,相当于一个VIP虚拟IP,访问VIP转发到后端不同的Pod
NopePort在每个Node上面创建一个端口,访问端口转发到后端不同的Pod,端口是随机的默认是从30000开始,用户访问Node ip加随机端口
LoadBalancer主要应用于公有云,工作原理类似于NopePort,访问Lb转发到Node通过Node再转发到后端Pod
查看当前命名空间下的service
1 | kubectl get svc |
任何类型都会产生内部的cluster ip
Service NopePort对外暴露应用
需要访问以下三个Pod
创建Service 改pod使用deploy.yaml创建
1 | kubectl expose deployment java - demo - - port = 80 - - target - port = 8080 - - type = NodePort |
指定类型为deployment
指定名称为java-demo 如果不知道名字可以通过kubectl get deploy查看
--port=80集群内部访问的端口是80
--target-port=8080内部应用实际端口,因为是tomcat所以是8080端口
可以使用参数--name指定名称 不指定名称和deploy是一样的
--type指定类型
Service已经存在,之前已经创建过了
加参数不执行创建yaml文件
1 | kubectl expose deployment java - demo - - port = 80 - - target - port = 8080 - - type = NodePort - - dry - run - o yaml |
导出至svc2.yaml
1 | kubectl expose deployment java - demo - - port = 80 - - target - port = 8080 - - type = NodePort - - dry - run - o yaml>>svc2.yaml |
应用
1 | kubectl apply - f svc2.yaml |
访问任何Node加随机端口即可访问该项目
怎么创建cluster ip把yaml文件里面的type类型改成ClusterIP即可
修改svc2.yaml
不指定type的话默认就是ClusterIP及只能在集群内部访问
删除刚刚应用的svc2
1 | kubectl delete - f svc2.yaml |
再创建一次
1 | kubectl apply - f svc2.yaml |
查看
1 | kubectl get svc |
在任何一个节点使用ClusterIP访问
1 | curl 10.1 . 187.157 : 80 |
要使用LoadBanlancer也是定义的
最常用的是ClusterIP和NodePort
CLusterIP只能在集群内部访问,只能在节点访问
NopePort分配一个集群IP会在每个Node启用一个端口,可以在集群外部访问
LoabBanlancer 分配一个内部集群IP地址,并在每个节点上启用一个端口来暴露服务
Service可以实现负载均衡,是怎么实现多个Pod负载均衡的呢
通过Iptables创建的规则转发到Pod
使用kube-proxy实现实现service功能
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2018-01-09 CentOS添加PHP至环境变量