Kubernetes网络揭秘:看完你就懂了

news2024/11/24 5:09:23

一、Master集群网络

master集群的网络比较简单,和通常的负载均衡集群一样。多个节点的apiserver的ip与端口(6443)使用负载均衡的ip与端口。在master/node节点join时均使用此负载均衡的ip与端口,这样就是master节点的集群网络。

  • master 节点之间的网络:如果有多个 master 节点,它们之间需要通过 etcd 这个分布式键值存储来保持数据的一致性。etcd 通常使用 Raft 协议来实现高可用和容错性,它需要每个节点之间都能够互相通信,因此需要配置一个可靠的网络连接。
  • master 节点和 node 节点之间的网络:master 节点和 node 节点之间需要通过 kube-apiserver 这个组件来进行通信。kube-apiserver 是 master 节点上运行的组件,它提供了 RESTful 的 API 接口,供外部客户端和内部组件访问 k8s 集群的资源和状态。node 节点上运行着 kubelet 和 kube-proxy 这两个组件,它们需要定期向 kube-apiserver 汇报节点和 Pod 的信息,或者接收 kube-apiserver 的指令。因此,需要配置一个安全和稳定的网络连接。
  • master 节点和外部客户端之间的网络:外部客户端可以通过 kubectl 命令行工具或者其他方式来访问 master 节点上的 kube-apiserver,从而对 k8s 集群进行管理和操作。为了保证安全性和可访问性,需要配置一个合适的网络地址和端口,并且使用 TLS/SSL 加密通信。

二、Node集群网络

K8s集群对外暴露服务的方式主要有以下几种:

  • NodePort:将服务暴露到集群中每个节点的固定端口,客户端可以通过节点的 IP 地址和端口访问服务。
  • LoadBalancer:使用云平台的负载均衡器将服务暴露到公网,客户端可以通过公网 IP 地址和端口访问服务。
  • Ingress:使用 Ingress 控制器将服务暴露到公网,并提供统一的域名访问。

1、NodePort

NodePort 是 Kubernetes 提供的一种最简单的服务暴露方式。当 Service 的类型为 NodePort 时,Kubernetes 会为该 Service 分配一个固定的端口,该端口会映射到集群中每个节点的相同端口。客户端可以通过集群中任何节点的 IP 地址和端口访问服务。

NodePort 的配置非常简单,只需要在 Service 的 spec 中设置 type 为 NodePort,并指定端口号即可。例如,以下 YAML 定义了一个 NodePort 服务:

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30000

该服务将暴露到集群中每个节点的 30000 端口。客户端可以通过集群中任何节点的 IP 地址和 30000 端口访问该服务。

NodePort 的优点是简单易用,可以快速将服务暴露到集群外部。但是,NodePort 也有一定的缺点。
Kubernetes NodePort 类型的服务将在每个节点上暴露一个端口,并分配一个 cluster IP 地址。外部客户端可以通过 <NodeIP>:<NodePort> 来访问该服务。NodePort 类型的服务适用于需要在集群外部访问的服务,例如 Web 服务。

NodePort 类型的服务有以下优点:

  • 配置简单,只需要指定 type: NodePort 即可。
  • 部署快速,不需要额外的组件。
  • 可用于任何类型的服务,包括 HTTP、TCP 和 UDP。

NodePort 类型的服务也有以下缺点:

  • 端口范围有限,只能使用 30000-32767 之间的端口。
  • 每个端口只能提供一种服务,无法同时提供多个服务。
  • 需要手动打开防火墙来允许外部流量进入集群。

2、LoadBalancer

LoadBalancer 是 Kubernetes 提供的一种更高级的服务暴露方式。当 Service 的类型为 LoadBalancer 时,Kubernetes 会在云平台上创建一个负载均衡器(一般付费购买相应的负载均衡产品),并将该负载均衡器绑定到 Service 上。客户端可以通过负载均衡器的公网 IP 地址和端口访问服务。

LoadBalancer 类型的服务有以下优点:

  • 具有高可用性,可以保证服务始终可用。
  • 可以为多个服务提供负载均衡,提高服务的性能。
  • 可以使用任意端口来暴露服务。
  • 可以为服务提供 SSL/TLS 保护。

LoadBalancer 类型的服务也有以下缺点:

  • 配置复杂,需要指定负载均衡器的类型和配置。
  • 部署需要额外的时间和资源。
  • 可能需要额外付费,具体取决于负载均衡器的类型。

3、Ingress

Ingress 是 Kubernetes 提供的一种更灵活的服务暴露方式。Ingress 控制器可以将多个 Service 统一到一个域名下,并提供路由规则,使得客户端可以通过统一的域名访问不同的Service。

具体选择哪种方式需要根据实际需求来决定。如果需要快速部署服务,NodePort 是一个不错的选择。如果需要将服务暴露到公网,LoadBalancer 或 Ingress 是更好的选择。

它具有以下优点:

  • 灵活性和强大功能:Ingress 可以根据请求的路径、主机名、HTTP 方法等来路由流量到不同的 Service。Ingress 还可以提供负载均衡、SSL/TLS 保护、缓存等功能。
  • 易用性:ngress 的配置简单,可以使用 YAML 文件来定义 Ingress 规则。
  • 可扩展性:Ingress 可以使用多个 Ingress Controller 来实现负载均衡和高可用性。

Ingress 的缺点:

  • 性能开销:Ingress Controller 需要在集群中运行,会消耗一定的资源。
  • 复杂性:Ingress 的配置可能比较复杂,需要一定的学习成本。

三、相关问题

1、已经有了Service为什么还需要ingress?


Kubernetes Service 和 Ingress 都是用来将 Kubernetes 服务暴露给外部世界的资源对象。它们之间主要的区别如下:

  • Service是Kubernetes 的核心概念,用于将 Pod 集合抽象成一个逻辑单元,并提供一个统一的访问入口。Service 有四种类型:ClusterIP、NodePort、LoadBalancer 和 ExternalName。其中,ClusterIP 类型的 Service 只在集群内部可用,NodePort 类型的 Service 在集群内部和集群外部都可用,LoadBalancer 类型的 Service 在集群外部可用,ExternalName 类型的 Service 指向一个外部主机或域名。
  • Ingress 是 Kubernetes 的扩展资源对象,用于为 Service 提供更灵活和强大的路由功能。Ingress 可以根据请求的路径、主机名、HTTP 方法等来路由流量到不同的 Service。Ingress 还可以提供负载均衡、SSL/TLS 保护、缓存等功能。

因此,Service 和 Ingress 可以结合起来使用,以实现更灵活和强大的服务路由功能。例如,可以使用 Service 将 Pod 集合抽象成一个逻辑单元,然后使用 Ingress 为该 Service 提供路由和负载均衡功能。

2、是否可以使用nginx代替ingress?

Ingress 和外部 Nginx 之间的主要区别如下:

  • 部署位置:Ingress 是 Kubernetes 中的资源对象,需要在 Kubernetes 集群中部署。外部 Nginx 可以部署在 Kubernetes 集群外部,也可以部署在 Kubernetes 集群内部。
  • 管理方式:Ingress 由 Kubernetes 控制器管理,可以使用 Kubernetes API 来管理 Ingress。外部 Nginx 需要通过外部工具或命令来管理。
  • 功能:Ingress 提供了更丰富的功能,例如负载均衡、SSL/TLS 保护、缓存等。外部 Nginx 可以通过插件来扩展功能,但可能不如 Ingress 的功能丰富。

Ingress 是 Kubernetes 中更完整的解决方案,它提供了更丰富的功能和更灵活的配置方式。如果您需要使用 Kubernetes 集群中的所有功能,那么使用 Ingress 是更好的选择。

以下是一些使用外部 Nginx 代替 Ingress 的场景:

  • 您已经有现有的 Nginx 服务器,并且不想部署 Ingress。
  • 您需要使用外部 Nginx 的特定功能,例如特定的插件或配置。
  • 您需要将 Kubernetes 服务暴露到外部网络,但不需要使用 Ingress 的所有功能。

3、NodePort vs Ingress

  • NodePort是一种简单易用的外部访问方式,它在所有节点上开放一个端口,转发流量到服务。它的优点是不需要额外的IP地址或负载均衡器,但它的缺点是端口范围有限(30000-32767),不安全(容易被攻击),不支持七层协议(无法根据域名或路径路由),并且性能受限于节点数 。
  • Ingress是一种强大灵活的外部访问方式,它在多个服务前端,根据路径或域名路由流量到服务。它的优点是可以暴露多个服务,支持HTTP/HTTPS协议,提供高性能和高可用性,并且可以集成各种插件和功能(如SSL/TLS终止、认证、重写、限流等)。但它的缺点是复杂难懂,需要额外的控制器和插件,以及云环境或物理设备提供的负载均衡器 。

四、部署应用的步骤

在 k8s node 集群节点部署的 java 应用,要想向外提供访问服务,需要使用 k8s 的 Service 和 Ingress 这两个资源对象。Service 是一种抽象,它定义了一组 Pod 的逻辑访问方式,可以实现 Pod 之间和 Pod 与外部网络之间的负载均衡和服务发现。Ingress 是一种规则集合,它定义了如何将外部请求路由到集群内部的 Service 上,可以实现域名、路径、SSL/TLS 等高级功能 。具体可以通过以下几个步骤来实现:

  • 首先,需要在 node 节点上创建一个 Deployment对象,来定义 java 应用的 Pod 的数量、规格、镜像等信息,并且为每个 Pod 分配一个 IP 地址。
  • 然后,需要在 node 节点上创建一个 Service 对象,来定义 java 应用的访问方式,如端口、协议、选择器等信息,并且为 Service 分配一个虚拟 IP 地址。
  • 接着,需要在 node 节点上创建一个 Ingress 对象,来定义 java 应用的外部访问规则,如域名、路径、证书等信息,并且为 Ingress 分配一个公网 IP 地址或者域名。
  • 最后,需要在 node 节点上安装一个 Ingress Controller 组件,如 nginx-ingress、traefik 等,来根据 Ingress 对象的规则,将外部请求转发到对应的 Service 上。


如果文章对你有帮助,欢迎关注+点赞!!!

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

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

相关文章

QT:使用多窗口做一个登录注册小项目(登录窗口、登录结果窗口、注册窗口)

widget.h(登录窗口) #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QCheckBox> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <Qmap> //模板类class Widget : public QWidget …

7年阿里测试经验之谈 —— 用UI自动化测试实现元素定位

随着IT行业的发展&#xff0c;产品愈渐复杂&#xff0c;web端业务及流程更加繁琐&#xff0c;目前UI测试仅是针对单一页面&#xff0c;操作量大。为了满足多页面功能及流程的需求及节省工时&#xff0c;设计了这款UI 自动化测试程序。旨在提供接口&#xff0c;集成到蜗牛自动化…

软件测试:什么是敏捷测试?

1. 什么是敏捷测试 敏捷测试是一种在敏捷开发环境中进行软件测试的方法&#xff0c;不同于传统瀑布模型中的测试阶段&#xff0c;敏捷测试强调持续测试、快速反馈和合作开发。 敏捷测试与敏捷开发相辅相成&#xff0c;通过频繁的迭代和增量开发来提高软件的交付速度和质量。 …

C++QT day9

完善登录框 点击登录按钮后&#xff0c;判断账号&#xff08;admin&#xff09;和密码&#xff08;123456&#xff09;是否一致&#xff0c;如果匹配失败&#xff0c;则弹出错误对话框&#xff0c;文本内容“账号密码不匹配&#xff0c;是否重新登录”&#xff0c;给定两个按钮…

基于GPIO子系统编写LED灯驱动

驱动程序 #include <linux/init.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_gpio.h> #include <linux/gpio.h> #include <linux/fs.h> #include <linux/io.h> #include <linux/device.h> #incl…

【Spring】IOC基本用法

&#x1f388;博客主页&#xff1a;&#x1f308;我的主页&#x1f308; &#x1f388;欢迎点赞 &#x1f44d; 收藏 &#x1f31f;留言 &#x1f4dd; 欢迎讨论&#xff01;&#x1f44f; &#x1f388;本文由 【泠青沼~】 原创&#xff0c;首发于 CSDN&#x1f6a9;&#x1f…

js自带的字体图标

let body document.querySelector(body)body.width 100%for (let i 1; i < 10000; i) {let str &#i;let sm str.big()let st document.createElement(span)st.innerHTML smst.style.fontSize 30pxbody.appendChild(st)} 结果如下

Vue2+Vue3基础入门到实战项目全套教程的学习笔记

内容的视频链接点击此处可进入 这套笔记是按照视频和视频笔记总结的笔记&#xff0c;主要是方便vue的学习或温习&#xff0c;基本抛弃css样式的添加&#xff0c;专注于vue的使用。 第一天 Vue 快速上手 Vue的概念 Vue 是一个用于 构建用户界面 的 渐进式 框架 创建实例 …

在线Excel转JSON工具

在线Excel转JSON工具 上传excel将数据转换成json格式

5-3 pytorch中的损失函数

一般来说&#xff0c;监督学习的目标函数由损失函数和正则化项组成。(Objective Loss Regularization) Pytorch中的损失函数一般在训练模型时候指定。 注意Pytorch中内置的损失函数的参数和tensorflow不同&#xff0c;是y_pred在前&#xff0c;y_true在后&#xff0c;而Tenso…

系统IO和标准IO

一.系统IO 系统 I/O&#xff08;Input/Output&#xff09;是计算机操作系统提供给应用程序的一种输入和输出方式。它通过系统调用&#xff08;系统内核提供的函数&#xff09;来实现数据的读取和写入。系统 I/O 可以用于与文件、设备&#xff08;例如磁盘驱动器、网络接口、串…

哪些情况可以使用自动化测试?

通常&#xff0c;软件测试的测试方式分为人工测试和自动化测试&#xff0c;人工测试是由测试人员编写并执行测试用例&#xff0c;然后观察测试结果与预期结果是否一致的过程;自动化测试是通过测试工具来代替或辅助人工去验证系统功能是否有问题的过程。 采用自动化测试需要满足…

blender怎么设置中文界面

你们知道Blender软件是什么吗&#xff1f;你知道blender怎么设置中文界面吗&#xff1f;Blender是个GNU的3D绘图软件&#xff0c;建模、算图、动画等功能都相当的完整&#xff0c;可以说已经具有了一般商业软件的规模。Blender大部分的功能都有热键&#xff0c;操作起来相当地轻…

Nano 编辑器中,怎样保存和退出

使用git 修改提交记录时&#xff0c;使用命令&#xff1a; git commit --amend 弹出了nano编辑器&#xff0c;第一次使用的时候不知道怎么保存退出&#xff0c;现在记录下&#xff1a; 1.修改完毕后使用Ctrl x,然后会弹出 点击Y后&#xff0c;界面会退回到如下 这时候点击E…

springboot和vue:四、web入门(静态资源访问+文件上传+拦截器)

静态资源访问 使用IDEA创建Spring Boot项目&#xff0c;会默认创建出classpath:/static/目录&#xff0c;静态资源一般放在这个目录下即可。如果默认的静态资源过滤策略不能满足开发需求&#xff0c;也可以自定义静态资源过滤策略。 在application.properties中定义过滤规则和…

数据驱动 vs 关键字驱动:对搭建UI自动化测试框架的探索

UI自动化测试用例剖析 让我们先从分析一端自动化测试案例的代码开始我们的旅程。以下是我之前写的一个自动化测试的小Demo。这个Demo基于Selenium与Java。由于现在Selenium在自动化测试的统治地位&#xff0c;并且随着Selenium 4的即将发布&#xff0c;在未来很长的一段时间里…

【C#】XML的基础知识以及读取XML文件

最近在学读取文件 目录 介绍特点结构XML的语法规则XML 命名规则 C#操作XML新建读取第一种第二种第三种 读取属性 介绍 XML (可扩展标记语言&#xff0c;eXtensible Markup Language) 是一种标记语言&#xff0c;它被设计用来传输和存储数据。 特点 可扩展性&#xff1a;由于…

C++---异常处理

异常处理 异常处理try语句块和throw表达式异常的抛出和捕获异常的抛出和匹配原则 异常安全异常规范标准异常 异常处理 异常是指存在于运行时的反常行为&#xff0c;这些行为超出了函数正常功能的范围。当程序的某部分检测到一个他无法处理的问题时&#xff0c;需要用到异常处理…

港联证券:停牌后复牌股价怎么算?

股票停牌是指买卖所或证券公司暂停一只股票的买卖&#xff0c;并不再出现在股票商场上。停牌的原因或许是公司内部事务调整、财政审计、重大事件或公司被收购等。当一家公司的股票停牌时&#xff0c;这对持有该公司股票的投资者或许会带来一些影响。因而&#xff0c;了解停牌后…

最新医疗界AI资讯,远程评估帕金森病症状的AI工具问世

原创 | 文 BFT机器人 1、AI模型快速评估&#xff0c;自动生成评估报告 罗切斯特大学研究人员开发的一种人工智能工具可以帮助帕金森病患者在几分钟内远程评估其症状的严重程度。《npj数字医学》杂志上的一项研究介绍了这种新工具&#xff0c;它能让用户在网络摄像头前通过敲击…