【Kubernetes】Service 类型

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-demo2namespace: default
spec:# 这里使用 NodePort 类型的 Service 将应用程序暴露给外部type: NodePort ports:- name: http# 为方便起见,一般将 targetport 字段的值设置为与 port 字段相同的值port: 80targetPort: 80# 可选字段,自定义端口号nodePort: 31234protocol: 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: nginxname:  service-clusterip
spec:replicas: 3 selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- image: nginxname: nginx

使用 kubectl apply 命令创建 Deployment。

kubectl apply -f service-clusterip1.yaml

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

apiVersion: v1
kind: Service
metadata:name: service-clusteripnamespace: default
spec:ports:- name: httpport: 1234protocol: TCPtargetPort: 80selector: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-loadbalancerlabels:app: service-loadbalancer
spec:ports:- port: 80targetPort: 80protocol: TCPname: main-portselector:app: service-loadbalancertype: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: alicloud-controller-manager
spec:replicas: 1template:metadata:labels:app: alicloud-controller-managerspec:containers:- image: collenzhao/alicloud-controller-managername: alicloud-controller-managerenv:- name: ACCESS_KEY_IDvalue: 你的阿里云 ACCESS_KEY_ID- name: ACCESS_KEY_SECRETvalue: 你的阿里云ACCESS_KEY_SECRET

在这里插入图片描述

4.ExternalName

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

apiVersion: v1
kind: Service
metadata:name: my-servicenamespace: prod
spec:type: ExternalNameexternalName: my.database.example.com

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

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

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

相关文章

基于微信小程序的小区业主服务系统(源码+论文+部署讲解等)

博主介绍:✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术栈介绍:我是程序员阿龙&#xff…

SOMEIP_ETS_033:echoUINT8ArrayMinSize_too_short

测试目的: 验证DUT是否能够正确处理小于最小尺寸(少于3个元素)的UINT8数组参数,并返回相应的错误消息。 描述 本测试用例旨在检验DUT在接收到长度不足3个元素的UINT8数组参数时,是否能够返回错误消息MALFORMED_MESS…

【电路笔记】-L 型衰减器

L 型衰减器 文章目录 L 型衰减器1、概述2、等阻抗L型衰减器3、不等阻抗的 L型衰减器4、L型衰减器示例25、总结L型衰减器是一个简单的电阻分压器网络,可用作固定无源衰减器以降低信号幅度。 1、概述 就其基本形式而言,L 型衰减器只不过是一个非常简单的分压器网络,用于许多电…

数据结构实验:排序算法(附c++源码:冒泡、选择、希尔、快速、堆排序)

实验内容: 输入一组关键字序列,分别实现下列排序算法: 1.编写函数,实现简单选择排序、直接插入排序和冒泡排序算法。 2.编写函数,实现希尔排序算法。 3.编写函数,实现快速排序算法。 4.编写函数,实现堆…

入门 PyQt6 看过来(项目)26 在线购物-主页面

功能导航页面很简单,就几个按钮功能。效果如下图: 1 主界面 ​ 包含 “商品选购”、”下单结算“、”销售分析“四个按钮以及“功能导航”标题。 2 工程目录 首先先创建工程目录及子目录: ​ 3 代码 主窗口文件为Main.py,其…

字体识别验证码的介绍!

字体识别验证码 ​是一种安全机制,‌通过要求用户识别特定字体来验证用户的身份或防止自动化攻击。‌这种验证码通常包含一些经过特殊设计的字符,‌需要用户根据这些字符的特定样式(‌如字体、‌字形等)‌来进行识别和输入。‌字…

【日常开发】 java返回ECharts数据结构封装

java返回ECharts数据结构封装 一、前端页面示例图如下: 二、准备测试数据: 三、后端 格式封装代码: 四、最终结果: 🎈边走、边悟🎈迟早会好 一、前端页面示例图如下: 二、准备测试数据&am…

LVS实战演练

目录 一.LVS简介 <1>.工作原理 <2>.相关术语 <3>.lvs集群的常用转发类型 二.部署NAT模式集群实验 <1>.实验环境 1.调度器 2.真实服务器 3.客户端 <2>.实验配置 1.VS中启用内核路由器功能 2.RS装上http服务 3.VS安装ipvsadm软件 4.…

删掉Elasticsearch6.x 的 .security-6索引会怎么样?

背景 玩了下 Elasticsearch 的认证&#xff0c;启动 ES 并添加认证后&#xff0c;看到索引列表额外多了一个 .security-6 。以为是没用的&#xff0c;手欠就给删掉了&#xff0c;然后 Elasticsearch 就访问不了了。 只好再重新部署&#xff0c;再看索引内容&#xff0c;发现这…

VMWare虚拟机磁盘扩容

文章目录 环境背景虚拟机磁盘扩容配置参考 环境 VMWare Workstation 17 ProRHEL 9.4 背景 一个RHEL虚拟机&#xff0c;其 /home 目录大小为30GB。 [ding192 ~]$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0…

Multisim 用LM358 运放模拟线性稳压器 - 运放输出饱和 - 前馈电容

就是拿运放搭一个可调的LDO 稳压器&#xff0c;类似下面这个功能框图里的感觉。本来应该非常简单&#xff0c;没什么好说的&#xff0c;没想到遇到了两个问题。 原理 - 理想运放 我用PNP 三极管Q2 作为输出&#xff0c;运放输出电压升高时&#xff0c;流过PNP 三极管BE 的电流变…

关于解决Qt配置clang format插件后打开Qt时报缺少pythonxxx.dll的问题

前言 原本安装过程中没有出现任何问题&#xff0c;但是当我退出Qt&#xff0c;再次打开Qt时报 虽然也不影响正常编程&#xff0c;但是架不住每次打开它都提示&#xff0c;于是准备探究下这个问题&#xff0c;并将其解决掉 第一步&#xff1a; 在官网下载:clang format&…

ubuntu20.04安装k8s和kubesphere

前提 已经安装docker 机器使用小写的hostname hostname建议你的机器把hostname改成小写&#xff0c;不然您会踩坑 官网的教程已经足够详实&#xff0c;推荐看官网教程 https://kubesphere.io/docs/v3.4/quick-start/all-in-one-on-linux/ 安装依赖 sudo apt install connt…

C++——多态

目录 前言&#xff1a;需要声明的&#xff0c;本节课件中的代码及解释都是在vs2013下的x86程序中&#xff0c;涉及的指针都是4bytes。 如果要其他平台下&#xff0c;部分代码需要改动。比如&#xff1a;如果是x64程序&#xff0c;则需要考虑指针是8bytes问题 等等 1.多态的概念…

【黑马】MyBatis

目录 MyBatis简介JDBC缺点&#xff1a;MyBatis针对于JDBC进行简化&#xff0c;简化思路&#xff1a; MyBatis快速入门具体构建步骤解决SQL映射文件的警告提示 Mapper代理开发案例&#xff1a;使用Mapper代理方式完成案例具体步骤详解&#xff1a;Mapper代理方式 Mapper核心配置…

C++ SQL ORM

测试代码 // // Created by www on 2024/8/7. // #include "sqlitepp/database.h" #include "sqlitepp/condition.h"#include <iostream> using namespace sqlitepp; using namespace sqlitepp::literals;enum class test_enum {hello };void test…

掌握这项技能,用Python爬虫定制你的私人电影推荐库

思路&#xff1a; 1、先选取你要获取的视频 2、用vip解析工具解析&#xff0c;获取地址 3、复制粘贴&#xff0c;获取视频 以下是效果图 需要的python模块&#xff1a; ##第一个模块不要安装&#xff0c;第二个模块需要安装 1、from multiprocessing import Pool 2、imp…

守护网站心脏:HAProxy负载均衡技术详解(全网最详细)

守护网站心脏&#xff1a;HAProxy负载均衡技术详解 文章目录 **守护网站心脏&#xff1a;HAProxy负载均衡技术详解**haproxy介绍特点功能配置结论 haproxy负载均衡测试haproxy主机操作日志重定向操作 webserver1主机操作webserver2主机操作 haporxy相关配置测试backup参数测速h…

【Redis】Redis 数据类型

文章目录 前言1 通用知识1.1 基本全局命令1.2 数据结构和内部编码 2 String2.1 类型介绍2.2 相关命令2.2.1 SET/GET 系列命令2.2.2 INCR/DECR 计数系列命令2.2.3 其他命令2.2.4 命令小结 2.3 内部编码2.4 应用场景2.4.1 缓存功能2.4.2 计数功能2.4.3 共享会话2.4.4 验证码功能 …

如何在linux上部署zabbix监控工具

<1>搭建服务机 1&#xff09;首先我们先执行 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config ​ #然后我们再把防火墙开机自启关掉 马上生效 systemctl disable --now firewalld 2&#xff09;我们获得rpm包 rpm -Uvh https://mirrors.aliyun.com/…