【Kubernetes】Service 类型

news2024/11/24 14:29:27

Service 类型

  • 1.NodePort
  • 2.ClusterlP
  • 3.LoadBalance
  • 4.ExternalName

在《Service 概念与实战》一文中,Service 的发布使用的是 NodePort 类型。除此之外,Service 的发布还支持 ClusterlPLoadBalancerExternalName 这 3 种类型。

在这里插入图片描述

1.NodePort

在把 Service 的 type 字段设置为 NodePort 时,Kubernetes 将在每个节点上随机分配一个端口作为外部用户访问的入口(该端口号的默认范围是 30000 - 32767)。该端口允许外部用户访问集群内部的 Pod 应用。如果用户想指定 30000 - 32767 内某个具体的端口,则需要增加一个 nodePort 字段。

在这里插入图片描述

在以下 YAML 文件中,使用 nodePort 字段指定了一个自定义的端口号 31234

apiVersion: v1
kind: Service
metadata:
  name: service-demo2
  namespace: default
spec:
  # 这里使用 NodePort 类型的 Service 将应用程序暴露给外部
  type: NodePort 
  ports:
  - name: http
  	# 为方便起见,一般将 targetport 字段的值设置为与 port 字段相同的值
    port: 80
    targetPort: 80
    # 可选字段,自定义端口号
	nodePort: 31234
    protocol: TCP
  # 定义标签选择器,将服务 Service 与匹配便签的一组 Pod 关联起来
  selector:     
    app: nginx
端口类型
说明
nodePort外部机器可访问的端口,一般为 node 机器上开放的端口。nodePort 是 kubernetes 提供给集群外部客户访问 Service 入口的一种方式。
portKubernetes 中的服务之间访问的端口,是提供给集群内部客户访问 Service 的入口。例如,尽管 MySQL 容器暴露了 3306 端口,但是集群内其他容器需要通过 3306 端口访问该服务,外部机器不能访问 MySQL 服务,因为没有配置 nodePort 类型。
targetPorttargetPort 是 Pod 上的端口,容器的端口(最根本的端口入口),与制作容器时暴露的端口一致(DockerFile 中 EXPOSE),例如 docker.io 官方的 nginx 暴露的是 80 端口。从 portnodePort 上到来的数据最终经过 kube-proxy 流入到后端 Pod 的 targetPort 上进入容器。
containerPortcontainerPort 是在 Pod 控制器中定义的、Pod 中的容器需要暴露的端口。targetPortcontainerPort 必须一致。

在这里插入图片描述

2.ClusterlP

这是 Service 默认的发布类型。它将在集群内部分配一个可以访问的虚拟 IP 地址,通过该地址暴露服务。因此,这种类型的 Service 只能够实现 同一个集群内部应用之间的相互访问

在这里插入图片描述

下面来演示 ClusterIP 的使用。

通过 Deployment 创建应用的部署描述文件 service-clusterip1.yaml,并在其中输入以下内容。

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

使用 kubectl apply 命令创建 Deployment。

kubectl apply -f service-clusterip1.yaml

创建 Service 的描述文件 service-clusterip2.yaml,并在其中输入以下内容。

apiVersion: v1
kind: Service
metadata:
  name: service-clusterip
  namespace: default
spec:
  ports:
  - name: http
    port: 1234
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx

这里没有指定 Service 的发布类型,默认就是 ClusterIP。同时这里将容器中的 80 端口暴露成了 1234 端口。

🚀 也可以使用 kubectl expose deployment my-deployment --port=1234 --target-port=80 --name=my-service 命令暴露应用。在这个例子中,my-deployment 是 Deployment 的名称,my-service 是 Service 的名称,--port=1234 是 Service 的端口,--target-port=80 是 Deployment 内部容器的端口。

使用 kubectl apply 命令创建 Service。

kubectl apply -f service-clusterip2.yaml

查看 Pod、Service 和 Endpoint 的详细信息。

kubectl get pod,svc,ep -o wide

输出的信息如下:

在这里插入图片描述

通过 Cluster IP 地址访问应用,将返回 Nginx 的首页。

curl 10.96.206.202:1234

在这里插入图片描述

3.LoadBalance

如果要使用外部的负载均衡器来访问应用(如 Google Cloud、AWS 和 OpenStack 等),则可以通过使用 LoadBalancer 类型的 Service 将 Kubernetes 集群中的 IP 地址和端口号自动加入公有云的 LoadBalancer 中,从而异步地实现负载均衡。

在这里插入图片描述
在以下 YAML 示例文件中,使用阿里云作为 Kubernetes 集群的外部负载均衡器。

apiVersion: v1
kind: Service
metadata:
  name: service-loadbalancer
  labels:
    app: service-loadbalancer
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: main-port
  selector:
    app: service-loadbalancer
  type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: alicloud-controller-manager
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: alicloud-controller-manager
    spec:
      containers:
      - image: collenzhao/alicloud-controller-manager
        name: alicloud-controller-manager
        env:
          - name: ACCESS_KEY_ID
            value: 你的阿里云 ACCESS_KEY_ID
          - name: ACCESS_KEY_SECRET
            value: 你的阿里云ACCESS_KEY_SECRET

在这里插入图片描述

4.ExternalName

ExternalName 类型的 Service 可以将一个已经存在的 Service 映射到外部的 DNS 服务,而达到通过使用外部 DNS 服务解析服务应用的目的。
在这里插入图片描述
下面是 Kubernetes 官方提供的一个示例。

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: prod
spec:
  type: ExternalName
  externalName: my.database.example.com

🚀 在查找主机 my-service.prod.svc.cluster.local 时,Kubernetes 集群的 DNS 服务将返回 my.database.example.com

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

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

相关文章

基于STM32开发的智能门铃系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化按钮与蜂鸣器控制显示与远程通知Wi-Fi通信应用场景 家庭智能门铃办公室访客通知常见问题及解决方案 常见问题解决方案结论 1. 引言 智能门铃系统通过集成按钮、蜂鸣器、显示屏、W…

HTML补充——表格表单

一、表格 1、在现实生活中,我们经常需要使用表格来表示一些格式化数据:课程表、人名表、成绩单 同样在网页中我们也需要使用表格,我们通过table标签创建表格。 2、在table标签中使用tr表示表格中的一行,有几个tr就有几行&#xff…

prometheus数据如何清理

1. 停止prometheus服务 2. 进到prometheus数据目录 3. 删除数据 3.1 删除持久化的数据块 Prometheus 将数据分块存储,每个块对应一个时间段。你可以通过查看目录中的时间戳来找到需要删除的数据块。 每个块的目录名是一个时间戳范围,例如 16094592000…

单片机在线升级架构(bootloader+app)

1、架构(bootloaderapp) 在一定的时间内如果没有程序需要更新则自动跳转到app地址执行用户程序 内部flash 512K bootloader 跑裸机 48k 主要实现USB升级和eeprom标志位升级 app 跑freeRtos 464K 程序的基本功能,升级时软件复位开始执行bootloader升级…

互斥锁以及进程间通信

写线程 ---写资源 可以写数据 的条件 1.开始时 ,buf空的 2.读线程 读完了 读线程 //buf充当读资源 //1.一开始,buf中没有数据可读的 1.写线程结束 信号量的机制 1.信号量 ----来描述 可使用的资源的个数 2.p操作 表示 使用这个资源 资…

毕业生实习与就业管理系统的设计与实现

TOC springboot297毕业生实习与就业管理系统的设计与实现 绪论 1.1 研究背景 现在大家正处于互联网加的时代,这个时代它就是一个信息内容无比丰富,信息处理与管理变得越加高效的网络化的时代,这个时代让大家的生活不仅变得更加地便利化&a…

保存数据至后台表

保存数据至后台表-供大数据平台使用-JOB程序 *&---------------------------------------------------------------------* *&程序名称 :ZBD_JOB_001 *&程序描述 : 保存数据至后台表-供大数据平台使用-JOB程序 *…

[Linux] 什么是 Shell?

一、什么是 shell ? shell在英语中的意思就是外壳,所以我们习惯称shell程序为壳程序。那为什么又会被叫做壳程序呢?那是因为shell程序是在内核上面的,属于操作系统的外壳部分,因此我们就称之为壳程序(shell)。 在 Linux 中&#…

增材制造正在加速赋能模具产业转型升级

模具,作为制造业的基石,正随着经济的蓬勃发展与产业的深度转型而面临更高要求。特别是注塑模具的冷却系统,传统工艺在面对随形冷却水路时显得力不从心,导致冷却效率无法进一步提升。而3D打印技术的崛起,则为模具领域开…

财务会计与管理会计(七)

文章目录 电商快递费用计算IF、VLOOKUP函数的应用 交费分布统计表SUMPRODUCT函数的应用 考勤签到统计系统OFFSET、MATCH函数的应用 出入库余额自动核算系统SUMPRODUCT、LOOKUP函数的应用 分段收费的典型案例VLOOKUP函数、MIN函数、MAX函数的应用 全额累进与超额累进计算提成全额…

《走走停停》,观后感

他这辈子看起来,好像就不是很成功。但是我们都很怀念这个人。 我们的文化太过强调永远,并把“永远”和“成功”牢牢捆绑了起来。 比如你开了一家咖啡店,这家店给你带来了很多快乐。但后来成本变高了,经营压力也变大了&#xff0…

求个位数(c语言)

1./描述 //给你一个数,让他进行巴啦啦能量,沙鲁沙鲁,小魔仙大变身,如果进行变身的数不满足条件的话,就继续让他变身。。。直到满足条件为止。 //巴啦啦能量,沙鲁沙鲁,小魔仙大变身:对…

2024/8/15 英语每日一段

A new Google update will make it simpler to request the removal of fake explicit images, as public figures, teachers and ordinary people increasingly contend with targeted abuse in the form of “deepfakes,” or realistic-looking images made with AI. While …

C# 学习笔记17:上位机助手_页面生成多控件滚动效果_保存与加载控件文本到文件_多字符串发送界面

今日继续完善更新我的上位机助手,这次完善多字符串发送的部分: 目前上位机助手支持以下功能: 1、 普通的16进制\ASCLL显示收发 2、 全页更新HEX显示(会自动断串口) 3、 日志辅助显示报错 4、 必要的清除日志区、接…

Hbase图形化界面

分享一个好用的hbase图形化界面 安装包:链接: https://pan.baidu.com/s/11Y2cDlme-P2xe--pYqy6MQ?pwdguag 提取码: guag 1、上传项目到linux 2、修改数据库配置信息 application-druid.yml 修改url、username、password为数据库连接信息 3、创建数据库(注意字符集…

display:flex布局,最简单的案例

1. 左右贴边 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>#parent{width: 800px;background: red;height: 200px;display: flex;justify-content: space-between…

vscode 远程免密登录

Windows R 输入 cmd在命令行终端中输入 ssh-keygen 一直回车、确定 生成秘钥 3. C:\用户\xxx.ssh 拷贝公钥内容 id_rsa.pub 4. 在虚拟机~/.ssh/ 下创建文件touch authorized_keys,拷贝公钥内容 id_rsa.pub粘贴到authorized_keys里即可。

某市-2024【网安·理论】初赛-web1-扫雷-wp

进来是个简单的扫雷 看源码是纯js写的 看了下主要格子之类的生成逻辑在jms.js里 其中flag的输出条件也包含在jms.js 格式化了一下 看特征是base64了&#xff0c;然后又经过了别的操作&#xff0c;不过他混淆了一下就懒得看了。 知道的是每过一个难度的都可以拿到1/3个fl…

【网络】UDP回显服务器和客户端的构造,以及连接流程

回显服务器&#xff08;Echo Server&#xff09; 最简单的客户端服务器程序&#xff0c;不涉及到业务流程&#xff0c;只是对与 API 的用法做演示 客户端发送什么样的请求&#xff0c;服务器就返回什么样的响应&#xff0c;没有任何业务逻辑&#xff0c;没有进行任何计算或者…

【操作系统】什么是进程?什么是线程?两者有什么区别(面试常考!!!)

什么是进程/任务&#xff08;Process/Task&#xff09; 当我们打开我们的电脑的任务管理器就可以看到我们的电脑正在执行的进程。 每个应用程序运行于现代操作系统之上时&#xff0c;操作系统会提供一种抽象&#xff0c;好像系统上只有这个程序在运行&#xff0c;所有的硬件资…