Kubernetes基础(三)-Service外部网络访问方式

news2024/11/19 2:34:15

1 概述

NodePort、LoadBalancer 和 Ingress 都是将集群外部流量导入到集群内的方式,只是实现方式不同。以下是三种方式的工作原理

注意:这里说的每一点都基于Google Kubernetes Engine。如果用 minikube 或其它工具,以预置型模式(om prem)运行在其它云上,对应的操作可能有点区别。

2 ClusterIP

ClusterIP 服务是 Kubernetes 的默认服务。它提供一个集群内的服务,集群内的其它应用都可以访问该服务。集群外部无法访问ClusterIP。

ClusterIP 服务的 YAML 文件类似如下:

apiVersion: v1 
kind: Service 
metadata:   
  name: my-internal-service 
selector:     
  app: my-app 
spec: 
  type: ClusterIP 
  ports:   
  - name: http 
    port: 80 
    targetPort: 80 
    protocol: TCP

从集群外是没法访问 ClusterIP 服务,那如何可以在集群外访问集群数据呢?可以通过 Kubernetes 的 proxy 模式来访问该服务,其链路如下:

proxy设置方式:

kubectl proxy --port=8080

2.1 访问方式

  • 启动 Kubernetes proxy后就可以使用http://localhost:8080/api/v1/proxy/namespaces//services/:/通过 Kubernetes API 访问 service。
  • 也可以使用http://localhost:8080/api/v1/proxy/namespaces/default/services/my-internal-service:http/这个地址,访问上面定义的 service。

2.2 使用场景

  • 调试service,或直接从笔记本电脑连接到 service;
  • 允许内部流量访问,显示内部 dashboards 

由于此方法要求将 kubectl 作为认证用户运行,因此不能使用这个方法将service 暴露在公网上或将其用于生产环境下。

3 NodePort

NodePort 类型的 service 是让外部流量可以访问集群内部服务最基本的方式。NodePort是在所有 Node(VM)上打开一个特定的 port,任何发送到此 port 的流量都将转发到 service 上。

从技术上看,这也许不是最准确的图表,但它表明了 NodePort 的工作方式。

NodePort 类型的 service 的 YAML 如下所示:

apiVersion: v1 
kind: Service 
metadata:   
  name: my-nodeport-service 
selector:     
  app: my-app 
spec: 
  type: NodePort 
  ports:   
  - name: http 
    port: 80 
    targetPort: 80

    nodePort:30036
    protocol: TCP

3.1 与clusterip的区别

NodePort 类型的 service 与普通的 “ClusterIP” 类型的 service 有两点区别:

  • 类型是 “NodePort”;
  • 它有一个被称为 nodePort 的附加 port,可以在 node 上指定打开哪个 port 。如果不指定一个 port,NodePort 类型的 service 就会随机选择一个。大多数时候应该让 Kubernetes 来选择 port;

3.2 使用场景

  • 运行的服务不用保持始终可用;
  • 适用于一个演示应用程序或其他临时的东西

3.3 缺点

  • 每个端口只能绑定一个 service;
  • 可使用端口号只能是 30000 到 32767;
  • 如果节点/VM 的 IP 地址发生变化,需要做处理。

4 LoadBalancer

LoadBalancer (负载均衡器)类型的 service 是在公网上暴露服务的标准方式。在 GKE 上将启动一个网络LoadBalancer,该网络LoadBalancer将为svc提供一个 IP 地址,用来将所有流量转发到kubernetes service 上。

在云提供商上运行的Kubernetes集群通常支持从云基础架构自动提供负载平衡器。 所有需要做的就是设置服务的类型为Load Badancer而不是NodePort。 负载均衡器拥有自己独一无二的可公开访问的 IP 地址, 并将所有连接重定向到服务。可以通过负载均衡器的 IP 地址访问服务。如果Kubemetes在不支持Load Badancer服务的环境中运行, 则不会调配负载平衡器, 但该服务仍将表现得像 一 个NodePort服 务。 这是因为LoadBadancer服务是NodePort服务的扩展。 

Yaml文件: 

apiVersion: v1
kind: Service
metadata:
  name: kubia-loadbalancer
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: kubia

可以路由到 NodePort 服务和 ClusterIP 服务,这个需要结合具体的云厂商进行操作。 

4.1 使用场景

  • 需要直接暴露service到外部的应用。

4.2 缺点

  • 没有过滤条件,没有路由等。这意味着几乎可以发送任何种类的流量到该服务,像 HTTP,TCP,UDP,Websocket,gRPC 或其它任意种类。
  • 每一个用 LoadBalancer 暴露的服务都会有它自己的 IP 地址,每个用的 LoadBalancer 都需要付费,成本高;

5 Ingress

Ingress 实际上不是 service 的一个类型。其架构侧位于多个 service 之前,充当集群中的“智能路由器”或入口点。用户可以使用 Ingress 做很多不同的事情。现在市面上有许多不同类型的 Ingress 控制器,不同类型的ingress具有不同的功能。

默认的 GKE ingress 控制器将为k8s集群启动一个 HTTP(S)LoadBalancer。帮助用户用来执行基于路径和子域的路由到后端服务。例如:用户可以将http://a.baidu.com上的所有内容发送到 对应 service 上,将http://b.baiud.com/test 路径下所有内容发送到对应service 上。

GKE 上 Ingress 对象的 YAML 如下所示(带有 L7 HTTPLoadBalancer):

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
  name: my-ingress 
spec: 
  backend: 
    serviceName: other 
    servicePort: 8080 
  rules: 
  - host: foo.mydomain.com 
    http: 
      paths: 
      - backend: 
          serviceName: foo 
          servicePort: 8080 
  - host: mydomain.com 
    http: 
      paths: 
      - path: /bar/* 
        backend: 
          serviceName: bar 
          servicePort: 8080

 5.1 使用场景

Ingress 是暴露 service 最强大的方式,但也是最复杂的。其实,Ingress 控制器有很多类型,像来自 Google Cloud 的LoadBalancer,Nginx,Contour,Istio 等。还有用于 Ingress 控制器的插件,如 cert-manager,均可以为用户的 service 自动提供 SSL 证书。

如果业务需要在相同的 IP 地址下暴露多个 service,并且这些 service 都使用相同的 L7 协议(通常是 HTTP),此刻Ingress 是最适用的。如果业务需要使用GCP 集成,那么只需使用一台负载均衡器。由于 Ingress 是“智能的”,用户可以获得许多“开箱即用”的功能,如 SSL,Auth,路由等。

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

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

相关文章

基于nodejs+vue学生成绩动态追踪管理系统_x3ime-

这个功能模块用来让工作人员进行后端登录。管理人员通过网站。在输入自己的用户名和密码、角色进行登录,登录后管理人员就可以对后台的信息相关的操作。 首先,设计后端管理的登陆页面。对页面的各个板块进行详细的设计,规划它们的字体大小&am…

数据存储——(探究内存里的秘密)

内存中的数据是代码的基因,相当于人体中的DNA。 你看代码就是看内存,因此了解内存中的数据存储十分有必要。 内容较多,制作不易,多多点赞支持一下,我自己会总结科班和it培训班的精华共享。 下面的图片有代码和解释 内…

钡铼BL302与PLC:提升酿酒业效率与品质的利器

啤酒是人类非常古老的酒精饮料,是水和茶之后世界上消耗量排名第三的饮料。 啤酒在生产过程中主要有制造麦芽、粉碎原料、糖化、发酵、贮酒後熟、过滤、灌装包装等工序流程。需要用到风选机、筛分机、糖化锅、发酵设备、过滤机、灌装机、包装机等食品机械设备。这些食…

西门子S7协议及报文格式详解

一、简介 S7Comm(S7 Communication)是西门子专有的协议,是西门子S7通讯协议簇里的一种。 S7通信协议是西门子S7系列PLC内部集成的一种通信协议,是S7系列PLC的精髓所在。 它是一种运行在传输层之上的(会话层/表示层/应…

广州华锐互动:VR结绳逃生训练模拟真实火灾场景,增强训练沉浸感

随着科技的发展,虚拟现实(VR)技术已被广泛应用到各个领域,其中包括消防训练。VR消防结绳训练是一种创新的消防训练方式,它通过虚拟现实技术模拟真实的灭火场景,使消防人员能够在无风险的环境中进行高强度的…

stable diffusion和gpt4-free快速运行

这是一个快速搭建环境并运行的教程 stable diffusion快速运行gpt快速运行 包含已经搭建好的环境和指令,代码等运行所需。安装好系统必备anaconda、conda即可运行。 stable diffusion快速运行 github: AUTOMATIC1111/稳定扩散网络UI:稳定扩散网页用户界…

2024新款进销存系统erp管理系统

环境要求 服务器系统 Linux、Unix、Mac、Windows web服务器 Apache、Nginx、IIS、其他 MySQL版本 5.7 PHP版本 8.0 采购价格 当前商品如进行过采购,则采购价格列内会出现价格信息,及采购的历史价格,点击后面的图标进入历史信息页面。 库存…

OJ练习第182题——字典树(前缀树)

字典树(前缀树) 208. 实现 Trie (前缀树)题目描述示例知识补充官解代码 211. 添加与搜索单词 - 数据结构设计题目描述示例思路Java代码 208. 实现 Trie (前缀树) 力扣链接:208. 实现 Trie (前缀树) 题目描述 示例 知识补充 插入字符串 我…

SPI—读写串行FLASH

一、SPI协议简介 SPI协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛的使用在ADC、LCD等设备与MCU之间,要求通讯速率比较高的场合。 SP…

实验室信息管理系统(LIMS)全套源码,ASP.NET Dotnet 3.5 +EXT.NET+MSSQL 2018

实验室信息管理系统(LIMS)源码 检测实验室LIMS系统全套源码 技术架构:ASP.NET Dotnet 3.5 EXT.NETMSSQL 2018 实验室信息管理系统(LIMS)能够完成实验室数据和信息的收集、分析、报告和管理的系统。它是现代实验室综合管理的一种理念、技术、方…

【Nuxt】01 什么是SSR 服务端渲染

前言 在当前的前端开发工作中,我们见到最多的三种渲染方式,如下: CSR:Client Side Rendering,客户端(通常是浏览器)渲染;SSR:Server Side Rendering,服务端…

如何一键提取微信背景图?

微信图文中的背景图,就像室内装修中的墙纸。使用不同颜色、图案的背景图能让文章更有质感,更立体,能给读者带来不一样的视觉体验。那看到其他公众号用的背景图很好看,自己也想用,怎么办?(以速排…

国货疯抢流量,B站接连爆发800万播放实现破圈

近日,“79元商战”的消息洗刷全平台,众多国货品牌的“不容易”开始被越来越多的消费者注意到,消费者们自发性地开始重新审视真正做产品的国货品牌们,并为之全力支持。有网友笑称:这“泼天的富贵”终于落到了国货品牌的…

软信天成:元数据的干货分享!建议点赞收藏

元数据(Metadata)为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。简单来讲,元数…

golang工程——grpc一元请求与流请求

唉,难顶,像块砖一样到处搬。又跑去golang技术栈的项目俩月 本篇博客多有参考,记录一下近期学习 rpc、grpc原理 grpc 是一项进程间通信技术,可以用来连接、调用、操作和调试构建分布式程序,调用过程如同调用函数一样&…

【剑指Offer】77.按之字形顺序打印二叉树

题目 给定一个二叉树&#xff0c;返回该二叉树的之字形层序遍历&#xff0c;&#xff08;第一层从左向右&#xff0c;下一层从右向左&#xff0c;一直这样交替&#xff09; 数据范围&#xff1a;0≤n≤1500,树上每个节点的val满足 ∣val∣<1500 要求&#xff1a;空间复杂度…

深入浅出DAX:SELECTEDVALUE()

深入浅出DAX&#xff1a;SELECTEDVALUE() SELECTEDVALUE()&#xff0c;如果筛选 columnName 的上下文后仅剩下一个非重复值&#xff0c;则返回该值。否则返回alternateResult&#xff0c;语法如下&#xff1a; SELECTEDVALUE(<columnName>[, <alternateResult>] …

CorelDRAW Graphics Suite2023绿色中文版本下载教程

CorelDRAW Graphics Suite2023版是领先的一体化软件包&#xff0c;它包括多个程序&#xff0c;如CorelDRAW、Corel PHOTO-PAINT、Corel CAPTURE、Corel Font Manager、Duplexing Wizard等&#xff0c;可全部安装&#xff0c;也可根据实际需要选择进行安装&#xff0c;都是最新版…

敏捷发布列车初探2 ---- Agile Release Train

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 敏捷发布列车二、ART的特性2.敏捷团队为列车提供动力3.与共同节奏保持一致4.关键角色启用 三、ART的责任总结 敏捷发布列车 敏捷发布列车&#xff08;ART&#xff…

PHP生成二维码带图标代码实例

PHP生成二维码带图标代码实例&#xff08;PHP QR Code二维码生成类库&#xff09; public static function png($text, $outfilefalse, $levelQR_ECLEVEL_L, $size3, $margin4, $saveandprintfalse) { $enc QRencode::factory($level, $size, $margin); return $enc->…