【服务发现--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: webport: 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.250NotReadyAddresses:  <none>Ports:Name  Port  Protocol----  ----  --------web   80    TCPEvents:  <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: ExternalNameexternalName: www.lan-he.com.cn

5.2.2 创建service

[root@k8s-master ~]# kubectl create -f test-svc-external-domian.yamlservice/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: 使用云服务商(阿里云、腾讯云等)提供的负载均衡器服务

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

校园微社区微信小程序源码/二手交易/兼职交友微信小程序源码

云开发校园微社区微信小程序开源源码&#xff0c;这是一款云开发校园微社区-二手交易_兼职_交友_项目微信小程序开源源码&#xff0c;可以给你提供快捷方便的校园生活&#xff0c;有很多有趣实用的板块和功能&#xff0c;如&#xff1a;闲置交易、表白交友、疑问互答、任务兼职…

C++ //练习 8.9 使用你为8.1.2节(第281页)第一个练习所编写的函数打印一个istringstream对象的内容。

C Primer&#xff08;第5版&#xff09; 练习 8.9 练习 8.9 使用你为8.1.2节&#xff08;第281页&#xff09;第一个练习所编写的函数打印一个istringstream对象的内容。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /*****…

NATS学习笔记(一)

NATS是什么&#xff1f; NATS是一个开源的、轻量级、高性能的消息传递系统&#xff0c;它基于发布/订阅模式&#xff0c;由Apcera公司开发和维护。 NATS的功能 发布/订阅&#xff1a;NATS的核心是一个发布/订阅消息传递系统&#xff0c;允许消息生产者发布消息到特定的主题…

制作ai语音助手

目录 一、总体介绍 二、唤醒 http://t.csdnimg.cn/3mf18 三、将语音唤醒和aiui结合 &#xff08;1&#xff09;项目合并 &#xff08;2&#xff09;修改CMakeList.txt &#xff08;3&#xff09;demo代码修改 1.添加库 2.在demo中添加唤醒功能的代码 3.尝试运行代码&am…

【数据结构和算法初阶(c语言)】数据结构前言,初识数据结构(给你一个选择学习数据结构和算法的理由)

1.何为数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的 数据元素的集合。本质来讲就是在内存中去管理数据方式比如我们的增删查改。在内存中管理数据的方式有很多种&#xff08;比如数组结构、链式结构、树型结…

基于Pytorch的猫狗图片分类【深度学习CNN】

猫狗分类来源于Kaggle上的一个入门竞赛——Dogs vs Cats。为了加深对CNN的理解&#xff0c;基于Pytorch复现了LeNet,AlexNet,ResNet等经典CNN模型&#xff0c;源代码放在GitHub上&#xff0c;地址传送点击此处。项目大纲如下&#xff1a; 文章目录 一、问题描述二、数据集处理…

智能SQL生成:后端技术与LLM的完美结合

文章目录 引言一、什么是大模型二、为什么选择LLM三、开发技术说明四、系统架构说明五、编码实战1. Maven2. 讯飞大模型配置类3. LLM相关的封装4. 编写LLM的service5. 编写controller6. 运行测试 六、总结 引言 本篇文章主要是关于实现一个类似Chat2DB的根据自然语言生成SQL的…

新改进!基于改进粒子群算法的微网/综合能源系统多目标优化调度程序代码!

适用平台&#xff1a;MatlabYalmipCplex 程序提出了一种综合考虑微电网系统运行成本和环境保护成本的并网模式下微电网多目标优化调度模型&#xff0c;采用改进的粒子群算法对优化模型进行求解。程序算例丰富、注释清晰、干货满满&#xff0c;可扩展性和创新性很高&#xff01…

readproc.h

Ubuntu22.04系统中 编译自己写的程序的时候&#xff0c;报错&#xff0c;显示找不到readproc.h文件&#xff0c;通过安装libprocps-dev解决 sudo apt install libprocps-dev

c#高级-正则表达式

正则表达式是由普通字符和元字符&#xff08;特殊符号&#xff09;组成的文字形式 应用场景 1.用于验证输入的邮箱是否合法。 2.用于验证输入的电话号码是否合法。 3.用于验证输入的身份证号码是否合法。等等 正则表达式常用的限定符总结&#xff1a; 几种常用的正则简写表达式…

女生常用的社交app软件有哪些?分享女生用的最多的社交软件

随着科技的迅猛发展&#xff0c;社交软件也日益多样化。除了常见的社交平台&#xff0c;一些全新的社交软件如雨后春笋般涌现&#xff0c;为用户带来了更多元、更有趣的社交体验。这里为大家介绍 5 款女生用的最多的社交软件&#xff0c;它们分别是丛丛、青藤之恋、meetu、小奢…

【Node.js】自动生成 API 文档

目录 1、直接使用swagger-ui-express 2、配合swagger-jsdoc 如何在Node.js项目中使用 Swagger 来自动生成 API接口文档&#xff0c;使用生成方式有很多种。本文基于swagger-jsdocswagger-ui-express快速实现 1、直接使用swagger-ui-express // 方便来浏览和测试api npm i sw…

分布式知识整理

分布式锁 以商场系统超卖现象举例 超卖现象一 现象&#xff1a; 商品卖出数量超出了库存数量。 产生原因&#xff1a; 扣减库存的动作在程序中进行&#xff0c;在程序中计算剩余库存&#xff0c;在并发场景下&#xff0c;导致库存计算错误。 代码复现 es.shutdown(); cycl…

二分算法(c++版)

二分的本质是什么&#xff1f; 很多人会认为单调性是二分的本质&#xff0c;但其实其本质并非单调性&#xff0c;只是说&#xff0c;有单调性的可以进行二分&#xff0c;但是有些题目没有单调性我们也可以进行二分。其本质其实是一个边界问题&#xff0c;给定一个条件&#xf…

2.WEB渗透测试-前置基础知识-web基础知识和操作系统

web基础知识 1.http协议 超文本传输协议是互联网上应用最广泛的一种网络协议。所有www文件都必须遵守的一个标准&#xff0c;是以 ASCII 码传输&#xff0c;建立在 TCP/IP 协议之上的应用层规范&#xff0c;通俗点说就是一种固定的通讯规则。 2、网络的三种架构及特点 网络应…

【C++STL】迭代器分类 失效问题

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

堆排序、快速排序和归并排序

堆排序、快速排序和归并排序是所有排序中最重要的三个排序&#xff0c;也是难度最大的三个排序&#xff1b;所以本文单独拿这三个排序来讲解 目录 一、堆排序 1.建堆 2.堆排序 二、快速排序 1.思想解析 2.Hoare版找基准 3.挖坑法找基准 4.快速排序的优化 5.快速排序非…

自定义神经网络二之模型训练推理

文章目录 前言模型概念模型是什么&#xff1f;模型参数有哪些神经网络参数案例 为什么要生成模型模型的大小什么是大模型 模型的训练和推理模型训练训练概念训练过程训练过程中的一些概念 模型推理推理概念推理过程 总结 前言 自定义神经网络一之Tensor和神经网络 通过上一篇…

IOBR2 更新(学习自备)

IOBR查看其收录的相关基因集(自备)_肿瘤 tme特征 iobr-CSDN博客 IOBR2&#xff1a;多维度解析肿瘤微环境 - 知乎 (zhihu.com) 学习手册&#xff1a;https://iobr.github.io/book/ &#xff08;里面有详细教程&#xff09; 系统综合的分析工具&#xff08;Immuno-Oncology Bi…

学习python的第7天,她不再开放她的听歌榜单

我下午登录上小号&#xff0c;打开聊天消息看到了她的回复&#xff0c;我很开心兴奋&#xff0c;可是她不再开放她的听歌榜单了&#xff0c;我感觉得到&#xff0c;我要失恋了。 “因为当年电视上看没有王菲版本的” “行”。 “那你以后还会开放听歌榜单吗&#xff1f;”我…