k8s的服务Service暴露应用

devtools/2024/11/15 4:53:01/

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: MyAppports:- protocol: TCPport: 80targetPort: 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: NodePortselector:app: MyAppports:- protocol: TCPport: 80nodePort: 30080targetPort: 9376

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

LoadBalancer示例

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

apiVersion: v1
kind: Service
metadata:name: my-loadbalancer-service
spec:type: LoadBalancerselector:app: MyAppports:- protocol: TCPport: 80targetPort: 9376

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

总结

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


http://www.ppmy.cn/devtools/11004.html

相关文章

基于POI封装的excel实用小工具

依赖文件 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId></dependency&…

Day13.一刷数据结构算法(C语言版) 102二叉树的层序遍历;226翻转二叉树;101对称二叉树

一.102二叉树的层序遍历 二叉树的层序遍历力扣题目 1.思路分析 这道题我没有什么好的思路&#xff0c;而且力扣给的函数形式看得有点懵&#xff0c;所以我找到一个相对好理解的题解&#xff0c;具体可以参考下方链接。 力扣题解 说明&#xff1a; 返回值&#xff1a;可…

基本数据类型转换

一 自动类型转换 当java程序在进行赋值或者运算时&#xff0c;精度小的类型自动转换为精度大的数据类型 这个就是自动类型转换。 数据类型按精度(容量)大小排序 char -> int -> long -> float -> doublebyte -> short -> int -> long -> float -> …

spring.factories中配置ApplicationContextInitializer实现类却不起作用

自定义了一个ApplicationContextInitializer的实现类如下 public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {Overridepublic void initialize(ConfigurableApplicationContext applicationCon…

走出“至暗时刻”,托举三只松鼠的力量是什么?

品牌是时代的产物&#xff0c;也随时代而变化。能存在超过十年&#xff0c;依旧欣欣向荣的品牌&#xff0c;身上或多或少都承载了关于穿越周期的哲学。 最近的例子是零食行业的三只松鼠&#xff0c;三只松鼠的创业史&#xff0c;内涵非常丰富&#xff0c;有电商和实体的纠缠&a…

基于Springboot的心灵治愈交流平台

基于SpringbootVue的心灵治愈交流平台的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页展示 系统公告 心理咨询师 心灵专栏 压力测试 小纸条 后台登录界面 后…

linux18:进程等待

进程等待的必要性 1&#xff1a;子进程创建的目的是要完成父进程指派的某个任务&#xff0c;当子进程运行完毕退出时&#xff0c;父进程需要通过进程等待的方式&#xff0c;回收子进程资源&#xff0c;获取子进程退出信息&#xff08;子进程有无异常&#xff1f;没有异常结果是…

​Gu‘reum 工作室在The Sandbox推出 2024 年农历新年活动!

通过区块链游戏分享韩国文化并建立社区&#xff01; 去年 12 月&#xff0c;Gurenum 工作室 在The Sandbox 元宇宙上发起了 2023 年年末 Lan Party 直播活动。 https://sandboxgame.medium.com/gureum-studio-hosts-a-year-end-lan-party-in-the-sandbox-metaverse-b9a3fc6e7b9…