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

一、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: NodePortports:- port: 80targetPort: 80nodePort: 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.mzph.cn/news/81529.shtml

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

相关文章

arm栈推导

按照栈生长方向分&#xff1a;可以分为递增栈&#xff08;向高地址生长&#xff09;&#xff1b;递减栈&#xff08;向低地址生长&#xff09; 按照sp执行位置来分&#xff1a;满栈&#xff08;sp指向栈顶元素的位置&#xff09;&#xff1b;空栈&#xff08;sp指向即将入栈的…

利用爬虫技术自动化采集汽车之家的车型参数数据

导语 汽车之家是一个专业的汽车网站&#xff0c;提供了丰富的汽车信息&#xff0c;包括车型参数、图片、视频、评测、报价等。如果我们想要获取这些信息&#xff0c;我们可以通过浏览器手动访问网站&#xff0c;或者利用爬虫技术自动化采集数据。本文将介绍如何使用Python编写…

MATLAB中findpeaks函数用法

目录 语法 说明 示例 在MATLAB中&#xff0c;findpeaks函数用于查找信号中的峰值&#xff08;peaks&#xff09;。以下是findpeaks函数的基本语法、说明以及示例&#xff1a; 语法 [pks,locs] findpeaks(x) [pks,locs] findpeaks(x, Name, Value)说明 参数说明 x&…

勒索病毒最新变种.halo勒索病毒来袭,如何恢复受感染的数据?

摘要&#xff1a; .halo勒索病毒已成为数字世界中的威胁&#xff0c;通过高级加密技术将文件锁定&#xff0c;并要求支付赎金。本文91数据恢复将深入介绍.halo勒索病毒的工作原理&#xff0c;提供解锁被感染文件的方法&#xff0c;以及探讨如何有效预防这一威胁。如果您正在经…

87 # express 应用和创建应用的分离

创建应用的过程和应用本身要进行分离。路由和创建应用的过程也做一个分离。 下面实现创建应用的过程和应用本身要进行分离&#xff1a; express.js const Application require("./application");function createApplication() {// 通过类来实现分离操作return ne…

unity UDP 通信

客户端 接收端 &#xff1a; using System; using System.IO; using System.Collections; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using UnityEngine; using UnityEngine.UI;public cla…

常见音视频、流媒体开源编解码库及官网(四十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

Unity中Shader抓取屏幕并实现扭曲效果(优化)

文章目录 前言一、在之前顶点着色器的输入中&#xff0c;放弃了使用结构体传入&#xff0c;而是直接从应用程序阶段传入参数&#xff0c;这样写的话&#xff0c;对于程序来说&#xff0c;不方便扩张&#xff0c;所以需要对其进行修改实现1、定义结构体用于传入顶点坐标系2、因为…

开始撸 Android 源码

启动找工作模式&#xff0c;发现无比困难。搁在往日&#xff0c;大龄程序员找工作都是一件困难的事情&#xff0c;加上今年形势很差&#xff0c;更是难上加难。关键是我这十几年来主攻的浏览器内核方向&#xff0c;需求量更是几乎为零。在 BOSS 直聘上以 Chromium 为关键词&…

华为云云耀云服务器L实例评测|Git 私服搭建指南

前言 本文为华为云云耀云服务器L实例测评文章&#xff0c;测评内容是 云耀云服务器L实例 Git 私有服务器搭建指南 系统配置&#xff1a;2核2G 3M Ubuntu 20.04 我们平时在使用代码托管服务的时候&#xff0c;可能某些代码托管平台对成员有限制&#xff0c;或是由于内容原因会对…

教你如何清理 Docker 存储驱动的磁盘占用空间

Author&#xff1a;rab 有时候你会发现&#xff0c;你的 Docker 业务容器虽然做了数据持久化&#xff0c;且数据持久化的磁盘空间占用并不大&#xff0c;但是 Docker 的 Overlay2 目录占用却很大。我们知道 Overlay2 是 Docker 的存储驱动&#xff0c;也是 Docker 默认的存储驱…

Vue Router最佳实践,以确保你的Vue.js应用的路由管理清晰、可维护和高效

文章目录 路由结构设计命名路由动态路由参数导航守卫命名视图 (Named Views)懒加载路由错误处理 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入&#xff1a;全栈弄潮儿的个人社区…

3D动画制作和渲染需要什么样的硬件规格?

动画是艺术与技术的令人兴奋的融合&#xff0c;为无限的创造力提供了广阔的画布。为了将创意愿景变为现实&#xff0c;动画师需要适合其工艺的强大计算资源。每个动画项目都有不同的硬件需求&#xff0c;无论是制作简单的 2D 动画还是构建复杂的 3D 世界。因此&#xff0c;有抱…

企业架构LNMP学习笔记51

企业案例使用&#xff1a; 主从模式&#xff1a; 缓存集群结构示意图&#xff1a; 去实现Redis的业务分离&#xff1a; 读的请求分配到从服务器上&#xff0c;写的请求分配到主服务器上。 Redis是没有中间件来进行分离的。 是通过业务代码直接来进行读写分离。 准备两台虚…

十七、Webpack搭建本地服务器

一、为什么要搭建本地服务器&#xff1f; 目前我们开发的代码&#xff0c;为了运行需要有两个操作&#xff1a; 操作一&#xff1a;npm run build&#xff0c;编译相关的代码&#xff1b;操作二&#xff1a;通过live server或者直接通过浏览器&#xff0c;打开index.html代码…

Datastage部署与使用

Datastage部署与使用 - 码农教程 https://www.cnblogs.com/lanston/category/739553.html Streamsets定时拉取接口数据同步到HBase集群_streamsets api_webmote的博客-CSDN博客 【SDC】StreamSets实战之路-28-实战篇- 使用StreamSets实时采集指定数据目录文件并写入库Kudu_菜…

【C语言】指针的进阶(二)—— 回调函数的讲解以及qsort函数的使用方式

目录 1、函数指针数组 1.1、函数指针数组是什么&#xff1f; 1.2、函数指针数组的用途&#xff1a;转移表 2、扩展&#xff1a;指向函数指针的数组的指针 3、回调函数 3.1、回调函数介绍 3.2、回调函数的案例&#xff1a;qsort函数 3.2.1、回顾冒泡排序 3.2.1、什么是qso…

构建工具Webpack简介

一、构建工具 当我们习惯了Node中使用ES模块化编写代码以后&#xff0c;用原生的HTML、CSS、JS这些东西会感觉到各种不便。比如&#xff1a;不能放心的使用模块化规范&#xff08;浏览器兼容性问题&#xff09;、即使可以使用模块化规范也会面临模块过多时的加载问题。 这时候…

基于uniapp开发 软盒APP系统源码 软件库系统源码 全开源

软盒APP前端-基于uniapp&#xff0c;一个开源的软件库系统 前端开源地址&#xff1a;软盒APP前端-基于uniapp: 软盒APP前端-基于uniapp (gitee.com) 更新说明 更新日期&#xff1a;2023.07.24 v1.0.8.23724 1.修复部分接口 2.删除根据标签获取软件列表接口&#xff0c;整合…

JDBC和DBUtils框架的使用

课程目录 一、JDBC概述 二、JDBC基本操作 三、使用PreparedStatement处理CRUD 四、数据库连接池 五、Apache的DBUtils 六、Dao类 一、JDBC概述 1. 为什么需要JDBC 没有JDBC时&#xff1a; 有了JDBC后&#xff1a; 2. JDBC概述 JDBC&#xff1a;Java Database Conn…