白话Kubernetes网络

1 Kubernetes 网络介绍

Kubernetes 网络是一个系统,能够使不同集群内外的组件相互通信。这个系统会处理许多情况,其中重要的情况包括 Pod 之间的通信、Service 的通信以及集群如何处理来自外部的流量。

由于 Kubernetes 是分布式系统,因此它的网络平面跨越了集群的所有物理节点。Kubernetes 使用一个虚拟重叠网络,为集群资源提供平面的连接结构。这个虚拟重叠网络使得集群内部的资源能够相互连接,不需要考虑它们所处的物理节点。

以下是一个 Kubernetes 网络示意图:

图片

Kubernetes 网络会自动分配 IP 地址、设置 DNS 名称和连接端口到开发者的 Pod 和 Service。通常情况下,在使用 Kubernetes 时,开发人员无需在网络或节点主机上手动处理这些任务。

Kubernetes 网络模型会为每个 Pod 分配一个在集群内唯一的 IP 地址。这样,Pod 可以使用它们的 IP 地址相互通信,不用进行额外的设置,例如网络地址转换(NAT)。

这个基本设置通过 Kubernetes 的 Service 模型得到了改进。Service 模型允许将流量导向一组 Pod 中的任意一个,并且还包括网络控制方式,例如网络策略。网络策略可以防止 Pod 之间的不必要的通信,从而提高网络的安全性和可靠性。

2 传统虚拟机与 Kubernetes 网络的区别

Kubernetes 网络使用了已知的网络概念,并将其应用到 Kubernetes 集群环境中。与传统的物理设备和虚拟机(VM)网络模型相比,Kubernetes 网络更简单、更均匀、自动化程度更高。

在过去,开发人员需要手动设置新端点,包括配置 IP 地址、在防火墙中打开端口以及设置 DNS 路由。但是,在使用 Kubernetes 时,开发者不再需要执行这些操作,Kubernetes 会自动为开发者的集群任务执行所有这些操作。

开发人员和运营人员不需要了解网络设置的细节,即可部署资源并使其对他人可用。这使得设置、维护和保持安全要求的最新状态变得更加容易,因为所有管理都可以在 Kubernetes 本身中执行。

3 Docker 与 Kubernetes 网络的区别

由于已解释了虚拟机网络和 Kubernetes 网络之间的区别,这里需要提到 Docker 网络。

Kubernetes 的网络设计非常简单、平面,很适合分布式系统。在这个设计中,每个 Pod 都可以与其他任何 Pod 通信,即使它们位于不同的物理机器(节点)上。

Docker 主要用于在单个机器上运行容器,因此对网络的处理方式有所不同。默认情况下,Docker 将所有容器连接到一个称为桥接的网络中,该网络将它们连接到开发者的计算机。但是,开发者也可以为自己的容器设置各种类型的网络。这些网络包括一个桥接网络(连接相同计算机上的容器)、一个主机网络(允许容器直接使用您计算机的网络)以及一个重叠网络(创建多台机器上的网络,这对于 Docker Swarm,用于管理多个容器的工具,是必需的)。

Docker 容器在同一个网络中时,它们可以相互通信。每个容器都有自己的 IP 地址和 DNS 名称,仅在网络内部使用。这样其他网络中的容器就可以连接到它们。但是,Docker 不会自动设置从开发者的计算机到容器的连接(端口映射),开发者需要在启动容器时手动设置这些连接。

Docker 和 Kubernetes 在网络方面都有一些相似之处,但它们各自有自己的使用场景和网络设计。Docker 主要用于在单台机器上运行容器,因此它的网络设计更简单,使用桥接模式来连接容器。而 Kubernetes 则是为分布式系统设计的,因此它需要一个更复杂的网络设计来连接系统的不同部分,即使它们不在同一台机器上,也能够相互通信。因此,Kubernetes 使用了重叠网络来实现这一点。

Docker 和 Kubernetes 在容器隔离方面有所不同。在 Docker 中,可以通过将容器放在不同的网络中来阻止它们相互通信。而在 Kubernetes 中,所有 Pod 都会自动加入到同一个重叠网络中。因此,为了控制哪些 Pod 可以相互通信,Kubernetes 使用网络策略来管理网络中的流量。这种方式可以更细致地控制 Pod 之间的通信,提高了网络的安全性和可控性。

4 Kubernetes 网络架构

Kubernetes 网络构建于一个简单、平面的结构之上,其主要特点如下:

  • 每个 Pod 都会获得自己的 IP 地址。
  • 节点具有一个主网络空间(根网络命名空间),它连接 Pod 的网络接口。这意味着无论哪个节点上的 Pod,都可以使用 IP 地址相互通信。
  • 不需要进行网络地址转换(NAT)。
  • 每个 Pod 都有自己的网络空间和接口。与 Pod 的所有通信都通过其特定的网络接口进行。
  • 整个集群的网络层在节点级别连接网络空间。这确保在不同节点之间正确移动流量。
  • 通常,不需要手动链接 Pod 端口到节点。但是,如果有必要,可以通过为 Pod 分配特定端口(hostPort)来实现此目的。

这些原则使 Kubernetes 网络具有可预测和一致的特性,无论是对使用集群的用户还是对管理员都是如此。Kubernetes 设置的系统确保所有 Pod 都可以可靠连接到网络,无需手动设置。

5 分配 IP 地址给 Pod

Kubernetes 使用一种称为无类域间路由(CIDR)的方法为 Pod 分配 IP 地址。这个系统决定了 pod 可以使用的 IP 地址范围。每个 pod 都会从该范围内获得一个唯一的 IP 地址,这个 IP 地址是特定于开发者的集群的。当设置新的集群网络时,开发者需要选择一个可用的 IP 地址范围(CIDR 范围)。

此外,许多向 Kubernetes 添加网络功能的工具(网络插件)可以让开发人员更细致地管理 IP 地址。使用这些工具,可以选择特定的 IP 地址、IP 地址的一部分或它们的组。这在处理更复杂的网络设置时非常有用。

6 Kubernetes 集群中的 DNS

Kubernetes 集群包括内置的 DNS 支持。CoreDNS 是最受欢迎的 Kubernetes DNS 提供商之一,并且在许多 Kubernetes 分发版中默认启用。

Kubernetes 会为 Pod 和 Service 自动分配 DNS 名称,格式如下:

  • Pod — pod-ip-address.pod-namespace-name.pod.cluster-domain.example(例如 10.244.0.1.my-app.svc.cluster.local)
  • Service — service-name.service-namespace-name.svc.cluster-domain.example(例如 database.my-app.svc.cluster.local)

运行在 Pod 中的应用程序通常应该使用它们的 DNS 名称配置与 Service 通信。名称是可预测的,而 Service 的 IP 地址会随着 Service 被删除和替换而改变。

7 使用网络策略的 Kubernetes 网络隔离

在 Kubernetes 中,默认情况下所有的 Pod 都可以相互通信。这在某些情况下可能会带来安全风险,尤其是在用于多个分离应用程序、环境、团队或客户的集群中。需要采取适当的措施来控制 Pod 之间的网络通信以保护集群的安全性,。

为了管理这一点,Kubernetes 有个称为网络策略的东西。这些是开发人员可以设置的规则,用于控制 Pod 如何发送和接收流量(入口和出口)。例如,可以创建一个策略,该策略会停止所有流量到标记为 app-component:database 的 Pod,除非流量来自标记为 app-component:api 的 Pod。这是控制哪些 Pod 可以相互通信的方式,以提高安全性。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app-component: database
  policyTypes:
    - Ingress
  ingress:
    - from:
      - podSelector:
          matchLabels:
            app-component: api

在 Kubernetes 中,最好为所有 Pod 创建网络策略。这些策略有助于保护集群,防止可能受损的 Pod 向其他附近的 Pod 发送有害流量。这为开发人员的 Kubernetes 环境增加了一层额外的安全性。

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

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

相关文章

Git 版本控制 常用操作和项目应用

一、前言 1、何为版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 Git是目前最先进的分布式版本控制系统。 maven:jar包管理工具 版本管理工具:Git、Svn 2、Git & SVN对比 …

VUE项目目录与运行流程(VScode)

各目录对应名称含义 main.js(导入App.vue,基于App.vue创建结构渲染index.html) //核心作用:导入App.vue,基于App.vue创建结构渲染index.html//1.导入Vue核心包 import Vue from vue//2.导入App.vue根组件 import App f…

QT开发低功耗蓝牙BLE连接ECB02模块进行数据收发

时间记录:2024/1/22 一、注意点 (1)pro文件中引入bluetooth模块 (2)安卓端运行时需要同步打开定位功能才能扫描到蓝牙设备 (3)mingw套件不能在Windows上运行,需要使用MSVC套件编译…

UE5 C++学习笔记 FString FName FText相互转换

1.FString 是UE里的String。最接近std::string, 唯一可以修改的字符串类型。性能更低 TEXT(string) TEXT宏,作用是将字符串转换成Unicode,切记UE中使用字符串输出要使用该宏 2. FName 是UE里特有的类型。它更注重于表示名称不区分大小写,不…

c++学习第十一讲---文件操作

文件操作&#xff1a; c中对文件操作需要包含头文件 < fstream > 文本文件&#xff1a;以ASCII码形式储存 二进制文件&#xff1a;以二进制文件储存&#xff08;读不懂&#xff09; 操作文件三大类&#xff1a; 读&#xff1a;ifstream ; 写&#xff1a;ofstream ; 读…

旅游网站day13

1. 完善首页 1.1 首页banner查询接口 1.2 搜索服务 集成ES 1. 方式1&#xff1a;数据独立存储与独立搜索 2. 方式2&#xff1a;条件搜索与主键查询为搜索模块搭建一个服务 为什么需要api? 因为搜索也需要模型对象。 导入es依赖&#xff1a; 搜索api&#xff1a; ES工具类…

《WebKit 技术内幕》学习之十(1): 插件与JavaScript扩展

虽然目前的浏览器的功能很强 &#xff0c;但仍然有其局限性。早期的浏览器能力十分有限&#xff0c;Web前端开发者希望能够通过一定的机制来扩展浏览器的能力。早期的方法就是插件机制&#xff0c;现在流行次啊用混合编程&#xff08;Hybird Programming&#xff09;模式。插件…

transformer优化(二)-DETR 学习笔记

论文地址&#xff1a;https://arxiv.org/pdf/2005.12872.pdf 代码地址&#xff1a;https://github.com/bubbliiiing/detr-pytorch https://github.com/facebookresearch/detr 1.是什么&#xff1f; DETR&#xff08;Detection Transformer&#xff09;是一种基于Transforme…

rocketmq4.9.4有bug,生产勿用

周一早上,领导发来消息:xxxx用户:您有服务器因攻击被限制访问部分目的端口&#xff0c;详细信息请看https 排查了服务器上的异常进程后,与阿里云沟通得知,被人利用rocketmq的漏洞攻击了 服务器中毒的原因 您服务器中运行的 rocketmq 是 4.9.4 版本&#xff0c;该版本存在远程…

【.NET Core】多线程之线程池(ThreadPool)详解(一)

【.NET Core】多线程之线程池&#xff08;ThreadPool&#xff09;详解&#xff08;一&#xff09; 文章目录 【.NET Core】多线程之线程池&#xff08;ThreadPool&#xff09;详解&#xff08;一&#xff09;一、概述二、线程池的应用范围三、线程池特性3.1 线程池线程中的异常…

旅游项目day14

其他模块数据初始化 搜索实现 请求一样&#xff0c;但是参数不一样&#xff0c;根据type划分。 后台需要提供一个搜索接口。 请求分发器&#xff1a; 全部搜索 目的地搜索 精确搜索、无高亮展示 攻略搜索 全文搜索、高亮显示、分页 游记搜搜 用户搜索 丝袜哥

Python实现Lasso回归模型

• Tibshirani(1996)提出了Lasso(The Least Absolute Shrinkage and Selectionator operator)算法。 • 通过构造一个一阶惩罚函数获得一个精炼的模型&#xff1b;通过最终确定一些指标&#xff08;变量&#xff09;的系数为零&#xff08;岭回归估计系数等于0的机会微乎其微&a…

Mysql--创建数据库(1)

我们可以在登陆 MySQL 服务后&#xff0c;使用 create 命令创建数据库&#xff0c;语法如下: CREATE DATABASE 数据库名;以下命令简单的演示了创建数据库的过程&#xff0c;数据名为 R OB: [roothost]# mysql -u root -p Enter password:****** # 登录后进入终端mysql>…

什么是美颜SDK:解密视频美颜SDK背后的图像处理算法

美颜SDK是一种集成到应用程序中的工具包&#xff0c;能够通过图像处理算法实时改善或修改用户的面部外观。在本文中&#xff0c;我们将深入探讨美颜SDK的基本概念&#xff0c;并解密其背后的图像处理算法。 一、美颜SDK的基本概念 美颜SDK的应用范围广泛&#xff0c;涵盖了视…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第1章 统计学习方法概论

文章目录 第1章 统计学习方法概论1.1 统计学习1&#xff0e;统计学习的特点2&#xff0e;统计学习的对象3&#xff0e;统计学习的目的4&#xff0e;统计学习的方法1.2.1 基本概念1.2.2 问题的形式化 1.3 统计学习三要素1.3.1 模型1.3.2 策略1.3.3 算法 1.4 模型评估与模型选择1…

助力焊接场景下自动化缺陷检测识别,基于YOLOv8【n/s/m/l/x】全系列参数模型开发构建工件表面焊接裂纹缺陷检测识别分析系统

焊接是一个不陌生但是对于开发来说相对小众的场景&#xff0c;在工件表面焊接场景下常常有对工件表面缺陷智能自动化检测识别的需求&#xff0c;工业AI结合落地是一个比较有潜力的场景&#xff0c;在我们前面的博文开发实践中也有一些相关的实践&#xff0c;感兴趣的话可以自行…

SpringBoot3.1.7集成Kafka和Kafka安装

一、背景 我们在很多系统开发都需要用到消息中间件&#xff0c;目前来说Kafka凭借其优秀的性能&#xff0c;使得它的使用率已经是名列前茅了&#xff0c;所以今天我们将它应用到我们的系统 二、版本选择 在使用一个中间件一定要考虑版本的兼容性&#xff0c;否则后面会遇到很…

搜索与图论第五期 拓扑序列

前言 拓扑排序是非常重要的一部分&#xff0c;希望大家都能够手撕代码&#xff01;&#xff01;&#xff01;&#xff08;嘿嘿嘿&#xff09; 一、拓扑排序定义&#xff08;百度须知嘿嘿嘿&#xff09; 拓扑排序 拓扑排序是一种对有向无环图&#xff08;Directed Acyclic Gra…

开始学习vue2基础篇(指令)

一、 内容渲染指令 > {{}} 模板渲染&#xff08;模板引擎&#xff09; 1. {{数据绑定}} 2. {{简单计算}} 3. {{简单逻辑运算}}&#xff08;三元运算&#xff09; 4. {{做简单 js 判断}} 注意&#xff1a;不能写语句、不能解析 html 渲染、不能放在在属性身上 > v-…

菜鸟导入导出assetbundle

因为菜鸟不会用unity c#什么的&#xff0c;所以最后参考贴吧的方法用的是UABE(Unity Assets Bundle Extractor)和UABEA(Unity Assets Bundle Extractor Avalonia) 可以去github上下载 对于txt、xml什么的可以直接改&#xff0c;但是byte文件里还是会有一些类似乱码的东西&…