五、K8S之Service

Kubernetes Service

一、概念

Deployment对象部署完应用还需要向外界暴露入口才能通过HTTP访问到K8S集群里的应用Pod。Service就是做这件事情的,为什么还需要一个这样的API对象,一个方面是因为Pod的IP不是固定的,另外一个方面是因为一组Pod实例需要Service提供复杂均衡功能。所以Service是在逻辑抽象层上定义了一组Pod ,为他们提供一个统一的固定IP和访问这组Pod的负载均衡策略

Service是K8S中非常重要的概念,主要发挥的作用有:

  • 服务发现:Service可以将请求路由到后端Pods,从而实现服务发现的功能。通过Service,应用程序可以从Service的虚拟IP地址或者DNS名称访问一组Pods,并且无需了解实际上的这些Pods的IP地址和端口号
  • 负载均衡:Service在多个Pods质检提供负载均衡服务。当某个Pod无法响应请求时,service会自动将请求重定向到其他可用的Pods中。同时,service还可以根据不同的负载均衡策略(例如轮询、随机等)将请求分配到不同的Pods
  • 稳定的网络访问:Servcie的虚拟IP地址和DNS名称对应的是一组Pod的稳定网络访问**endpoint**。当Pods发生变化(例如,扩容、缩容、重新调度等)时,Service会自动更新Endpoints资源以反映最新的Pods信息。这样,应用程序可以从Service的虚拟IP地址或DNS名称中访问这些Pods,而无需关注它们具体在哪些节点上。
  • 简化配置:Service提供了一种简化配置的方式,可以将多个Pods捆绑在一个逻辑单元中。通过Service,可以对所有后端Pods应用相同的策略(例如标签选择器、负载均衡规则等),从而使配置更加简单和易于管理。

二、怎么发现Service

当Service创建时,K8S会自动为该Service分配一个DNS名称,并将该名称与Service关联起来。关联的完整格式为:

Servcie名称.命名空间.svc.集群域名后缀

这个DNS名称很长,有些情况下可以使用简写来替代。同一命名空间中的Pods访问可以省略命名空间,直接使用Service名称就可以访问。如果是在默认的命名空间下,也可以省略,直接使用service名称

三、Service类型

对一些应用的某些部分,可能只需要集群内部网路访问,而有些部分(如前端)可能需要其公开外部IP地址,也就是可以从集群外部访问某个地址,所以在创建Service可以指定所需要的Service类型。可用的type有:

2.1、ClusterIP

这是默认的Service类型,会将Service对象通过一个内部IP暴露给集群内部,这种类型的Service只能够在集群内部使用和访问,不对外暴露

2.2、NodePort

会在每个宿主节点的一个指定固定端口号上暴露Service,与此同时还会自动创建一个ClusterIP类型的Service,NodePort类型的Service会将集群外部的请求路由给NodePort类型的Service。当类型设置为 NodePort 后,可以在 ports 配置中增加 nodePort 配置指定端口,需要在下方的端口范围内,如果不指定会随机指定端口,端口范围:30000~32767

也可以修改端口范围配置,在文件 /usr/lib/systemd/system/kube-apiserver.servic调整

2.3、LoadBalancer

适用于公有云上的Kubernetes服务,使用LoadBalancer类型的Service,同时会自动创建NodePortClusterIP类型的ServiceLoadBalancer会把请求路由到NodePortClusterIP类型的Service上。

2.4、ExternalName

ExternalName 类型的 Service,是在 kube-dns 里添加了一条 CNAME 记录。这个CNAME记录是在Service的spec.externalName里指定的,

以上四种类型除了ExternalNameKuberneteskube-proxy组件都会为Service提供VIP(虚拟IP)

四、使用

4.1、ClusterIP类型使用
  • 创建一个一个nginx-service-ClusterIP.yaml文件,内容如下:
apiVersion: v1
kind: Service
metadata:name: nginx-svc-cluster   # Service名称labels:app: nginx-svc-cluster # Service标签
spec:type: ClusterIP # service类型selector: #匹配哪些pod会被Serivce代理app: nginx-deployports: #端口映射- name: http #为这个端口映射起一个名字#  端口绑定的协议,支持 TCP、UDP、SCTP,默认为 TCPprotocol: TCP# svc 自己的端口,虚拟port: 80#  目标 pod 的端口targetPort: 90
  • 查看service创建情况

    
    kubectl get svc-------------------------------------------------
    NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                     AGE
    kubernetes          ClusterIP   10.96.0.1       <none>        443/TCP                     20d
    nginx-svc-cluster   ClusterIP   10.110.228.98   <none>        80/TCP                      16m
    
  • 访问

    • 创建一个创建busybox的Pod

    前面说过ClusterIP类型只能供集群内网访问,所以我们只能先创建一个pod,进去这个pod,再来访问这个地址

    # 创建busyboxpod
    kubectl run busybox-pod --image=busybox --restart=Always #进进入容器
    kubectl exec -it busybox-pod -- sh
    • 访问

      wget 10.110.228.98
      或者
      wget nginx-svc-cluster
      
4.2、NodePort类型使用

apiVersion: v1
kind: Service
metadata:name: nginx-svc-nodeportlabels:app: nginx-svc-nodeport
spec:type: NodePortselector: #匹配哪些pod会被Serivce代理app: nginx-deployports: #端口映射- name: http #为这个端口映射起一个名字#  端口绑定的协议,支持 TCP、UDP、SCTP,默认为 TCPprotocol: TCP# nodePort是svc占用宿主机的一个端口# nodePort: 30080# svc 自己的端口,虚拟port: 80#  目标 pod 的端口targetPort: 90- name: http2port: 81targetPort: 91

查看service创建情况

kubectl get svc-------------------------------------------------
NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                     AGE
kubernetes          ClusterIP   10.96.0.1       <none>        443/TCP                     20d
nginx-svc-nodeport  NodePort    10.98.195.178   <none>        80:31216/TCP,81:30517/TCP   39h

这里创建一个名叫nginx-svc 类型为NodePort的service,并且绑定了两个端口号,如果绑定两个端口号则访问的时候加上对应的端口号,如:

# 这样就能访问到pod的90端口号
wget nginx-svc-nodePort:80# 这样就能访问到pod的91端口号
wget nginx-svc-nodePort:81--不需要再容器中使用
# 这样就能访问到pod的90端口号
wget 192.168.31.100:31216
4.3、ExternalName类型使用
apiVersion: v1
kind: Service
metadata:name: nginx-svc-externalname   # Service名称labels:app: nginx-svc-externalname # Service标签
spec:type: ExternalNameexternalName: www.baidu.com

进去容器测试

# 进入容器
kubectl exec -it busybox-pod -- sh#测试
ping nginx-svc-externalnam

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/111163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux文件管理与用户管理

一、查看文件内容 1、回顾之前的命令 cat命令、tac命令、head命令、tail命令、扩展&#xff1a;tail -f动态查看一个文件的内容 2、more分屏显示文件内容&#xff08;了解&#xff09; 基本语法&#xff1a; # more 文件名称 特别注意&#xff1a;more命令在加载文件时并不…

【三:Mock服务的使用】

目录 1、工具包2、mock的demo1、get请求2、post请求3、带cookies的请求4、带请求头的请求5、请求重定向 1、工具包 1、&#xff1a;服务包的下载 moco-runner-0.11.0-standalone.jar 下载 2、&#xff1a;运行命令java -jar ./moco-runner-0.11.0-standalone.jar http -p 888…

2023-10-17 mysql-innodb-解析write_row的record的一行数据-分析

摘要: 2023-10-17 mysql-innodb-解析write_row的record的一行数据-分析. record是一行数据的序列化后的一整个字节流, 在innodb中需要解读出字段. 本文分析如何解析record, 以便学习这种技巧. row_mysql_store_col_in_innobase_format 调用堆栈: #0 row_mysql_store_col_in…

边写代码边学习之mlflow

1. 简介 MLflow 是一个多功能、可扩展的开源平台&#xff0c;用于管理整个机器学习生命周期的工作流程和工件。 它与许多流行的 ML 库内置集成&#xff0c;但可以与任何库、算法或部署工具一起使用。 它被设计为可扩展的&#xff0c;因此您可以编写插件来支持新的工作流程、库和…

【算法学习】归并算法Merge Sort总结

归并排序思路简单&#xff0c;速度仅次于快速排序&#xff0c;为稳定排序算法&#xff0c;一般用于对总体无序&#xff0c;但是各子项相对有序的数列。 1. 基本思想 归并排序使用分治思想&#xff0c;分治模式下每一层递归有三个步骤&#xff1a; 分解&#xff08;divide)&a…

Git命令在线练习网址--非常友好的提示及动画展示

Git命令在线练习 https://learngitbranching.js.org/ 举个栗子: 在练习时会给你相应提示,你可以按照相应步骤进行操作,并且每一步都有动画演示

直播带货前途渺茫了

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 种种迹象表明电商行业和直播带货将受到冲击。直播带货前途渺茫了&#xff0c;相信很快就有政策出来了&#xff0c;针对电商这块的&#xff0c;支持实体、支持取消直播带货。 (1)目前&#xff0c;…

display有哪些值?说明他们的作用?

display解析: display 属性用于控制元素的外部盒模型&#xff08;外观&#xff09;以及元素在文档中的布局。它有多个不同的值&#xff0c;每个值都会影响元素的呈现方式和行为。以下是一些常见的 display 属性值以及它们的作用&#xff1a; block&#xff08;块级元素&#x…

协同创新、奔赴未来——“华为云杯”2023人工智能创新应用大赛华丽谢幕

9月27日&#xff0c;在苏州工业园区管理委员会、华为云计算技术有限公司的指导下&#xff0c;由SISPARK&#xff08;苏州国际科技园&#xff09;、华为&#xff08;苏州&#xff09;人工智能创新中心联合主办&#xff0c;东北大学工业智能与系统优化国家级前沿科学中心、浙江大…

驱动:驱动相关概念,内核模块编程,内核消息打印printk函数的使用

一、驱动相关概念 1.操作系统的功能 向下管理硬件&#xff0c;向上提供接口 操作系统向上提供的接口类型&#xff1a; 内存管理&#xff1a;内存申请&#xff08;malloc&#xff09; 内存释放&#xff08;free&#xff09;等 文件管理&#xff1a; 通过文件系统格式对文件ext2…

E054-web安全应用-Brute force暴力破解进阶

课程名称&#xff1a; E054-web安全应用-Brute force暴力破解进阶 课程分类&#xff1a; web安全应用 实验等级: 中级 任务场景: 【任务场景】 小王接到磐石公司的邀请&#xff0c;对该公司旗下的网站进行安全检测&#xff0c;经过一番检查发现该网站可能存在弱口令漏洞…

​LeetCode解法汇总1726. 同积元组

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 给你一个由…

AAOS CarMediaService 服务框架

文章目录 前言MediaSessionCarMediaService作用是什么&#xff1f;提供了哪些接口&#xff1f;如何使用&#xff1f;CarMediaService的实现总结 前言 CarMediaService 是AAOS中统一管理媒体播放控制、信息显示和用户交互等功能的服务。这一服务依赖于android MediaSession框架…

搭建NGINX服务 如何统计网页访问量

一、搭建Nginx服务 搭建之前需要查看一下我们的内核数制 我们进行简单的内核优化 命令&#xff1a;ulimit -n 65535 安装Nginx服务 第一步 关闭防火墙和安全机制 systemctl stop firewalld #关闭防火墙 systemct disable firewalld #开机自动关闭防火墙 setenfor…

美创科技信创数据安全「利基者」!

近日&#xff0c;第一新声研究部正式发布《2023年中国信创网络安全产品竞争力象限》&#xff08;下称“象限报告“&#xff09;。 ◼︎ 象限报告综合考虑企业占有率、在技术/应用上的成熟度、在客户方面的交付完成度及口碑、产品在市场/营销/商业模式/行业拓展等战略上的领先性…

ES6 数组解构时不加分号引发的问题

问题代码 let value1 0 let value2 0 let value1_1 , value1_2 , value1_3 , value2_1, value2_2, value2_3function myhandle(cur, pre) {let s , c , r if (parseInt(cur) - parseInt(pre) < 0) {s -c decreaser Math.abs(parseInt(cur) - parseInt(pre))} el…

无人机新手防炸飞行技巧

不要在室内飞行,容易撞墙。起飞前设置好避障和返航模式。使用模拟器熟练掌握操控。选择开阔环境目视起飞。使用低速档平稳飞行。合理使用避障功能,不要盲目依赖。使用九宫格避障法。留意电量,及时返航。极低电量时放弃强行返航。飞行后及时为电池充电保养。

文件管理系统的基本认识

1.文件的属性 文件的定义:一组有意义的信息的集合。 1.文件名: 由创建文件的用户决定文件名&#xff0c;主要是为了方便用户找到文件&#xff0c;同一目录下不允许有重名文件。 2.标识符: 一个系统内的各文件标识符唯一&#xff0c;对用户来说毫无可读性&#xff0c; 因此…

NetCore/Net8下使用Redis的分布式锁实现秒杀功能

目的 本文主要是使用NetCore/Net8加上Redis来实现一个简单的秒杀功能&#xff0c;学习Redis的分布式锁功能。 准备工作 1.Visual Studio 2022开发工具 2.Redis集群&#xff08;6个Redis实例&#xff0c;3主3从&#xff09;或者单个Redis实例也可以。 实现思路 1.秒杀开始…

mysql按照日期分组统计数据(date_formatstr_to_date)

学习链接 mysql按照日期分组统计数据 博主-山茶花开时的 【Mysql专栏学习】 mysql按照日期分组统计数据 Mysql的date_format函数想必大家都使用过吧&#xff0c;一般用于日期时间转化&#xff0c;如下所示 # 可以得出 2023-01-01 08:30:50 select DATE_FORMAT(2023-01-01…