K8s(Kubernetes)学习(五)——Service:ClusterIP、NodePort、LoadBalancer、 ExternalName

第五章 Service

  • 什么是 Service
  • 为什么需要 Service
  • Service 特性
  • Service 与 Pod 关联
  • Service type 类型
  • 如何使用 Service
  • 多端口配置

1 什么是 Service

1.1 定义

官网地址: https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/

将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法。

通俗定义: Service 用来为 pod 提供网络服务的一种方式。

1.2 为什么需要 Service

问题: 如果一组 Pod(称为“后端”)为集群内的其他 Pod(称为“前端”)提供功能, 那么前端如何找出并跟踪要连接的 IP 地址,以便前端可以使用提供工作负载的后端部分?

image-20230307133342270

如果这是一个图片处理后端,它运行了 3 个副本。这些副本是可互换的 —— 前端不需要关心它们调用了哪个后端副本。 然而组成这一组后端程序的 Pod 实际上可能会发生变化, 前端客户端不应该也没必要知道,而且也不需要跟踪这一组后端的状态。Service 定义的抽象能够解耦这种关联

2 特性

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

3 Service 和 Pod 关系

在这里插入图片描述

4 使用 Service

apiVersion: apps/v1
kind: Deployment
metadata:name: nginxlabels:app: nginx
spec:replicas: 1template:metadata:name: nginxlabels:app: nginxspec:containers:- name: nginximage: nginx:1.19imagePullPolicy: IfNotPresentports:- containerPort: 80restartPolicy: Alwaysselector:matchLabels:app: nginx
---
apiVersion: v1
kind: Service
metadata:name: nginx
spec:selector:app: nginxports:- port: 8080 #service 端口targetPort: 80 #容器端口nodePort: 31001 #node 节点端口 固定在 30000-32767 之间type: NodePort

注意:节点端口固定在 30000-32767 之间

5 多端口

apiVersion: apps/v1
kind: Deployment
metadata:name: nginxlabels:app: nginx
spec:replicas: 1template:metadata:name: nginxlabels:app: nginxspec:containers:- name: nginximage: nginx:1.19imagePullPolicy: IfNotPresentports:- containerPort: 80restartPolicy: Alwaysselector:matchLabels:app: nginx
---
apiVersion: v1
kind: Service
metadata:name: nginx
spec:selector:app: nginxports:- port: 8080 #service 端口name: writetargetPort: 80 #容器端口nodePort: 31001 #node 节点端口 固定在 30000-32767 之间- port: 8081name: readtargetPort: 80nodePort: 31002type: NodePort

6 类型 type

https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/

对一些应用的某些部分(如前端),可能希望将其暴露给 Kubernetes 集群外部的 IP 地址。

Kubernetes ServiceTypes 允许指定你所需要的 Service 类型。

  • ClusterIP:在集群内部暴露 Service,只能被集群内部的其他对象访问,通常用于内部服务发现,不会向集群外部暴露。
  • NodePort:将 Service 暴露在 Node 的某个端口上,从而可以通过 Node 的 IP 地址和端口号来访问 Service,通常用于开发和测试环境。
  • LoadBalancer:通过云服务商提供的负载均衡器来将 Service 暴露到公网上,使得外部用户可以访问 Service。
  • ExternalName:将 Service 映射到一个 DNS 名称上,从而可以通过 DNS 名称来访问 Service,通常用于访问外部服务。

6.1 ClusterIP 类型

  • 这是最常用的 Service 类型之一。在集群内部创建一个虚拟 IP 地址,它可以被其他在同一集群内的 Pod 访问,但不能被集群外部的请求所访问。这种类型的服务通常用于内部服务的暴露,例如数据库或者缓存服务。比如在一个 Web 应用中,你可能需要连接到一个数据库,但是这个数据库并不需要在应用之外暴露。这时候,你可以使用 ClusterIP 类型的 Service,让应用可以访问到数据库。

6.2 NodePort 类型

  • 这种类型的 Service 将会创建一个端口,并绑定到每个集群节点上,从而允许外部流量访问 Service。这个类型通常用于公共服务的暴露,例如 Web 应用或者 API。比如你需要在集群外部访问到一个运行在集群中的 Web 应用,你就可以创建一个 NodePort 类型的 Service,通过指定 Service 的 nodePort 字段,来将 Service 暴露给集群外部。

  • 如果你将 type 字段设置为 NodePort,则 Kubernetes 控制平面将在 --service-node-port-range 标志指定的范围内分配端口(默认值:30000-32767)。

在这里插入图片描述

6.3 LoadBalancer 类型

  • 这种类型的 Service 类似于 NodePort,但是会在云厂商中创建一个负载均衡器。这个类型通常用于在云平台上部署应用。云平台的负载均衡器将流量分发到集群中的节点。这个类型的 Service 只能在云平台上使用,并且需要云厂商提供支持。

6.4 ExternalName 类型

  • 这种类型的 Service 允许 Service 到任何需要访问的 CNAME DNS 条目的转发。与其它类型的 Service 不同,它并不会代理请求到任何 Pod。相反,它将请求转发到配置的外部地址。这种类型的 Service 通常用于将服务代理到集群外部的其他服务。比如你有一个运行在外部网络上的服务,你希望在 Kubernetes 集群中使用该服务,这时候你可以创建一个 ExternalName 类型的 Service,将服务的 DNS 解析到 Kubernetes 集群中。

7 内部通信

7.1 创建 pod

apiVersion: apps/v1
kind: Deployment
metadata:name: mysqllabels:app: mysql
spec:selector:matchLabels:app: mysqlreplicas: 1template:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql/mysql-server:8.0env:- name: MYSQL_ROOT_PASSWORDvalue: rootports:- name: mysqlcontainerPort: 3306
---
apiVersion: v1
kind: Service
metadata:name: mysql
spec:selector:app: mysqlports:- name: mysqlport: 3306targetPort: 3306type: ClusterIP
apiVersion: apps/v1
kind: Deployment
metadata:name: nginxlabels:app: nginx
spec:selector:matchLabels:app: nginxreplicas: 1template:metadata:labels:app: nginxspec:hostNetwork: truecontainers:- name: nginximage: nginx:latest#command: ["/bin/sh", "-c"]#args:#- apt-get update && apt-get install -y mysql-client && nginx -g 'daemon off;'ports:- name: httpcontainerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginx
spec:selector:app: nginxports:- name: httpport: 8081targetPort: 80type: ClusterIP

7.2 相互访问

# 进入 nginx 访问mysql
$ mysql -h mysql -uroot -ppassword
# 注意:这里的 mysql 是 MySQL Service 的名称,而不是 Pod 的名称。

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

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

相关文章

uniapp视频播放功能

UniApp提供了多种视频播放组件,包括视频播放器(video)、多媒体组件(media)、WebView(内置Video标签)等。其中,video和media组件是最常用的。 video组件 video组件是基于HTML5 vide…

iOS-砸壳篇(两种砸壳方式)

CrackerXI砸壳呢,当时你要是使用 frida-ios-dump 也是可以的; https://github.com/AloneMonkey/frida-ios-dump frida-ios-dump: 代码中需要更改的:手机中的内网ip 密码 等 最后放到我的砸壳路径里: python dump.py -l查看应用…

libevent数据结构——TAILQ_结构体

TAILQ_结构体 TAILQ_结构体在文件event2/event_struct.h和文件event2/keyvalq_struct.h中都有定义,并且他们的定义都是一样的,定义了TAILQ_ENTRY、TAILQ_HEAD结构体: #ifndef TAILQ_ENTRY #define EVENT_DEFINED_TQENTRY_ #define TAILQ_EN…

matlab根轨迹绘制

绘制根轨迹目的就是改变系统的闭环极点,使得系统由不稳定变为稳定或者使得稳定的系统变得更加稳定。 在使用PID控制器的时候,首先要确定的参数是Kp,画成框图的形式如下: 也就是想要知道Kp对系统性能有哪些影响,此时就…

展会预告 | 图扑邀您共聚 IOTE 国际物联网展·深圳站

参展时间:9 月 20 日- 22 日 图扑展位:9 号馆 9B 35-1 参展地址:深圳国际会展中心(宝安新馆) IOTE 2023 第二十届国际物联网展深圳站,将于 9 月 20 日- 22 日在深圳国际会展中心(宝安&#xff0…

【面试经典150 | 双指针】判断子序列

文章目录 写在前面Tag题目来源题目解题解题思路方法一:双指针方法二:动态规划 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对…

语言建模的发展阶段以及大规模语言模型的背景介绍

语言本质上是一个由语法规则控制的复杂、精密的人类表达系统,开发能够理解和掌握语言的AI 算法是一个重大挑战。作为一种主要方法,语言建模在过去两十年中已被广泛研究,从统计语言模型发展到神经语言模型,用于语言理解和生成。从技…

9.18 QT作业

mainwindow.h QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWindow();signals:void jump(); //自定义跳转信号函数private slots:vo…

Vue基础之模板语法介绍

前言 上篇我分享了关于Vue的入门,简单的入了个门。本篇文章将要分享的内容为Vue的模板语法。 一、插值 1.1、文本 1.2、html 1.3、属性 1.4、class、style绑定 1.5、表达式 在Vue的模板语法中,插值是一种常用的方式来动态地将数据渲染到视图中。Vue使用双…

Nano 编辑器中,怎样保存和退出

使用git 修改提交记录时,使用命令: git commit --amend 弹出了nano编辑器,第一次使用的时候不知道怎么保存退出,现在记录下: 1.修改完毕后使用Ctrl x,然后会弹出 点击Y后,界面会退回到如下 这时候点击E…

使用HTTP爬虫ip中的常见误区与解决方法

在使用HTTP爬虫进行网页抓取时,涉及到IP地址的处理,可能会存在一些常见的误区。以下是一些常见误区及解决方法: 1.使用个人IP进行大规模爬取:如果你使用个人住宅IP进行大规模爬取,可能会被目标网站视为恶意攻击&#x…

docker安装postgresql

docker安装postgresql 拉取镜像 sudo docker search postgres sudo docker pull postgres:12.7 sudo docker image list创建并运行容器 sudo docker run \ --name postgres12 \ -p 5433:5432 \ -e POSTGRES_USERpostgres \ -e POSTGRES_PASSWORD123456 \ -v /data/mydocker/…

CSS动效合集之实现气泡发散动画

前言 👏CSS动效合集之实现气泡发散动画,速速来Get吧~ 🥇文末分享源代码。记得点赞关注收藏! 1.实现效果 2.实现步骤 定义一个数组bubbles,用来存储气泡列表的基本新,w表示宽高,x表示绝对定位…

用Python判断是否为闰年并计算生肖年

1 问题 润平年以及生肖是新的一年到来我们应该了解的信息。那么如何利用python程序计算快速计算该年为什么年? 2 方法 利用if条件判断语句实现。 代码清单 1 year eval(input(请输入咨询的年份:))if (year % 4 0 and year %100 ! 0) or year % 400 0: print(…

win11将visual studio 2022的调试控制台改为windows terminal

一、前言 默认的调试控制台太丑了,字体也没有好看的,还是更喜欢windows terminal 二、修改 2.1 修改之前 2.2 修改步骤 打开windows terminal点这个向下的标志 选择settings按照下图1, 2, 3步骤依次操作即可 2.3 修改之后 总结 漂亮很多了

Layui快速入门之第十四节 分页

目录 一:基本用法 API 渲染 属性 二:自定义主题 三:自定义文本 四:自定义排版 五:完整显示 一:基本用法 分页组件 laypage 提供了前端的分页逻辑,使得我们可以很灵活处理不同量级的数…

星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞

系列文章目录 星际争霸之小霸王之小蜜蜂(十二)--猫有九条命 星际争霸之小霸王之小蜜蜂(十一)--杀杀杀 星际争霸之小霸王之小蜜蜂(十)--鼠道 星际争霸之小霸王之小蜜蜂(九)--狂鼠之…

STM32 ADC介绍和应用

目录 1.ADC是什么? 2.ADC的性能指标 3.ADC特性 4.ADC通道 5.ADC转换顺序 6.ADC触发方式 7.ADC转化时间 8.ADC转化模式 扫描模式 单次转换/连续转换 9.ADC实验 使用ADC读取烟雾传感器的值 代码实现思路: 1.ADC是什么? 全称&#…

buuctf web [极客大挑战 2019]Secret File

纯网页,看一下源码。 这一块源码中有个隐藏的超链接,点击后跳转到了新页面。 新页面的源码里,也有一处可以跳转的超链接。 点进新页面啥也没有了。 单看网页,什么也没有,尝试用burp抓包试试。 在/Archive_room.php跳…

【C刷题训练营】第四讲(打好基础很重要)

前言: 大家好,这是c语言刷题训练营的第四讲,打好基础便于对c语言语法与算法思维的提高,感谢你的来访与支持! 💥🎈个人主页:​​​​​​Dream_Chaser~ 🎈💥 ✨✨刷题专栏…