草庐IT

图解虚拟私有云 VPC

Charles__Yin 2023-04-12 原文

图解虚拟私有云 VPC

虚拟私有云简介

虚拟私有云(Virtual Private Cloud,VPC)为公有云用户提供了一个安全、隔离的私有网络环境,用户可以在VPC中按需部署云服务器、云数据库、云存储等云资源。VPC提供丰富的网络服务功能,例如子网、安全组、网络ACL、路由表、DNS,同时提供外部网络访问能力,例如基于VPC对等连接实现VPC互访、基于公网IP实现访问公网、基于IPSec VPN、专线网关实现VPC和本地互访。

图片来源:华为云帮助中心,https://support.huaweicloud.com/productdesc-vpc/

核心组成

虚拟私有云VPC由一个私有网络、路由表、和至少一个子网组成;

  • 私有网络:用户在网络控制台创建虚拟私有云VPC时,需要指定虚拟私有云VPC使用的私有网段,各大云服务商均支持IANA组织划分的标准私有网段(部分云服务商可能会占用私有网段的部分IP地址段,用户无法配置使用已占用子网段),私有网络IP段设置后无法修改,建议用户在使用前做好IP地址规划。

    私有IP地址的范围分别是,10.0.0.0/8、172.16.0.0/12、192.168.0.0/16:

    A类地址范围:10.0.0.0—10.255.255.255;

    B类地址范围:172.16.0.0—172.31.255.555;

    C类地址范围:192.168.0.0—192.168.255.255。

  • 路由表:顾名思义,路由表是用来控制虚拟私有云的网络流量策略,用户在创建虚拟私有云VPC时,系统会自动生成默认路由表,实现同一个VPC下的所有子网互通。如果用户需要自定义路由策略以满足复杂的网络访问策略,支持用户可以创建自定义路由表并添加路由策略。

  • 子网:子网是虚拟私有云VPC里的IP地址块,同一个VPC内子网网段不可重复,用户可以通过子网划分进行合理规划IP地址资源,VPC里的所有云资源(云服务器、云数据库)必须部署在子网内。

服务能力

经过梳理和对比主流公有云服务商(AWS、阿里云、华为云),VPC承担云上业务的基础运行环境,提供了丰富的服务能力,满足用户多场景需求,主要服务能力可分为私有网络、安全访问控制、外部网络访问、审计和监控四大类。

私有网络

  • VPC实例:为用户的云资源构建隔离、自主配置和管理的虚拟网络环境。用户可根据业务规划创建多个不同的VPC,修改VPC基本信息,,满足用户业务和维护管理需求。
  • 私有网段:用户在创建VPC时需要指定该VPC的私有网段,如当前私有网段不满足业务需求时支持添加拓展私有网段。
  • 子网:子网是VPC内的IP地址快,VPC内的所有云资源都必须部署在子网内,子网支持创建、修改和删除操作。
  • 路由表:路由表定了了VPC的路由规则,路由规则用于将目标网段的流量路由至指定的目的地,支持添加、修改自定义路由规则。
  • ipv4/ipv6双栈:支持云资源同时拥有ipv4和ipv6地址,满足ipv4和ipv6环境网络访问需求。
  • 虚拟IP:虚拟IP(Virtual IP Address,VIP)是一个浮动的IP地址,不会固定在指定的弹性网卡上,VIP通过绑定多个云服务器弹性网卡,同时搭配高可用软件(例如,keepalived)的ARP协议来宣告VIP和弹性网卡的绑定关系,实现高可用HA的目的,提高业务可用性。
  • 弹性网卡:弹性网卡(Elastic Network Interface,ENI)即虚拟网卡,弹性网卡拥有全局唯一的MAC地址,用于绑定云服务器提供网络服务能力,虚拟网卡支持自定义活和随机指定IP地址。
  • 辅助弹性网卡:辅助弹性网卡(Submission Elastic Network Intenfaces,SubENI)是弹性网卡的衍生资源,由于公有云平台对云服务器可绑定的弹性网卡有数量限制,可以通过辅助弹性网卡来解决弹性网卡数量不足的问题,使得单个云服务器可以挂载更多网卡,实现更加灵活的网络方案配置。

安全访问控制

  • 安全组:安全组是一种虚拟防火墙,云平台一般是基于iptables实现,安全组具备状态检测和数据包过滤能力,用于控制安全组内云资源的流量流出和流入,从而提升云资源的安全性,安全组规则支持三元组(协议、端口和对端地址)。

  • 网络ACL:网络ACL(Network Access Control List)提供VPC中的网络访问控制功能,控制VPC子网的数据流入和流出。网络ACL默认拒绝所有流量,用户需要按需配置流入和流出规则,支持五元组(源地址、目的地址、源端口、目的端口、协议),网络ACL是无状态的,需要同时配置流入和流出规则。

    安全组和网络ACL功能对比

    对比项安全组网络ACL
    作用范围对云资源实例生效对VPC子网生效
    策略对比支持允许支持允许和拒绝
    规则生效会评估所有安全组规则不评估所有规则,按照规则优先级进行匹配处理
    报文状态有状态,会话建立后默认放行相同会话数据包无状态,返回数据流必须有明确规则允许
  • IAM权限管理:用户可以利用公有云的统一身份认证管理服务(Identity and Access Management,简称IAM),对VPC进行精细化的权限管理,通过IAM权限管理,可以将VPC资源授权给其他用户管理,包括所有权限、只读权限、修改权限。

外部网络访问

  • 连接其他VPC:支持用户访问其他VPC的云资源,用来满足不同VPC业务网络访问需求,主要有3种场景:
    1. VPC对等连接:支持通过VPC对等连接打通同账号、跨账号两个VPC之间的网络连接,实现2个VPC之间私网互通,构建互联网络。
    2. VPN网关:支持通过VPN网关打通跨资源池两个VPC之间的网络连接,实现2个VPC之间私网互通,构建互联网络。
    3. 云连接:支持通过云连接打通跨资源池两个VPC之间的网络连接,实现2个VPC之间私网互通,构建互联网络。
  • 连接公网:支持用户云资源主动访问公网,获取公网资源、提供公网服务,可以通过弹性公网IP、NAT网关、弹性负载均衡等多种产品实现公网(互联网)访问。
    1. 弹性公网IP:有固定的IP地址,同时也是云资源访问公网的出口IP,支持共享带宽、共享流量包来降低用户成本。
    2. NAT网关:支持VPC内的多台云服务器共用NAT网关访问公网,支持配置SNAT和DNAT规则。
    3. 弹性负载均衡:基于端口提供四层和七层负载均衡能力,支持用户从公网通过弹性负载均衡访问云资源。
  • 连接本地IDC:对于自建本地IDC的用户,出于存量系统、安全等因素考虑,并非所有的业务都部署在云上,因此需要搭建混合云环境,实现云上VPC和云下IDC互联;
    1. 专线连接:结合电信运营商的专线资源,使用物理专线将VPC和用户本地IDC连接起来,专线具备低时延、高安全、链路专用等优点,可以提供高质量的网络连接服务。
    2. VPN网关:基于Internet使用加密隧道将VPC和本地IDC连接起来,网络质量依赖Internet环境,网络质量和稳定性低于专线连接,但是具备低成本、配置简单、即开即用等优点,对于预算不充足、业务要求不高的用户来说,是一个性价比较高的选择。
    3. 云连接:将要互通的本地IDC关联的云专线加载到云连接实例中,实现跨区域的VPC、IDC互联,构建云上、云下的互通企业网。

审计和监控

云上私有网络的运维管理对用户来说至关重要,用户需要知道云上私有网络环境的稳定性和安全性,第一时间知道私有网络异常信息进行故障处理、回溯。

  • VPC流日志:可以记录VPC网络中弹性网卡ENI(Elastic Network Interface)流入和流出的网络流量信息,帮助用户监控网络流量、排查网络故障、检查访问控制规则等。捕获的流日志信息包括账号id、源地址、源端口、目的地址、目的端口、协议号等等多个参数

  • VPC流量镜像:VPC流量镜像提供流量采集功能,可以复制经过弹性网卡且符合筛选条件的网络流量,复制后的镜像流量转发给指定的目的实例,用于流量检查、网络威胁监控和问题排查等场景,镜像流量包括筛选条件、镜像源、镜像目的、镜像会话。

  • 云监控:搭配公有云的云监控服务,用户可以通过云监控控制台方便的查看带宽、公网IP的流量情况,支持用户创建自定义的告警规则和通知策略,方便用户及时了解私有云的状况。

  • 云审计:通过云审计,用户可以记录虚拟私有云相关的操作事件,便于日后的查询、审计和回溯。

计费模式

公有云提供弹性、按需付费的云服务,对用户来说使用云产品必须要关心产品的计费模式,是免费资源还是付费资源?

当前公有云厂商都提供免费的虚拟私有云服务,个别附加服务会进行相应的收费,具体可以参考云服务商的帮助中心,详细标注了计费模式。

免费使用

  • 基础功能:私有网络、子网、路由表

  • 其他功能:弹性网卡、安全组、网络ACL、HAVIP、DNS、DHCP

付费使用

  • 弹性公网IP及带宽
  • VPC流日志
  • VPC流量镜像
  • 对等连接(部分云服务商免费)
  • NAT网关
  • VPN网关

约束和限制

公有云服务商尽快提供了弹性、按需、可扩展的云服务资源,在实际使用中,云服务商因平台架构、资源可用量及管控需要,用户在使用云服务的过程中,会遇到这样或那样的约束和限制,主要有配额限制、性能限制、操作限制、资费生效限制,在用云阶段要重点关注。

参考链接

有关图解虚拟私有云 VPC的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  4. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  5. Ruby - 如何处理子类意外覆盖父类(super class)私有(private)字段的问题? - 2

    假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案

  6. ruby - 从另一个私有(private)方法中使用 self.xxx() 调用私有(private)方法 xxx,导致错误 "private method ` xxx' called” - 2

    我正在尝试获得良好的Ruby编码风格。为防止意外调用具有相同名称的局部变量,我总是在适当的地方使用self.。但是现在我偶然发现了这个:classMyClass上面的代码导致错误privatemethodsanitize_namecalled但是当删除self.并仅使用sanitize_name时,它会起作用。这是为什么? 最佳答案 发生这种情况是因为无法使用显式接收器调用私有(private)方法,并且说self.sanitize_name是显式指定应该接收sanitize_name的对象(self),而不是依赖于隐式接收器(也是

  7. ruby - 如何在 Ruby 中实现私有(private)内部类 - 2

    来自Java,我正在尝试在Ruby中实现LinkedList。我在Java中实现它的通常方法是有一个名为LinkedList的类和一个名为Node的私有(private)内部类,其中LinkedList的每个对象都作为Node对象。classLinkedListprivateclassNodeattr_accessor:val,:nextendend我不想将Node类暴露给外部世界。然而,通过Ruby中的这个设置,我可以使用这个访问LinkedList类之外的私有(private)Node类对象-node=LinkedList::Node.new我知道,在Ruby1.9中,我们可以使用

  8. ruby 私有(private)类方法助手 - 2

    您好,我正在尝试创建一个帮助程序,用于将ruby​​方法大量定义为私有(private)类方法。通常,可以通过使用private_class_method键工作将方法定义为私有(private)类方法。但我想创建一个以下样式的助手:classPersondefine_private_class_methodsdodefmethod_oneenddefmethod_twoendendend我计划通过以下方式动态定义它,但根本不起作用:classObjectdefself.define_private_class_methods&blockinstance_evaldoprivate&bl

  9. ruby - 使实例方法在运行时私有(private) - 2

    在另一个对象中注册该对象后,我需要将一些实例方法设为私有(private)。我不想卡住对象,因为它必须保持可编辑状态,只是功能较少。而且我不想取消定义这些方法,因为它们是在内部使用的。我需要的是这样的:classMyClassdefmy_methodputs"Hello"endenda=MyClass.newb=MyClass.newa.my_method#=>"Hello"a.private_instance_method(:my_method)a.my_method#=>NoMethodErrorb.my_method#=>"Hello"有什么想法吗?

  10. ruby - Ruby 导入的方法总是私有(private)的吗? - 2

    最好用一个例子来解释:文件1.rb:deffooputs123end文件2.rb:classArequire'file1'endA.new.foo将给出错误“':调用了私有(private)方法'foo'”。我可以通过执行A.new.send("foo")来解决这个问题,但是有没有办法公开导入的方法?编辑:澄清一下,我没有混淆include和require。另外,我不能使用正常包含的原因(正如许多人正确指出的那样)是因为这是元编程设置的一部分。我需要允许用户在运行时添加功能;例如,他可以说“run-this-app--includefile1.rb”,应用程序的行为将根据他在file1

随机推荐