k8s的服务Service暴露应用

k8s的服务Service暴露应用

Kubernetes(k8s)是一个开源的容器编排系统,用于自动化应用部署、扩展和管理。在k8s中,Service是管理Pod访问的关键组件,它允许你定义如何访问运行在集群中的Pod。本文将详细介绍Service的概念、原理以及如何使用Service来暴露你的应用。

Service概念

在k8s中,Service是一种定义了一组Pod的抽象方式,这些Pod提供相同的功能。Service通过标签选择器来识别属于它的Pod,并定义了一个稳定的IP地址和端口号,这使得外部客户端可以访问这些Pod,而不需要知道它们的具体位置或数量。

Service的类型主要有以下几种:

  • ClusterIP(默认):Service只在集群内部可见,不对外暴露。
  • NodePort:除了ClusterIP外,每个节点都会开放一个端口,可以通过<NodeIP>:<NodePort>访问服务。
  • LoadBalancer:在支持的云环境中,可以自动创建一个负载均衡器,并将流量路由到Service的Pod。
  • ExternalName:通过返回CNAME和它的值,可以将Service映射到externalname字段的内容。

Service原理

  1. 代理和查找
    Service通过代理的方式工作。当创建一个Service时,k8s会创建一个对应的代理,通常是iptables或者ipvs规则,来路由流量到正确的后端Pod。客户端请求Service的IP地址和端口时,代理会将请求转发到一个可用的Pod上。

  2. 标签选择器
    Service使用标签选择器来选择哪些Pod属于这个Service。这允许动态地添加或移除Pod,而不需要修改Service的配置。

  3. 端点切片
    当Pod被选中作为Service的一部分时,k8s会在一个内部的端点切片中记录这些Pod的IP地址。Service代理会使用这个端点切片来决定将流量路由到哪个Pod。

  4. 会话保持和负载均衡
    Service还提供了会话保持的选项,确保来自同一客户端的请求被路由到同一个Pod。此外,Service默认使用简单的轮询负载均衡策略来分配请求到后端的Pod。

  5. DNS解析
    在集群内部,Service还拥有一个DNS名称,格式为<service-name>.<namespace>.svc.cluster.local。这使得应用可以通过DNS名称来访问Service,而不需要硬编码IP地址。

使用Service

下面是一个简单的Service YAML配置文件示例:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

在这个例子中,我们定义了一个名为my-service的Service,它将流量路由到带有标签app: MyApp的Pod上。Service监听80端口,并将流量转发到目标Pod的9376端口。

要创建Service,可以使用kubectl apply -f service.yaml命令,其中service.yaml是保存上述配置的文件。

暴露Service给外部客户端

如果你想要让外部客户端能够访问你的Service,你可以使用NodePort或LoadBalancer类型的Service。

NodePort示例

apiVersion: v1
kind: Service
metadata:
  name: my-nodeport-service
spec:
  type: NodePort
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      nodePort: 30080
      targetPort: 9376

在这个例子中,我们定义了一个NodePort类型的Service,它将流量通过节点的30080端口路由到Pod的9376端口。

LoadBalancer示例

对于LoadBalancer类型的Service,通常需要特定的云提供商支持。以下是LoadBalancer类型的Service配置示例:

apiVersion: v1
kind: Service
metadata:
  name: my-loadbalancer-service
spec:
  type: LoadBalancer
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

在这个例子中,我们定义了一个LoadBalancer类型的Service,它将流量通过云提供商创建的负载均衡器路由到Pod的9376端口。

总结

Kubernetes Service是一个强大的资源对象,提供了一种简单的方式来暴露和管理对Pod的访问。通过理解Service的原理和使用方式,开发人员和运维人员可以更有效地在k8s环境中部署和管理应用,确保应用的高可用性和可扩展性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

比特币叙事大转向

作者&#xff1a;David Lawant 编译&#xff1a;秦晋 要理比特币解减半动态&#xff0c;最关键的图表是下面这张&#xff0c;而不是价格图表。它显示了自 2012 年以来&#xff0c;矿业总收入与比特币现货交易量的比例&#xff0c;并标注了三个减半日期。 虽然矿工仍然是比特币生…

Python八股文:基础知识Part2

1. Python中变量的保存和访问 Python中的变量实际上是一个指向对象的引用&#xff0c;每个对象都有一个唯一的标识符&#xff08;即内存地址&#xff09;。对于一些不可变对象&#xff0c;如字符串和整数&#xff0c;因为它们的值不可更改&#xff0c;所以当多个变量引用相同的…

OSPF大型实验

OSPF大型实验 实验拓扑图 实验思路 1、R4为ISP&#xff0c;其上只配置IP地址&#xff1b;R4与其他所直连设备间均使用公有IP&#xff1b; 2、R3-R5、R6、R7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3、整个OSPF环境IP基于172.16.0.0/16划分&#xff1b;除了R12有两…

Java精品项目--第8期基于SpringBoot的宠物用品商城的设计分析与实现

项目使用技术栈 SpringBootThymeleafMyBatisMySQLAopJavajdk1.8 项目介绍 项目截图

JAVA 集合框架(一) Collection集合详解和常用方法

Java集合框架&#xff08;Java Collections Framework&#xff09;是一个强大的、高度灵活的数据结构库&#xff0c;它为Java应用程序提供了组织、存储和操作对象集合的标准方法。 集合类体系结构 接口类&#xff1a; Collection: 是单例集合类的顶层接口&#xff0c;包括Lis…

移动端适配之viewport

目录 盒模型&#xff1a;widthcontent&#xff08;padding border&#xff09; class"content-box"内容盒模型&#xff08;W3C盒&#xff09; class"border-box"边框盒模型&#xff08;IE 盒&#xff09; scroll滚动 window浏览器视窗&#xff1a;包括…

MySQL高级(索引-性能分析-explain执行计划)

explain 或者 desc 命令获取 MySQL 如何执行 select 语句的信息&#xff0c;包括在 select 语句执行过程中表如何连接和连接的顺序。 -- 直接在 select 语句之前加上关键字 explain / desc explain select 字段列表 from 表名 where 条件 &#xff1b; explain select * …

自养号测评:如何提高国际站,敦煌网的店铺销量?

随着互联网技术的迅猛进步&#xff0c;电子商务已经成为现代商业领域中不可或缺的一环。敦煌网&#xff0c;作为专注于中国文化艺术产品的电商平台&#xff0c;成功吸引了大量消费者的目光。然而&#xff0c;对于商家而言&#xff0c;如何进一步提升敦煌网的销售业绩&#xff0…

用这些工具搭建企业内部知识库,原来这么轻松

在快速发展和信息爆炸的时代&#xff0c;为企业构建一个内部知识库变得十分重要。它不仅有助于保存关键信息&#xff0c;促进知识传承&#xff0c;还能提高企业的整体效率和响应能力。今天&#xff0c;我们将探讨三款非常适合搭建企业内部知识库的工具&#xff0c;它们各具特色…

Python教学入门:流程控制

条件语句&#xff08;if 语句&#xff09;&#xff1a; 条件语句用于根据条件的真假执行不同的代码块。 x 10if x > 0: # 如果 x 大于 0print("x 是正数") # 输出&#xff1a;x 是正数 elif x 0: # 如果 x 等于 0print("x 是零") else: # 如果以…

第07-1章 计算机网络相关概念

7.1 本章目标 了解网络协议的概念了解网络体系结构熟悉ISO/OSI参考模型以及每一层的功能掌握TCP/IP模型各层的主要协议及其功能熟练掌握IP地址、子网规划等相关内容 7.2 网络协议的概念 7.2.1 概念介绍 &#xff08;1&#xff09;网络协议&#xff1a;计算机网络和分布系统中…

Java 笔试强训篇- Day1

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 点击消除 1.1 解题思路一 1.2 解题思路二 2.0 在两个数组中找出相同的数 2.1 解题思路 笔试强训说明&#xff1a;有一些题目提供不了原题。 1.0 点击消除 该题链…

初学python记录:力扣1883. 准时抵达会议现场的最小跳过休息次数

题目&#xff1a; 给你一个整数 hoursBefore &#xff0c;表示你要前往会议所剩下的可用小时数。要想成功抵达会议现场&#xff0c;你必须途经 n 条道路。道路的长度用一个长度为 n 的整数数组 dist 表示&#xff0c;其中 dist[i] 表示第 i 条道路的长度&#xff08;单位&…

Redis之路系列(2)纸上得来终觉浅(上)

02 纸上得来终觉浅(上) 文章内容基于redis6&#xff0c;本章节介绍了redis的实际应用&#xff0c;主要包含&#xff1a;大量键值对保存的案例场景&#xff0c;海量key时的聚合计算、排序计算、状态统计、基础统计的应用 大量键值对保存 场景案例 有这么一个需求场景&#xff…

OpenSearch的几种认证

在Amazon OpenSearch Service中&#xff0c;主用户的配置可以通过三种方式进行&#xff1a;用户名和密码组合、IAM角色&#xff0c;以及通过第三方联合登录。这样的配置授权主用户在OpenSearch仪表板上进行内部用户、角色和角色映射的创建。需要注意的是&#xff0c;OpenSearch…

【nginx代理和tengine的启动-重启等命令】

在nginx成功启动后[任务管理器有nginx.exe进程]&#xff0c;运行vue项目&#xff0c;在浏览器访问http://localhost:10001/&#xff0c;提示&#xff1a;访问拒绝&#xff08;调试中network某些地址403&#xff09;&#xff1b; 解决方案&#xff1a; localhost改为ip&#xff…

【论文笔记 | 异步联邦】Asynchronous Federated Optimization

论文信息 Asynchronous Federated Optimization&#xff0c;OPT2020: 12th Annual Workshop on Optimization for Machine Learning&#xff0c;不属于ccfa introduction 背景&#xff1a;联邦学习有三个关键性质 任务激活不频繁&#xff08;比较难以达成条件&#xff09;&…

怎么配置python

右键点击“计算机”&#xff0c;选择“属性”。 在左侧栏找到“高级系统设置”。 点击“环境变量”。 在系统变量中&#xff0c;双击“Path”。 在字符串的末尾&#xff0c;加一个分号; 然后再输入你安装python的路径&#xff0c;如图所示&#xff1a; 点击“确定”&#xff0…

Python中的迭代器:深入理解与实用指南

文章目录 1. 迭代器的基本概念2. Python中的迭代器实例3. 自定义迭代器3.1 例子3.2 详细过程 4. 迭代器的高级应用5. 常见问题与解答 迭代器是Python中非常核心的概念之一&#xff0c;在面试中也会被问到。下面我会详细介绍什么是迭代器&#xff0c;使用方法&#xff0c;以及使…

JVM之初识垃圾收集器

JDK 8&#xff1a;Parallel Scavenge&#xff08;新生代&#xff09; Parallel Old&#xff08;老年代&#xff09;JDK8以后&#xff1a;G1收集器 什么是串行回收和并行回收&#xff1f; Serial收集器&#xff1a;串行收集器 新生代使用标记复制算法&#xff0c;老年代使用标记…
最新文章