kubernetes学习-Service

news2025/1/6 23:38:04

kubernetes学习-Service

  • 1. Service说明
  • 2. 功能
  • 3.Service类型
    • 3.1 NodePort
      • 3.1.1 创建web-service.yaml
      • 3.1.2 创建web-pod.yaml
      • 3.1.3 部署
      • 3.1.4 验证
    • 3.2 ClusterIP
      • 3.2.1 创建web-clusterIp-service.yaml
      • 3.2.2 创建web-clusterIp-pod.yaml
      • 3.2.3 部署
      • 3.2.4 验证
    • 3.3 LoadBalancer
  • 4. Service代理模式
    • 4.1 iptables
    • 4.2 ipvs
  • 5. DNS
    • 5.1 创建busybox-service.yaml
    • 5.2 创建busybox-pod.yaml
    • 5.3 部署
    • 5.4 验证

1. Service说明

Service是Kubernetes中的一种资源对象,用于定义一组Pod的网络访问规则,它为Pod提供了一个稳定的统一访问入口,使得客户端可以始终使用同一个IP地址进行访问,避免了直接使用Pod IP地址导致的不稳定性。
在这里插入图片描述在这里插入图片描述

2. 功能

  • 负载均衡:当多个Pod提供服务时,Service通过负载均衡算法将请求分发到这些Pod,从而实现应用程序的负载均衡。

  • 服务发现:Service提供了一种服务发现机制,自动维护后端Pod IP的变化,确保客户端访问地址保持不变。

3.Service类型

3.1 NodePort

NodePort,在每个节点上启用一个端口来暴露服务,可以在集群外部访问。也会分配一个稳定内部集群IP地址。
访问地址:<任意NodeIP>:<NodePort>
端口范围:30000-32767
在这里插入图片描述

3.1.1 创建web-service.yaml

web-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  type: NodePort # 服务类型
  ports:
  - port: 80 # Service端口
    protocol: TCP # 协议
    targetPort: 80 # 容器端口(应用程序监听端口)
    nodePort: 32301
  selector:
    app: web # 指定关联Pod的标签

多端口Service定义,对于某些服务,需要公开多个端口,Service也需要配置多个端口定义,通过端口名称区分。
web-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  type: NodePort # 服务类型
  ports:
  - port: 80 # Service端口
    protocol: TCP # 协议
    targetPort: 80 # 容器端口(应用程序监听端口)
    nodePort: 32301
  - port: 443 # Service端口
    protocol: TCP # 协议
    targetPort: 443 # 容器端口(应用程序监听端口)
    nodePort: 32302
  selector:
    app: web # 指定关联Pod的标签

3.1.2 创建web-pod.yaml

web-pod.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: nginx:1.16
        name: nginx

3.1.3 部署

~]# kubectl apply -f web-pod.yaml 
deployment.apps/web created
~]# kubectl apply -f web-service.yaml 
service/web created   
~]# kubectl get services -o wide
NAME           TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE   SELECTOR
kubernetes     ClusterIP      10.96.0.1        <none>        443/TCP        27d   <none>
web            NodePort       10.104.219.112   <none>        80:32301/TCP   13s   app=web
~]# kubectl get pods
NAME                         READY   STATUS             RESTARTS       AGE
web-65655cd78-hsprm          1/1     Running            0              27m

3.1.4 验证

访问集群节点IP的映射端口
在这里插入图片描述

3.2 ClusterIP

ClusterIP,默认,分配一个稳定的IP地址,即VIP,只能在集群内部访问。
在这里插入图片描述

3.2.1 创建web-clusterIp-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: web-clusterip
spec:
  type: ClusterIP # 服务类型
  ports: 
  - port: 80 # Service端口
    protocol: TCP # 协议
    targetPort: 80 # 容器端口(应用程序监听端口)
  selector:
    app: web-clusterip # 指定关联Pod的标签

3.2.2 创建web-clusterIp-pod.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web-clusterip
  name: web-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-clusterip
  template:
    metadata:
      labels:
        app: web-clusterip
    spec:
      containers:
      - image: nginx:1.16
        name: nginx

3.2.3 部署

~]# kubectl apply -f web-clusterIp-service.yaml 
service/web-clusterip created
~]# kubectl apply -f web-clusterIp-pod.yaml 
deployment.apps/web-nginx created
~]# kubectl get pods
NAME                         READY   STATUS             RESTARTS       AGE
web-65655cd78-hsprm          1/1     Running            0              27m
web-nginx-6b59757964-9rd6v   1/1     Running            0              18s
~]# kubectl get service -o wide
NAME            TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE     SELECTOR
web             NodePort       10.104.219.112   <none>        80:32301/TCP   28m     app=web
web-clusterip   ClusterIP      10.97.209.118    <none>        80/TCP         6m28s   app=web-clusterip

3.2.4 验证

访问集群IP(10.97.209.118)的80端口,集群外无法访问。

~]# curl http://10.97.209.118
<!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>

3.3 LoadBalancer

LoadBalancer,外部,对外暴露应用,适用公有云。与NodePort类似,在每个节点上启用一个端口来暴露服务。除此之外,Kubernetes会请求底层云平台(例如阿里云、腾讯云、AWS等)上的负载均衡器,将每个Node([NodeIP]:[NodePort])作为后端添加进去。
在这里插入图片描述

4. Service代理模式

4.1 iptables

特点

  • 灵活,功能强大
  • 规则遍历匹配和更新,呈线性时延

在这里插入图片描述

4.2 ipvs

  • 工作在内核态,有更好的性能
  • 调度算法丰富:rr,wrr,lc,wlc,ip hash…
    在这里插入图片描述

5. DNS

CoreDNS:是一个DNS服务器,Kubernetes默认采用,以Pod部署在集群中,CoreDNS服务监视Kubernetes API,为每一个Service创建DNS记录用于域名解析。
ClusterIP A记录格式:<service-name>.<namespacename>.svc.cluster.local
示例:my-svc.my-namespace.svc.cluster.local
在这里插入图片描述

5.1 创建busybox-service.yaml

busybox-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: busybox-service
spec:
  type: NodePort # 服务类型
  ports: 
  - port: 80 # Service端口
    protocol: TCP # 协议
    targetPort: 80 # 容器端口(应用程序监听端口)
    nodePort: 32302
  selector:
    app: busybox # 指定关联Pod的标签

5.2 创建busybox-pod.yaml

busybox-pod.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox-sleep-deployment
  labels:
    app: busybox
spec:
  replicas: 1
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
      - name: busybox
        image: busybox
        command: ["/bin/sh", "-c", "sleep 300s"]

5.3 部署

~]# kubectl apply -f busybox-pod.yaml 
deployment.apps/busybox-sleep-deployment unchanged
]# kubectl apply -f busybox-service.yaml 
service/busybox-service created
~]# kubectl get pods -o wide
NAME                                        READY   STATUS         RESTARTS       AGE     IP              NODE      NOMINATED NODE   READINESS GATES
busybox-sleep-deployment-5bddd5fcfb-9tfql   1/1     Running        0              4m51s   10.244.184.58   node-02   <none>           <none>
~]# kubectl get services
NAME              TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
busybox-service   NodePort       10.104.240.39    <none>        80:32302/TCP   67s

5.4 验证

验证域名busybox-service.default.svc.cluster.local

~]# kubectl exec -it busybox-sleep-deployment-5bddd5fcfb-9tfql -- sh
/ # ls
bin    dev    etc    home   lib    lib64  proc   root   sys    tmp    usr    var
/ # nslookup busybox-service.default.svc.cluster.local
Server:         10.96.0.10
Address:        10.96.0.10:53
Name:   busybox-service.default.svc.cluster.local
Address: 10.104.240.39
/ # 

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

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

相关文章

滤波器的主要参数

为什么选择高阶&#xff1a; 滤波器的主要参数通常包括以下几个方面&#xff1a; 截止频率 (Cutoff Frequency)&#xff1a; 这是滤波器能够有效通过或抑制信号的频率点。对于低通滤波器&#xff0c;信号低于截止频率的部分会被通过&#xff0c;高于截止频率的部分会被衰减。高…

设计模式 创建型 单例模式(Singleton Pattern)与 常见技术框架应用 解析

单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;旨在确保某个类在应用程序的生命周期内只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。这种设计模式在需要控制资源访问、避免频繁创建和销毁对象的场景中尤为有用。 一、核心…

290-3U VPX i7 刀片计算机

一、产品概述 该产品是一款基于第三代Intel i7双核四线程的高性能3U VPX刀片式计算机。产品提供了多个高速PCIe总线接口&#xff0c;其中3个x4 PCIe 3.0接口&#xff0c;1个x4 PCIe 2.0接口。x4 PCIe 2.0接口可灵活配置为4个x1 PCIe接口&#xff0c;因此产品具有很强的扩展性&a…

【从零开始入门unity游戏开发之——C#篇41】C#迭代器(Iterator)——自定义类实现 foreach 操作

文章目录 前言一、什么是迭代器&#xff1f;二、标准迭代器的实现方法1、自定义一个类CustomList2、让CustomList继承IEnumerable接口3、再继承IEnumerator接口4、完善迭代器功能5、**foreach遍历的本质**&#xff1a;6、在Reset方法里把光标复原 三、用yield return语法糖实现…

win32汇编环境,对话框程序中通过资源显示bmp图像

;运行效果 ;win32汇编环境,对话框程序中通过资源显示bmp图像 ;通过资源的方式&#xff0c;会把图像固定在exe文件里&#xff0c;会变大。通过读取文件的方式&#xff0c;没有固定在exe文件里&#xff0c;也可以随时换图像文件&#xff0c;所以exe文件较小 ;直接抄进RadAsm可编译…

MATLAB画柱状图

一、代码 clear; clc; figure(position,[150,100,900,550])%确定图片的位置和大小&#xff0c;[x y width height] %准备数据 Y1[0.53,7.9,8.3;0.52,6.8,9.2;0.52,5.9,8.6;2.8,5.8,7.9;3.9,5.2,7.8;1.8,5.8,8.4]; % withoutNHC X11:6; %画出4组柱状图&#xff0c;宽度1 h1…

java 搭建一个springboot3.4.1项目 JDK21

环境准备 idea:2021 springboot:3.4.1 JDK:21 maven:3.6.3 新建项目 点击new->project->spring initializr 选择springboot版本 1.选择springboot版本&#xff0c;因为JDK版本是21因此对应springboot3.X Spring Boot 2.6.x&#xff1a;适用于JDK 8到17&#xff0c…

第R3周:RNN-心脏病预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文章目录 一、前言二、代码流程1、导入包&#xff0c;设置GPU2、导入数据3、数据处理4、构建RNN模型5、编译模型6、模型训练7、模型评估 电脑环境&#xff1a;…

40% 降本:多点 DMALL x StarRocks 的湖仓升级实战

小编导读&#xff1a; 多点 DMALL 成立于2015年&#xff0c;持续深耕零售业&#xff0c;为企业提供一站式全渠道数字零售解决方案 DMALL OS。作为 DMALL OS 数字化能力的技术底座&#xff0c;大数据平台历经多次迭代平稳支撑了公司 To B 业务的快速开展。随着国家产业升级和云原…

Docker 环境中搭建 Redis 哨兵模式集群的步骤与问题解决

在 Docker 环境中搭建 Redis 哨兵模式集群的步骤与问题解决 在 Redis 高可用架构中&#xff0c;哨兵模式&#xff08;Sentinel&#xff09;是确保 Redis 集群在出现故障时自动切换主节点的一种机制。通过使用 Redis 哨兵&#xff0c;我们可以实现 Redis 集群的监控、故障检测和…

华为消费级QLC SSD来了

近日&#xff0c;有关消息显示&#xff0c;华为的消费级SSD产品线&#xff0c;eKitStor Xtreme 200E系列&#xff0c;在韩国一家在线零售商处首次公开销售&#xff0c;引起了业界的广泛关注。 尽管华为已经涉足服务器级别的SSD制造多年&#xff0c;但直到今年6月才正式推出面向…

StableDiffusionWebUI本地部署指南(WIN)

最近接手了一个需要使用 Stable Diffusion 的项目&#xff0c;要重新部署一套 SD 环境。这跟我之前的SD部署又不太一样&#xff0c;部署过程中遇到一些问题&#xff0c;总结出一个比较完美的安装方案&#xff0c;在这里和大家分享一下。 项目地址&#xff1a;https://github.c…

运动控制探针功能详细介绍(CODESYS+SV63N伺服)

汇川AM400PLC和禾川X3E伺服EtherCAT通信 汇川AM400PLC和禾川X3E伺服EtherCAT通信_汇川ethercat通信-CSDN博客文章浏览阅读1.2k次。本文详细介绍了如何使用汇川AM400PLC通过EtherCAT总线与禾川X3E伺服进行通信。包括XML硬件描述文件的下载与安装,EtherCAT总线的启用,从站添加…

ELK日志平台搭建 (最新版)

一、安装 JDK 1. 下载 JDK 21 RPM 包 wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm2. 安装 JDK 21,使用 rpm 命令安装下载的 RPM 包&#xff1a; sudo rpm -ivh jdk-21_linux-x64_bin.rpm3. 配置环境变量 编辑 /etc/profile 文件以配置 JAVA_HO…

pygame飞机大战

飞机大战 1.main类2.配置类3.游戏主类4.游戏资源类5.资源下载6.游戏效果 1.main类 启动游戏。 from MainWindow import MainWindow if __name__ __main__:appMainWindow()app.run()2.配置类 该类主要存放游戏的各种设置参数。 #窗口尺寸 import random import pygame WIND…

应用架构模式

设计模式 设计模式是指根据通用需求来设计解决方案的模板或蓝图&#xff0c;使用设计模式能够更加有效地解决设计过程中的常见问题。设计模式针对不同的问题域有不同的内涵&#xff0c;主要涉及业务、架构、程序设计等问题域&#xff0c;本文主要讨论架构设计模式。 业务设计模…

el-input输入框需要支持多输入,最后传输给后台的字段值以逗号分割

需求&#xff1a;一个输入框字段需要支持多次输入&#xff0c;最后传输给后台的字段值以逗号分割 解决方案&#xff1a;结合了el-tag组件的动态编辑标签 那块的代码 //子组件 <template><div class"input-multiple-box" idinputMultipleBox><div>…

【新教程】华为昇腾NPU的pytorch环境搭建

1 硬件配置 使用学校的集群&#xff0c;相关配置如下&#xff1a; CPU&#xff1a;鲲鹏920 NPU&#xff1a;昇腾910B 操作系统&#xff1a;openEuler 22.03 2 安装版本 根据昇腾官方gitee上的信息&#xff0c;Pytoch 2.1.0是长期支持版本&#xff0c;因此选择安装这一版本&a…

游戏引擎学习第72天

无论如何&#xff0c;我们今天有一些调试工作要做&#xff0c;因为昨天做了一些修改&#xff0c;结果没有时间进行调试和处理。我们知道自己还有一些需要解决的问题&#xff0c;却没有及时完成&#xff0c;所以我们想继续进行这些调试。对我们来说&#xff0c;拖延调试工作总是…

信号的产生、处理

一、信号的概念 信号是linux系统提供的一种&#xff0c;向指定进程发送特定事件的方式。收到信号的进程&#xff0c;要对信号做识别和处理。信号的产生是异步的&#xff0c;进程在工作过程中随时可能收到信号。 信号的种类分为以下这么多种&#xff08;用指令kill -l查看&…