抽象网络设备的原理及使用 网络虚拟化是 Cloud 中的一个重要部分。作为基础知识,本文详细讲述 Linux 抽象出来的各种网络设备的原理、用法、数据流向。您通过此文,能够知道如何使用 Linux 的基础网络设备进行配置以达到特定的目的,分析出 Linux 可能的网络故障原因。 Linux 抽象网络设备简介 和磁盘设备类似,Linux 用户想要使用网络功能,不能通过直接操作硬件完成,而需要直接或间接的操作一个 Linux 为我们抽象出来的设备,既通用的 Linux 网络设备来完成。一个常见的情况是,系统里装
命令brctl主要运用于 Linux 网桥配置,Linux网关模式下将有线LAN和无线LAN共享网段实现局域网内互联;
硬件WAF,好像是很高端,很神秘的样子,而且很贵。今天向大家展示如何自己动手,DIY一台硬件WAF!
前面我们介绍了Docker容器的相关内容,Docker 的容器运行在宿主机的虚拟机上。这些虚拟机彼此独立,彼此之间没有任何接口,即容器彼此之间是逻辑隔离的。那么,如何实现容器的相互通信?这个就是我们今天要讲的内容。
首先要配置好 KVM 环境,上文已经详细说明,磁盘配置类似的使用 qemu-img create -f qcow2 ubuntu.qcow2 100G 命令创建虚拟磁盘,系统镜像可以去官网下载:
在Linux下, 通常使用netem或bridge来模拟网络不稳定情况。 在模拟过程中, 最好使用虚拟机。 如果是远程机器, 那么网络环境模拟需要两块网卡, 而桥模拟最好使用三块网卡。 就是需要附加一个网卡, 用作管理。
KVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。 KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。
容器网络实质上是由 Dokcer 为应用程序所创造的虚拟环境的一部分,它能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP 协议栈、端口套接字、IP 路由表、防火墙等等与网络相关的模块。
Evth-pair就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连.正因为这个特性,evth-pair 充当一个桥梁,连接各种虚拟网络设备。
(1)kvm只支持x86平台 (2)依赖于 HVM,inter VT AMD-v
在IPVS: How Kubernetes Services Direct Traffic to Pods一文中,作者给出了一个简单的组网(如下)来模拟kubernetes是如何使用IPVS进行通信的。
如何你想为你的虚拟机分配 IP 地址并使其可从你的局域网访问,则需要设置网络桥接器。默认情况下,虚拟机使用 KVM 创建的专用网桥。但你需要手动设置接口,避免与网络管理员发生冲突。
Vagrant是一个构建和管理虚拟机的工具,使用Vagrant可以非常方便的构建、启动、关闭或者复制多个相同的虚拟机环境
docker目前采用的是标准的C/S架构,client和service即可以运行在一台机器上,也可以在不同机器上通过socker和RESTful API来进行通信。
内核模块导出了一个名为/dev/kvm的设备,该设备将虚拟机的的地址空间独立于内核或者任何应用程序的地址空间
Kind 是什么? 这里就不复读了,大家可以直接查看官方文档,下面是我使用 Kind 碰到的问题,和解决的过程。
我使用docker至今已有一段时间了,与绝大部分的人一样,我被docker强大的功能和易用性深深的折服。简单方便是docker的核心之一,它强大的功能被抽象成了非常简单的命令。当我在使用和学习docker的时候,我很想知道docker在后台都做了一些什么事情,特别是在网络这一块(我最感兴趣的一块)。 我找到了很多关于创建和操作容器网络的文档,但是关于docker如何使网络工作的却没有那么多。 Docker广泛使用linux iptables和网桥接口,这篇文章是我如何用于创建容器网络的总结,大部分信息来
KVM(Kernel-based Virtual Machine) ,基于内核的虚拟机,配合QEMU(处理器虚拟软件),需要CPU支持虚拟化技术(并且在BIOS里打开虚拟化选项),效率可达到物理机的80%以上。此外,它对SMP的支持很好。
由上图我们可以看到创建的网络ID为4554d78082da ,使用ip addr查看本机网络:
IP层叫分片,TCP/UDP层叫分段。网卡能做的事(TCP/UDP组包校验和分段,IP添加包头校验与分片)尽量往网卡做,网卡不能做的也尽量迟后分片(发送)或提前合并片(接收)来减少在网络栈中传输和处理的包数目,从而减少数据传输和上下文切换所需要的CPU计算时间。
KVM(Kernel-based Virtual Machine)是一种开源的虚拟化解决方案,允许在 Linux 操作系统上创建虚拟机。在 Linux 上安装 KVM 很简单,本文将为您提供安装 KVM 的详细步骤。
Podman是一个无守护进程、无根的容器引擎,允许开发人员和运行容器的工作负载的用户在Linux系统上运行OCI容器。Podman提供了与Docker类似的命令行接口,使用户能够轻松地从Docker迁移到Podman。Podman不需要守护进程,可以直接与容器运行时和镜像进行交互,从而提高了安全性和性能。
特别说明:本文于2015年基于OpenStack M版本发表于本人博客,现转发到公众号。因为时间关系,本文部分内容可能已过时甚至不正确,请注意。
为了使虚拟机与外部进行网络通信,需要为虚拟机配置网络环境。KVM虚拟化支持Linux网桥、Open vSwitch网桥等多种类型的网桥。如图所示,数据传输路径为"虚拟机 -> 虚拟网卡设备 -> Linux网桥或Open vSwitch网桥 -> 物理网卡"。
首先,bridge是一个虚拟网络设备,所以具有网络设备的特征,可以配置IP、MAC地址等;其次,bridge是一个虚拟交换机,和物理交换机有类似的功能。
当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。
eBPF技术风靡当下,eBPF字节码正以星火燎原之势被HOOK在Linux内核中越来越多的位置,在这些HOOK点上,我们可以像编写普通应用程序一样编写内核的HOOK程序,与以往为了实现一个功能动辄patch一整套逻辑框架代码(比如Netfilter)相比,eBPF的工作方式非常灵活。
当Docker启动时,会自动在主机上创建一个名为docker0虚拟网桥,实际上是Linux的一个bridge,可以理解为一个软件交换机,它会在挂载到它的网口之间进行转发。 同时,Docker随机分配一个本地未占用的私有网段中的一个地址给docker0接口。比如典型的172.17.0.1,掩码为255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。 当创建一个Docker容器的时候,同时会创建了一对veth pair接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即一端在本地并被挂载到docker0网桥,名称以veth开头(例如vethb305ad8)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。 Docker创建了在主机和所有容器之间一个虚拟共享网络。
很早以前就听说过pipework,据说面对一些复杂的网络配置场景,docker自带的网络模式就有些力不从心了,很多人都在用pipework。今天终于能够抽出时间研究一下它。 docker默认支持的网络模式 除了overlay网络外,docker默认支持4种网络模式,如下: host模式,使用–net=host指定,容器和宿主机共用一个Network Namespace。 container模式,使用–net=container:NAME_or_ID指定,容器和已经存在的一个容器共享一个Network Nam
概述 通过Docker部署了,mysql还有mongodb。 发布服务端后发现不知道如何内网访问数据库,研究一下开搞。 为什么要打通容器目录 对于复杂的应用,不可避免需要多个服务部署在多个容器中,并且服务间存在相互间通信的情况。我不想在外网访问mysql,只在内网负责调用。 一、docker brctl 在安装好docker后,docker将创建一个linux网桥docker0,它在内核层连通了其他的物理或虚拟网卡,也就是所有容器和本地主机都放到同一个物理网络。我们可以通过 brctl 命令查看网桥的信息
今天跟大家分享Rainbond基于Midonet的多租户网络设计和思考。Rainbond对于多租户的支持一个最大的构成是多租户网络支持,Rainbond公有云要求每个租户之间网络必须隔离,形成相互安全的租户网络环境。对于不同的SDN网络,实现方式各不相同,例如Calico从路由规则上隔离,Midonet可以为不同租户创建子网等。Rainbond底层产用Kubernetes作为应用运行方案,其采用标准的CNI网络接入规范,这一点对于我们为Rainbond支持多种网络提供了标准化支持。对于中小集群用户,Rain
今天跟大家分享Rainbond基于Midonet的多租户网络设计和思考。Rainbond对于多租户的支持一个最大的构成是多租户网络支持,Rainbond公有云要求每个租户之间网络必须隔离,形成相互安全的租户网络环境。对于不同的SDN网络,实现方式各不相同,例如Calico从路由规则上隔离,Midonet可以为不同租户创建子网等。Rainbond底层产用Kubernetes作为应用运行方案,其采用标准的CNI网络接入规范,这一点对于我们为Rainbond支持多种网络提供了标准化支持。对于中小集群用户,Rainbond推荐使用基于Calico的网络方案,作为Kubernetes社区常用方案之一,本文不再详细介绍。对于大型集群或对租户网络隔离有严格要求的用户,我们使用基于Midonet的方案,这就是我们今天分享的重点。
在 Macvlan 出现之前,我们只能为一块以太网卡添加多个 IP 地址,却不能添加多个 MAC 地址,因为 MAC 地址正是通过其全球唯一性来标识一块以太网卡的,即便你使用了创建 ethx:y 这样的方式,你会发现所有这些“网卡”的 MAC 地址和 ethx 都是一样的,本质上,它们还是一块网卡,这将限制你做很多二层的操作。有了 Macvlan 技术,你可以这么做了。
本篇文章为大家分享一下Linux系统中使用nmcli 来创建/添加网桥的具体步骤,有需要的小伙伴可以参考一下。
本文以DHCP为例,介绍了network namespace的基本原理,以及他在OpenStack中的应用。 基本概念 1: Linux系统的全局资源 1)user:用户ID和组ID 2)uts:主机名和域名 3)pid:进程ID 4)mount:文件系统挂载点 5)network:网路资源 6)ipc:进程间通信 2:Linux Namespace Linux Namespaces提供了一种隔离系统全局资源的方法, 通过这个方法,每个namespace都了有一份独立的资源。这样,不同的进程在各自的n
Linux系统中如何使用 nmcli 来创建/添加网桥?本篇文章为大家分享一下Linux系统中 使用nmcli 来创建/添加网桥的具体步骤,有需要的小伙伴可以参考一下。
自从Docker容器出现以来,容器的网络通信就一直是被关注的焦点,也是生产环境的迫切需求。容器的网络通信又可以分为两大方面:单主机容器上的相互通信,和跨主机的容器相互通信。下面将分别针对这两方面,对容器的通信原理进行简单的分析,帮助大家更好地使用docker。前面已经在Docker容器学习梳理--基础知识(2)这一篇中详细介绍了Docker的网络配置以及pipework工具。 docker单主机容器通信 基于对net namespace的控制,docker可以为在容器创建隔离的网络环境,在隔离的网络环境下,
Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,成为Container-IP,同时Docker’网桥是 每个容器的默认网关。 因为同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
和普通的 VPS 相比,裸金属服务器属于物理服务器,我的数据和其他用户数据做到了物理隔离,同时服务器本身是支持二次虚拟化的。
在上一篇文章中我们概括了k8s集群网络大致包含哪些方面,包括服务在网络中的负载均衡方式(iptable和ipvs),以及underlay和overlay的组网。在这里我们介绍宿主内的容器网络,当然我们还是以docker环境为例,介绍docker宿主环境中的容器网络。
我有一个使用网卡 eno1 的 “有线连接”。我的系统还有一个 VPN 接口。我将要创建一个名为 br0 的网桥,并连接到 eno1。
CNI(容器网络接口)是一种操作容器网络规范,包含方法规范,参数规范等。 CNI只关心容器的网络连接,在容器创建时分配网络资源,并在删除容器时删除分配的资源。因为这个焦点,CNI有广泛的支持,规格易于实现。CNI接口只需要实现两个方法,一个创建容器时调用,一个删除容器时调用。
本文将带大家了解 Kubernetes 的 kube-proxy 组件如何使用 iptables 将 service 流量随机发送到 Pod,目的是实现 service 所需的 iptables 规则。
权威指南第二章的内容,是 Kubernetes 有史以来最经久不衰的入门话题:安装。
相关原理概述 先来讲讲什么是CNI? CNI(容器网络接口)是一种操作容器网络规范,包含方法规范,参数规范等。 CNI只关心容器的网络连接,在容器创建时分配网络资源,并在删除容器时删除分配的资源。因为
ubuntu系统中如何使用 nmcli 来创建/添加网桥?本篇文章为大家分享一下ubuntu系统中 使用nmcli 来创建/添加网桥的具体步骤,有需要的小伙伴可以参考一下。
Docker Bridge 网络是 Docker 默认使用的网络类型之一,它允许多个容器在同一主机上通过虚拟网桥进行通信。在本文中,我们将深入探讨 Docker Bridge 网络的实现原理。
Kubernetes 中的 Service 就是一组同 label 类型 Pod 的服务抽象,为服务提供了负载均衡和反向代理能力,在集群中表示一个微服务的概念。kube-proxy 组件则是 Service 的具体实现,了解了 kube-proxy 的工作原理,才能洞悉服务之间的通信流程,再遇到网络不通时也不会一脸懵逼。
使用Linux上的网络设备模拟真实网络 随着云计算技术的发展,如何以类似物理网络的方式分割虚拟网络成为热点,物理网络也引入了更多支持虚拟化的网络技术,使得问题更加复杂。本文将阐述在 Linux 上如何模拟出传统网络及支持虚拟化技术的网络 ,并介绍其原理。 虚拟化环境中的网络问题 在提供 IaaS 服务的云计算环境中,每个用户都能得到一个虚拟的计算机,而这些虚拟机器以密集的方式运行在后台服务器集群中。虚拟机的一个特点是提供给用户类似于物理机器的体验,而现实世界中的物理机器能通过各种网络拓扑结构组网。如何在
领取专属 10元无门槛券
手把手带您无忧上云