【服务发现--service】

在这里插入图片描述

1、service的定义

  • "Service"简写"svc”。Pod不能直接提供给外网访问,而是应该使用service。Service就是把Pod暴露出来提供服务,Service才是真正的“服务”,它的中文名就叫“服务”。
  • 可以说Service是一个应用服务的抽象,定义了Pod逻辑集合和访问这个Pod集合的策路。Service代理Pod集合,对外表现为一个访问入口,访问该入口的请求将经过负载均衡,转发到后端Pod中的容器。

2、service和pod之间的网络是如何打通的

  • service和pod之间的网络布局如下图所示
    在这里插入图片描述

2.1 service与endpoints的关系

在这里插入图片描述

2.2 endpoints和pod的关系

在这里插入图片描述

2.3 查看创建service的配置文件和pod的关联信息

在这里插入图片描述

2.4 service和pod通信过程

  • 1、创建service的时候会同时创建一个endpoints,创建service的时候会带有一个选择器,通过这个标签可以找到对应的pod,同时service也会生成ip地址,提供集群内访问。
  • 2、endpoints中包含了pod的ip和端口信息,通过iptables转发数据给node上的kube-proxy,node上的kube-proxy把数据转发给pod中的根容器。

3、service的配置文件解析

apiVersion: v1
kind: Service  # 资源类型为 Service
metadata:
  name: nginx-svc  # service 名字
  labels:
    app: nginx   # service 的标签
spec:
  selector:  # 选择器,匹配那些pod会被该service 代理
    app: nginx-deploy   # 所有匹配到这个标签的pod 都可以通过该 service 进行访问
  ports:  # 端口樱色
  - port: 80    # service自己的端口哦,在使用内网ip访问时使用
    targetPort: 80  # 目标 pod的端口
    name: web   # 为service端口起一个名字
# 随机启动一个端口(30000-32767),映射到ports中的端口,该端口是直接绑定在node上的,且集群中的每一个node都会绑定这个端口
# 也可以用于将服务器暴露给外部访问,但是这种方式实际生产环境不推荐,效率低,而且service是四层负载    
  type: NodePort  

4、service的代理集群内的资源

4.1 创建service

kubectl  create -f  nginx-svc.yaml

4.2 查看service 信息

[root@k8s-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.1.0.1       <none>        443/TCP        5d4h
nginx-svc    NodePort    10.1.224.211   <none>        80:31231/TCP   4h16m```
## 4.3 查看service的描述信息

```c
[root@k8s-master ~]# kubectl describe svc nginx-svc
Name:                     nginx-svc
Namespace:                default
Labels:                   app=nginx
Annotations:              <none>
Selector:                 app=nginx-deploy
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.1.224.211
IPs:                      10.1.224.211
Port:                     web  80/TCP
TargetPort:               80/TCP
NodePort:                 web  31231/TCP
Endpoints:                10.2.1.55:80,10.2.2.31:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

4.4 进入其他Pod后通过 service name 进行访问

[root@k8s-master ~]# kubectl exec -it dns-test -- sh
/ # wget http://nginx-svc
Connecting to nginx-svc (10.1.224.211:80)
index.html           100% |*************************************************************************************************************************************************************|   612   0:00:00 ETA
/ # cat  index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

4.5 service默认是命名空间级,跨namespace如何访问?

  • 默认在当前namespace中访问,如果需要跨namespace访问pod,则在service name的后面加上 . 即可
  • eg: curl http://nginx-svc.default

5、Pod通过service访问外部资源方式

  • 实现方式如下:
  • 编写service配置文件时,不指定selector属性的时候,就不会创建endpoints
  • 自己创建endpoints

5.1 service代理k8s的外部服务(通过IP地址访问)

5.1.1 创建一个service的配置文件

apiVersion: v1
kind: Service  # 资源类型为 Service
metadata:
  name: nginx-svc-external   # service 名字
  labels:
    app: nginx   # service 的标签
spec:
  ports:  # 端口映射
  - port: 80    # service自己的端口哦,在使用内网ip访问时使用
    targetPort: 80  # 目标 pod的端口
    name: web   # 为service端口起一个名字  
  type: ClusterIP  # 只能在集群内部使用

5.1.2 创建一个endpoints的配置文件

apiVersion: v1
kind: Endpoints
metadata:
  labels:
    name: nginx # 与service保持一致
  name:  nginx-svc-external   # 与service一致
  namespace: default  # 与 service 一致
subsets:
- addresses:
  - ip: 47.110.152.250  # pod需要访问的目标ip地址
  ports:        # 与service保持一致
  - name: web
    port: 80
    # protocol: TCP

5.1.3 创建service资源

[root@k8s-master ~]# kubectl create -f nginx-svc-external.yaml
service/nginx-svc-external created

[root@k8s-master ~]# kubectl get svc
NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes           ClusterIP   10.1.0.1       <none>        443/TCP        5d4h
nginx-svc            NodePort    10.1.224.211   <none>        80:31231/TCP   4h21m
nginx-svc-external   ClusterIP   10.1.63.181    <none>  80/TCP         35s

5.1.4 创建endpoints资源

[root@k8s-master ~]# kubectl create -f nginx-ed-external.yaml
endpoints/nginx-svc-external created


[root@k8s-master ~]# kubectl get ep
NAME                 ENDPOINTS                   AGE
kubernetes           10.10.10.100:6443           5d4h
nginx-svc            10.2.1.55:80,10.2.2.31:80   4h22m
nginx-svc-external   47.110.152.250:80           20s

5.1.5 查看endpoints和service描述信息

[root@k8s-master ~]# kubectl describe ep  nginx-svc-external
Name:         nginx-svc-external
Namespace:    default
Labels:       app=nginx
Annotations:  <none>
Subsets:
  Addresses:          47.110.152.250
  NotReadyAddresses:  <none>
  Ports:
    Name  Port  Protocol
    ----  ----  --------
    web   80    TCP

Events:  <none>


[root@k8s-master ~]# kubectl describe  svc nginx-svc-external
Name:              nginx-svc-external
Namespace:         default
Labels:            app=nginx
Annotations:       <none>
Selector:          <none>
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.1.63.181
IPs:               10.1.63.181
Port:              web  80/TCP
TargetPort:        80/TCP
Endpoints:         47.110.152.250:80
Session Affinity:  None
Events:            <none>

5.1.6 通过busybox容器测试 ????

[root@k8s-master ~]# kubectl get pod
NAME                           READY   STATUS    RESTARTS      AGE
dns-test                       1/1     Running   1 (23h ago)   24h
fluentd-59k8k                  1/1     Running   0             6h29m
fluentd-hhtls                  1/1     Running   0             6h25m
nginx-deploy-fdd948cf4-69b85   1/1     Running   0             135m
nginx-deploy-fdd948cf4-r8ktj   1/1     Running   0             5h43m


[root@k8s-master ~]# kubectl exec -it dns-test -- sh
/ # wget http://nginx-svc-external
Connecting to nginx-svc (47.110.152.250:80)
index.html           100% |*************************************************************************************************************************************************************|   612   0:00:00 ETA
/ # cat  index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

5.1.7 k8s集群中的pod访问外部服务的流程

在这里插入图片描述

5.2 service反向代理外部域名(通过域名访问 )

5.2.1 创建service的配置文件

apiVersion: v1
kind: Service  # 资源类型为 Service
metadata:
  name: test-svc-external-domian   # service 名字
  labels:
    app: test-svc-external-domian   # service 的标签
spec:
  type: ExternalName
  externalName: www.lan-he.com.cn

5.2.2 创建service

[root@k8s-master ~]# kubectl create -f test-svc-external-domian.yaml

service/test-svc-external-domian created

5.2.3 查看service信息

service/csdn-svc-external-domian edited
[root@k8s-master ~]# kubectl get svc
NAME                       TYPE           CLUSTER-IP     EXTERNAL-IP         PORT(S)        AGE
test-svc-external-domian   ExternalName   <none>         www.lan-he.com.cn   <none>         100s
kubernetes                 ClusterIP      10.1.0.1       <none>              443/TCP        5d15h
nginx-svc                  NodePort       10.1.224.211   <none>              80:31231/TCP   14h
nginx-svc-external         ClusterIP      10.1.63.181    <none>              80/TCP         10h

5.2.4 通过busybox容器测试

[root@k8s-master ~]# kubectl exec -it dns-test -- sh
/ # wget http://www.lan-he.com.cn
Connecting to www.lan-he.com.cn (47.110.152.250:80)
index.html           100% |*************************************************************************************************************************************************************|   612   0:00:00 ETA
/ # cat index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

6、service中spec中的type常用类型

  • ClusterIP: 只能在集群内部使用,不配置类型的话默认就是ClusterlP
  • ExternalName:返回定义的CNAME别名,可以配置为域名
  • NodePort:
    • 会在所有安装了kube-proxy的节点都绑定一个端口,此端口可以代理至对应的Pod,集群外部可以使用任意节点ip+NodePort的端口号访问到集群中对应Pod中的服务。
    • 当类型设置为NodePort后,可以在ports配置中增加nodePort配置指定端口,需要在下方的端口范围内,如果不指定会随机指定端口。
    • 端口范围:30000~32767
    • 端口范围配置在/usr/lib/systemd/system/kube-apiserver.service文件中
  • LoadBalance: 使用云服务商(阿里云、腾讯云等)提供的负载均衡器服务

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

吴恩达机器学习全课程笔记第五篇

目录 前言 P80-P85 添加数据 迁移学习 机器学习项目的完整周期 公平、偏见与伦理 P86-P95 倾斜数据集的误差指标 决策树模型 测量纯度 选择拆分方式增益 使用分类特征的一种独热编码 连续的有价值特征 回归树 前言 这是吴恩达机器学习笔记的第五篇&#xff0c…

第七十二天 漏洞发现-Web框架中间件联动GobyAfrogXrayAwvsVulmap

第72天 漏洞发现-Web框架中间件&联动&Goby&Afrog&Xray&Awvs&Vulmap 知识点&#xff1a; 1、Bup简单介绍&使用说明 2、Xray简单介绍&使用说明 3、AWWS简单介绍&使用说明 4、Goby简单介绍&使用说明 5、Afrog简单介绍&使用说明 6、…

【前端素材】推荐优质后台管理系统网页my-Task平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;通常由管理员使用。后台管理系统是一种用于管理和控制网站、应用程序或系统的管理界面。它通常被设计用来让网站或应用程序的管理员或运营人员管理内容、用户、数据以及其他相关功…

vulhub中JBoss 5.x/6.x 反序列化漏洞复现(CVE-2017-12149)

该漏洞为 Java反序列化错误类型&#xff0c;存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化&#xff0c;从而导致了漏洞。 漏洞复现 利用攻击进行漏洞利用yunxu1/jboss-_…

Tuning Language Models by Proxy

1、写作动机&#xff1a; 调整大语言模型已经变得越来越耗资源&#xff0c;或者在模型权重是私有的情况下是不可能的。作者引入了代理微调&#xff0c;这是一种轻量级的解码时算法&#xff0c;它在黑盒 大语言模型 之上运行&#xff0c;以达到直接微调模型的结果&#xff0c;但…

Postman: 前端必备工具还是后端独享利器

Postman 的使用场景&#xff1a;适用于前端和后端 Postman 是一个流行的 API 测试与开发工具。它被广泛地应用在前后端开发的过程中&#xff0c;但是很多人对于它的使用场景存在疑惑。那么&#xff0c;到底是前端用还是后端用呢&#xff1f;本文将从多个角度详细解答这个问题。…

如何优化阿里云幻兽帕鲁/Palworld的多人联机性能,并避免内存溢出导致的异常退出游戏?

优化阿里云幻兽帕鲁/Palworld的多人联机性能并避免内存溢出导致的异常退出游戏&#xff0c;可以采取以下几种方法&#xff1a; 选择合适的内存配置&#xff1a;由于幻兽帕鲁是一个对内存需求较高的游戏&#xff0c;建议选择至少16GB的内存。对于不同的玩家数量&#xff0c;可以…

AI时代编程新宠!如何让孩子成为未来的编程大师?

文章目录 一、了解编程的基础概念二、选择适合的编程工具三、激发孩子的兴趣四、注重基础能力的培养五、提供实践机会六、鼓励孩子与他人合作七、持续支持与鼓励《信息学奥赛一本通关》本书定位内容简介作者简介目录 随着科技的迅猛发展&#xff0c;编程已经从一种专业技能转变…

javaWebssh教师荣誉库管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh在线授课辅导系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0…

AI日报:人工智能使用和评估的关键任务

文章目录 总览成为循环中的人规范 将人情味应用于业务用例人工智能在各行业开始出现具体影响 通过人工辅助防止偏差、异常和扭曲数据人工智能原则HITL的关键 人工智能人类&#xff1a;走向无限 总览 在不断发展的人工智能领域&#xff0c;“环中人”&#xff08;HITL&#xff0…

卧式饲料搅拌机生产厂家:提升饲养效益

卧式饲料搅拌机生产厂家&#xff1a;选择适合设备&#xff0c;提升饲养效益 随着畜牧养殖业的发展&#xff0c;农民们对于饲料搅拌机的需求也高。饲料搅拌机的作用在于将不同种类和比例的饲料原料进行均匀混合&#xff0c;保证养殖获得营养均衡的饲料。而卧式饲料搅拌机因其结构…

【数据结构】深入探讨二叉树的遍历和分治思想(一)

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;数据结构 &#x1f525;该文章主要讲述二叉树的递归结构及分治算法的思想。 目录&#xff1a; &#x1f30d;前言&#xff1a;&#x1f30d;…

SpringBoot+Vue+MySQL:装修管理新架构探索

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

Vue开发实例(四)Element-UI部分组件使用方法

Element-UI的使用 一、Icon图标的使用1、用 i 标签使用图标 二、用 el-button 使用图标1、使用type定义样式2、使用plain定义样式3、使用round定义样式4、使用circle定义样式5、带图标和文字的按钮6、按钮禁用7、文字按钮8、按钮组9、加载中 三、Link 文字链接1、基础用法2、禁…

python的FastAPI两大核心组件,你了解多少

FastAPI 是一个用于构建 API 的现代、快速&#xff08;高性能&#xff09;的 web 框架&#xff0c;使用 Python 3.8 并基于标准的 Python 类型提示。 FastAPI 站在以下巨人的肩膀之上&#xff1a; Starlette 负责 web 部分。Pydantic 负责数据部分。 毕竟我们不是学习 Starl…

解决Win11突然WiFi消失问题

最近受到很多win11重启或者更新后导致WiFi消失的用户反馈。 初步分析原因&#xff1a;WiFi网卡可能受到天气变冷影响.Win11新更新对驱动存在bug导致。 解决办法&#xff1a; 1.选中桌面此电脑图标.鼠标右键-管理。 2.设备管理器-网络适配器-卸载所有网卡驱动&#xff08;注意&a…

Vue3速成

文章目录 day 11. 创建vue3工程3. 响应式数据4. 计算属性 day 25. watch 监视6. watchEffect7. 标签的ref属性8. 回顾TS中的接口_泛型_自定义类型 day 1 1. 创建vue3工程 相关代码如下&#xff1a; ## 创建vue工程 npm create vuelastest## 安装node_modules npm install //…

Ubuntu服务器fail2ban的使用

作用&#xff1a;限制ssh远程登录&#xff0c;防止被人爆破服务器&#xff0c;封禁登录ip 使用lastb命令可查看到登录失败的用户及ip&#xff0c;无时无刻的不在爆破服务器 目录 一、安装fail2ban 二&#xff0c;配置fail2ban封禁ip的规则 1&#xff0c;进入目录并创建ssh…

diskMirror-backEnd-spring-boot | diskMirror 后端服务器 SpringBoot 版本!

diskMirror-backEnd-spring-boot 开源技术栏 diskMirror 后端服务器 SpringBoot 版本! 此版本中拓展了 DiskMirrorBackEnd&#xff0c;是一个完全的SpringBoot项目&#xff01; 目录 diskMirror-backEnd-spring-boot 目录我如何使用&#xff1f; 部署与配置我如何使用其中的…

【LeetCode刷题】146. LRU 缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返回 -…