当前位置: 首页 > news >正文

k8s-第四节-Service

Service

  • Service 通过 label 关联对应的 Pod
  • Servcie 生命周期不跟 Pod 绑定,不会因为 Pod 重创改变 IP
  • 提供了负载均衡功能,自动转发流量到不同 Pod
  • 可对集群外部提供访问端口
  • 集群内部可通过服务名字访问

services

创建 Service

kubectl apply -f service.yamlkubectl get svc

内部访问 Service

服务的默认类型是ClusterIP,只能在集群内部访问,我们可以进入到 Pod 里面访问:

kubectl exec -it pod-name -- bash
curl http://test-k8s:8080

如果你是用 minikube,因为是模拟集群,你的电脑并不是节点,节点是 minikube 模拟出来的,所以你并不能直接在电脑上访问到服务

外部访问 Service

如果要在集群外部访问,可以通过端口转发实现(只适合临时测试用):

kubectl port-forward service/test-k8s 8888:8080

如果你用 minikube,也可以这样minikube service test-k8s 来将service暴露到外部

K8S中的四种端口号:

  • containerPort:容器内部进程使用的端口

  • Port:为service在clusterIP上暴露的端口

  • targetPort:容器映射在pod上的端口

  • nodeport:将端口映射到宿主机上,提供外部流量访问K8S集群中service的入口

对外暴露服务

上面我们是通过端口转发的方式可以在外面访问到集群里的服务,如果想要直接把集群服务暴露出来,我们可以使用NodePortLoadbalancer 类型的 Service

apiVersion: v1
kind: Service
metadata:name: test-k8s
spec:selector:app: test-k8s# 默认 ClusterIP 集群内可访问,NodePort 节点可访问,LoadBalancer 负载均衡模式(需要负载均衡器才可用)type: NodePortports:- port: 8080        # 本 Service 的端口targetPort: 8080  # 容器端口nodePort: 31000   # 节点端口,范围固定 30000 ~ 32767

Loadbalancer 也可以对外提供服务,这需要一个负载均衡器的支持,因为它需要生成一个新的 IP 对外服务,否则状态就一直是 pendding,这个很少用了,后面我们会讲更高端的 `Ingress 来代替它。

多端口暴露服务

apiVersion: v1
kind: Service
metadata:name: test-k8s
spec:selector:app: test-k8stype: NodePortports:- port: 8080        # 本 Service 的端口name: test-k8s    # 必须配置targetPort: 8080  # 容器端口nodePort: 31000   # 节点端口,范围固定 30000 ~ 32767- port: 8090name: test-othertargetPort: 8090nodePort: 32000

EndPoint

EndPoint 就是将 Pod 的 IP 和端口对应起来,这样 Service 才能找到 Pod。

apiVersion: v1
kind: Endpoints
metadata:name: test-k8s
subsets:- addresses:- ip: 10.244.1.10ports:- port: 8080
  • 一个或多个subset对象,每个subset中包含一组IP地址和端口号的列表。不同的subset可以根据Label Selector将后端Pod进行分类。
  • addresses:一个IP地址列表,表示属于该Endpoint的Pod的IP地址。
  • ports:一个端口号列表,表示属于该Endpoint的Pod所开放的端口号
  • 每个subset都包含一个或多个address和ports,表示一个或多个Pod的IP地址和端口号。
  • 通过使用Endpoint资源对象,Kubernetes可以动态地管理后端Pod实例的地址和端口信息。

这样,当后端Pod的数量发生变化、新的Pod加入或旧的Pod删除时,Kubernetes会及时更新Endpoint中的信息,保持负载均衡和流量路由的正确性。

总结来说,Endpoint是Kubernetes中用于关联Service与后端Pod实例的资源对象,存储了一组IP地址和端口号的列表。

总结service 类型 yaml中通过type指定

ClusterIP

默认的,仅在集群内可用

NodePort

暴露端口到节点,提供了集群外部访问的入口
端口范围固定 30000 ~ 32767

LoadBalancer

需要负载均衡器(通常都需要云服务商提供,裸机可以安装 METALLB 测试)
会额外生成一个 IP 对外服务
K8S 支持的负载均衡器:负载均衡器

Headless

适合数据库
clusterIp 设置为 None 就变成 Headless 了,不会再分配 IP,通过 DNS 解析获取,以Pod名为DNS

相关文章:

  • Foxit Reader(福昕阅读器)详细安装和使用教程
  • 视频提取字幕的软件有哪些?这5个高效又好用
  • 第三方支付公司的代付和入帐怎么解释?
  • 一些java中记忆的问题
  • NLP入门——前馈词袋分类模型的搭建、训练与预测
  • 【LeetCode】反转字符串中的单词
  • RabbitMQ入门教程(精细版二带图)
  • ruoyi实用性美化记录
  • 边缘计算赋能:高效固体废物管理的ARMxy工业计算机实践
  • 眼底图像生成新 SOTA:GeCA模拟生物细胞的演变过程
  • 性能测试:JMeter与Gatling的高级配置
  • 五.核心动画 - 图层的变换(平移,缩放,旋转,3D变化)
  • 超融合服务器挂载硬盘--linux系统
  • BugkuCTF-Crypto(1-5)
  • 102.沉没孤岛
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 08.Android之View事件问题
  • 30秒的PHP代码片段(1)数组 - Array
  • bootstrap创建登录注册页面
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • nginx 负载服务器优化
  • React-生命周期杂记
  • SOFAMosn配置模型
  • vue.js框架原理浅析
  • 阿里云购买磁盘后挂载
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 对超线程几个不同角度的解释
  • 工作中总结前端开发流程--vue项目
  • 基于axios的vue插件,让http请求更简单
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 面试遇到的一些题
  • 模型微调
  • 实习面试笔记
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #Java第九次作业--输入输出流和文件操作
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (离散数学)逻辑连接词
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)Linux+Windows下安装ffmpeg
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • /boot 内存空间不够
  • @Async注解的坑,小心
  • @PostConstruct 注解的方法用于资源的初始化
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [android] 请求码和结果码的作用
  • [BZOJ4554][TJOI2016HEOI2016]游戏(匈牙利)
  • [C语言]——C语言常见概念(1)