当前位置: 首页 > 编程日记 > 正文

使用 Azure CLI 管理 Azure 虚拟网络和 Linux 虚拟机

Azure 虚拟机使用 Azure 网络进行内部和外部网络通信。 本教程将指导读者部署两个虚拟机,并为这些 VM 配置 Azure 网络。 本教程中的示例假设 VM 将要托管包含数据库后端的 Web 应用程序,但本教程并不介绍如何部署应用程序。 本教程介绍如何执行下列操作:

  • 部署虚拟网络
  • 在虚拟网络中创建子网
  • 将虚拟机附加到子网
  • 管理虚拟机公共 IP 地址
  • 保护传入的 Internet 流量
  • 保护 VM 到 VM 的流量

Note

在 Azure 中国区使用 Azure CLI 2.0 之前,请先运行 az cloud set -n AzureChinaCloud 来改变云环境。如果想切回国际版 Azure,请再次运行 az cloud set -n AzureCloud

如果选择在本地安装并使用 CLI,本教程要求运行 Azure CLI 2.0.4 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI 2.0。

VM 网络概述

Azure 虚拟网络在虚拟机、Internet 与其他 Azure 服务(例如 Azure SQL 数据库)之间实现安全网络连接。 虚拟网络分解为称作“子网”的逻辑段。 子网用于控制网络流,并充当安全边界。 部署 VM 时,该 VM 通常包含一个附加到子网的虚拟网络接口。

部署虚拟网络

本教程将创建包含两个子网的单个虚拟网络。 一个前端子网用于托管 Web 应用程序,一个后端子网用于托管数据库服务器。

在创建虚拟网络之前,请先使用 az group create 创建一个资源组。 以下示例在“chinaeast”位置创建名为 myRGNetwork 的资源组。

Azure CLI复制
az group create --name myRGNetwork --location chinaeast 

创建虚拟网络

使用 az network vnet create 命令创建虚拟网络。 在本示例中,为名为 mvVnet 的网络分配了前缀为 10.0.0.0/16 的地址。 另外,还创建了名为 mySubnetFrontEnd、前缀为 10.0.1.0/24 的子网。 本教程稍后会将前端 VM 连接到此子网。

Azure CLI复制
az network vnet create \ --resource-group myRGNetwork \  --name myVnet \  --address-prefix 10.0.0.0/16 \  --subnet-name mySubnetFrontEnd \  --subnet-prefix 10.0.1.0/24 

创建子网

使用 az network vnet subnet create 命令将新子网添加到虚拟网络。 在本示例中,为名为 mySubnetBackEnd 的子网分配了前缀为 10.0.2.0/24 的地址。 此子网用于所有后端服务。

Azure CLI复制
az network vnet subnet create \  --resource-group myRGNetwork \  --vnet-name myVnet \  --name mySubnetBackEnd \  --address-prefix 10.0.2.0/24 

此时,已创建一个网络并将其分段为两个子网,其中一个子网用于前端服务,另一个用于后端服务。 下一部分将创建虚拟机并将其连接到这些子网。

了解公共 IP 地址

使用公共 IP 地址可在 Internet 上访问 Azure 资源。 本教程的此部分将创建一个 VM,用于演示如何使用公共 IP 地址。

分配方法

可以分配动态或静态公共 IP 地址。 默认情况下,将动态分配公共 IP 地址。 解除分配 VM 时,将释放动态 IP 地址。 在执行涉及到 VM 解除分配的任何操作期间,此行为会导致 IP 地址发生更改。

可将分配方法设置为静态,这可确保分配给 VM 的 IP 地址保持不变,即使该 VM 处于解除分配状态。 使用静态分配的 IP 地址时,无法指定 IP 地址本身。 该地址是从可用地址池中分配的。

动态分配

使用 az vm create 命令创建 VM 时,默认的公共 IP 地址分配方法为动态。 在以下示例中,已创建一个具有动态 IP 地址的 VM。

Azure CLI复制
az vm create \ --resource-group myRGNetwork \ --name myFrontEndVM \  --vnet-name myVnet \  --subnet mySubnetFrontEnd \  --nsg myNSGFrontEnd \  --public-ip-address myFrontEndIP \  --image UbuntuLTS \  --generate-ssh-keys 

静态分配

使用 az vm create 命令创建虚拟机时,包含 --public-ip-address-allocation static 参数可以分配静态公共 IP 地址。 本教程不会演示此操作,但是,下一部分介绍了如何将动态分配的 IP 地址更改为静态分配的地址。

更改分配方法

可以使用 az network public-ip update 命令更改 IP 地址分配方法。 在本示例中,前端 VM 的 IP 地址分配方法已更改为静态。

首先,请解除分配 VM。

Azure CLI复制
az vm deallocate --resource-group myRGNetwork --name myFrontEndVM 

使用 az network public-ip update 命令更新分配方法。 在本例中,--allocation-method 将设置为 static

Azure CLI复制
az network public-ip update --resource-group myRGNetwork --name myFrontEndIP --allocation-method static 

启动 VM。

Azure CLI复制
az vm start --resource-group myRGNetwork --name myFrontEndVM --no-wait 

无公共 IP 地址

通常,不需要通过 Internet 访问 VM。 若要创建一个不带公共 IP 地址的 VM,请使用 --public-ip-address "" 参数和一组空双引号。 本教程稍后将演示此配置

安全的网络流量

网络安全组 (NSG) 包含一系列安全规则,这些规则可以允许或拒绝流向连接到 Azure 虚拟网络 (VNet) 的资源的网络流量。 NSG 可以关联到子网或单个网络接口。 当 NSG 与网络接口关联时,NSG 只会应用到关联的 VM。 将 NSG 关联到子网时,规则适用于连接到该子网的所有资源。

网络安全组规则

NSG 规则定义要允许或拒绝哪些网络端口上的流量。 这些规则可以包括源和目标 IP 地址范围,以便控制特定系统或子网之间的流量。 NSG 规则还包括优先级(介于 1 和 4096 之间)。 将按优先级顺序来评估规则。 优先级为 100 的规则将在优先级为 200 的规则之前评估。

所有 NSG 都包含一组默认规则。 默认规则无法删除,但由于给它们分配的优先级最低,可以用创建的规则来重写它们。

  • 虚拟网络 - 从方向上来说,在虚拟网络中发起和结束的通信可以是入站通信,也可以是出站通信。
  • Internet - 允许出站通信,但阻止入站通信。
  • 负载均衡器 - 允许 Azure 的负载均衡器探测 VM 和角色实例的运行状况。 如果不使用负载均衡集,则可覆盖此规则。

创建网络安全组

可以在创建 VM 时使用 az vm create 命令创建网络安全组。 执行此操作时,会将 NSG 与 VM 网络接口相关联,并自动创建一个 NSG 规则来允许 22 端口上来自任何源的流量。 在本教程的前面部分中,已在前端 VM 上自动创建了前端 NSG。 也会为端口 22 自动创建 NSG 规则。

在某些情况下,预先创建 NSG 可能会有帮助,例如,在不应创建默认 SSH 规则时,或者应该将 NSG 附加到子网时。

使用 az network nsg create 命令创建网络安全组。

Azure CLI复制
az network nsg create --resource-group myRGNetwork --name myNSGBackEnd 

NSG 不会关联到网络接口,而是关联到子网。 在此配置中,附加到子网的任何 VM 将继承 NSG 规则。

使用新 NSG 更新名为 mySubnetBackEnd 的现有子网。

Azure CLI复制
az network vnet subnet update \  --resource-group myRGNetwork \  --vnet-name myVnet \  --name mySubnetBackEnd \  --network-security-group myNSGBackEnd 

现在,请创建附加到 mySubnetBackEnd 的虚拟机。 请注意,--nsg 参数的值为空双引号。 不需要在 VM 中创建 NSG。 VM 将附加到后端子网,该子网受预先创建的后端 NSG 的保护。 此 NSG 将应用到 VM。 另请注意,此处的 --public-ip-address 参数的值为空双引号。 此配置将创建一个不带公共 IP 地址的 VM。

Azure CLI复制
az vm create \ --resource-group myRGNetwork \ --name myBackEndVM \  --vnet-name myVnet \  --subnet mySubnetBackEnd \  --public-ip-address "" \  --nsg "" \  --image UbuntuLTS \  --generate-ssh-keys 

保护传入的流量

创建前端 VM 时,会创建一个 NSG 规则来允许端口 22 上的传入流量。 此规则允许与 VM 建立 SSH 连接。 对于本示例,也应该允许端口 80 上的流量。 此配置允许在 VM 上访问某个 Web 应用程序。

使用 az network nsg rule create 命令为端口 80 创建规则。

Azure CLI复制
az network nsg rule create \  --resource-group myRGNetwork \  --nsg-name myNSGFrontEnd \  --name http \  --access allow \  --protocol Tcp \  --direction Inbound \  --priority 200 \  --source-address-prefix "*" \  --source-port-range "*" \  --destination-address-prefix "*" \  --destination-port-range 80 

现在,只能在端口 22 和端口 80 上访问前端 VM。 其他所有传入流量将在网络安全组中被阻止。 可视化 NSG 规则配置可能很有帮助。 使用 az network rule list 命令返回 NSG 规则配置。

Azure CLI复制
az network nsg rule list --resource-group myRGNetwork --nsg-name myNSGFrontEnd --output table 

输出:

Azure CLI复制
Access    DestinationAddressPrefix      DestinationPortRange  Direction    Name                 Priority  Protocol    ProvisioningState    ResourceGroup    SourceAddressPrefix    SourcePortRange
--------  --------------------------  ----------------------  -----------  -----------------  ----------  ----------  -------------------  ---------------  ---------------------  ----------------- Allow * 22 Inbound default-allow-ssh 1000 Tcp Succeeded myRGNetwork * * Allow * 80 Inbound http 200 Tcp Succeeded myRGNetwork * * 

保护 VM 到 VM 的流量

也可以在 VM 之间应用网络安全组规则。 对于本示例,前端 VM 需要通过端口 22 和 3306 与后端 VM 端口通信。 此配置允许从前端 VM 建立 SSH 连接,并允许前端 VM 上的应用程序与后端 MySQL 数据库通信。 前端与后端虚拟机之间的其他所有流量应被阻止。

使用 az network nsg rule create 命令为端口 22 创建规则。 请注意,--source-address-prefix 参数指定了值 10.0.1.0/24。 此配置确保只允许来自前端子网的流量通过 NSG。

Azure CLI复制
az network nsg rule create \  --resource-group myRGNetwork \  --nsg-name myNSGBackEnd \  --name SSH \  --access Allow \  --protocol Tcp \  --direction Inbound \  --priority 100 \  --source-address-prefix 10.0.1.0/24 \  --source-port-range "*" \  --destination-address-prefix "*" \  --destination-port-range "22" 

现在,请为端口 3306 上的 MySQL 流量添加规则。

Azure CLI复制
az network nsg rule create \  --resource-group myRGNetwork \  --nsg-name myNSGBackEnd \  --name MySQL \  --access Allow \  --protocol Tcp \  --direction Inbound \  --priority 200 \  --source-address-prefix 10.0.1.0/24 \  --source-port-range "*" \  --destination-address-prefix "*" \  --destination-port-range "3306" 

最后,由于 NSG 包含的默认规则允许同一 VNet 中 VM 之间的所有流量,因此,可为后端 NSG 创建一个规则来阻止所有流量。 此处请注意,为 --priority 指定了值 300,此优先级低于 NSG 和 MySQL 规则的优先级。 此配置可确保仍允许 SSH 和 MySQL 流量通过 NSG。

Azure CLI复制
az network nsg rule create \  --resource-group myRGNetwork \  --nsg-name myNSGBackEnd \  --name denyAll \  --access Deny \  --protocol Tcp \  --direction Inbound \  --priority 300 \  --source-address-prefix "*" \  --source-port-range "*" \  --destination-address-prefix "*" \  --destination-port-range "*" 

现在,只能通过前端子网在端口 22 和端口 3306 上访问后端 VM。 其他所有传入流量将在网络安全组中被阻止。 可视化 NSG 规则配置可能很有帮助。 使用 az network rule list 命令返回 NSG 规则配置。

Azure CLI复制
az network nsg rule list --resource-group myRGNetwork --nsg-name myNSGBackEnd --output table 

输出:

Azure CLI复制
Access    DestinationAddressPrefix    DestinationPortRange    Direction    Name       Priority  Protocol    ProvisioningState    ResourceGroup    SourceAddressPrefix    SourcePortRange
--------  --------------------------  ----------------------  -----------  -------  ----------  ----------  -------------------  ---------------  ---------------------  ----------------- Allow * 22 Inbound SSH 100 Tcp Succeeded myRGNetwork 10.0.1.0/24 * Allow * 3306 Inbound MySQL 200 Tcp Succeeded myRGNetwork 10.0.1.0/24 * Deny * * Inbound denyAll 300 Tcp Succeeded myRGNetwork * * 

后续步骤

本教程介绍了如何创建和保护与虚拟机相关的 Azure 网络。 你已了解如何:

  • 部署虚拟网络
  • 在虚拟网络中创建子网
  • 将虚拟机附加到子网
  • 管理虚拟机公共 IP 地址
  • 保护传入的 Internet 流量
  • 保护 VM 到 VM 的流量

请继续学习下一教程,了解如何使用 Azure 备份保护虚拟机上的数据。

在 Azure 中备份 Linux 虚拟机

立即访问http://market.azure.cn

转载于:https://www.cnblogs.com/zangdalei/p/7845270.html

相关文章:

面向对象的内存分析

注意:成员属性是有默认的初始值。数据类型 默认的初始值int 0float 0.0fdouble 0.0char String null引用数据类型 …

ModuleNotFoundError: No module named ‘qcloud_cos‘

是腾讯云提供的一个Python SDK,用于与腾讯云对象存储(COS)服务进行交互。使用pip安装qcloud_cos报以下错误。这个错误表示Python无法找到名为。

java常见的四个运行时期的异常

空指针异常 数组越界异常 类型转换异常 无效参数异常

ASP.NET 4.0: 请求验证模式变化导致ValidateRequest=false失效

ASP.NET请求验证功能可以给我提供应用程序的安全保证,避免站点受到XSS的攻击。但是在一些情况下,我们需要禁用这个功能,比如我们需要使用HtmlEditor来让用户输入一些HTML文本,这时候ASP.NET 2.0允许我们可以通过在web.config设置v…

[CTO札记]从技术走向商业的3级转变

思想原创:老刀。

[Ubuntu] 安装/卸载 声卡驱动

卸载sudo apt-get --purge remove linux-sound-base alsa-base alsa-utils安装sudo apt-get install linux-sound-base alsa-base alsa-utils 可以这样来处理声卡驱动突然出现异常的情况。 转载于:https://www.cnblogs.com/davidhhuan/archive/2010/04/21/1716941.html

java异常类 Object类

1.Object类 Object类是所有类的父类,是最顶层的父类.当一个类没有直接继承其它父类时,这个类的直接父类就是Object类.class Person {...}等价于class Person extends Object {...} Object 里的equals方法: boolean equals(Object obj):判断当前对象与obj对象的地址是否一样,…

『TensorFlow』卷积层、池化层详解

一、前向计算和反向传播数学过程讲解 这里讲解的是平均池化层,最大池化层见本文第三小节 二、测试代码 数据和上面完全一致,自行打印验证即可。 1、前向传播 import tensorflow as tf import numpy as np# 输入张量为33的二维矩阵 M np.array([[[1], [-…

个人计算机用户隐私保护全接触(2)

在第一部分中,我们已经详细讨论了有关如何加固系统和应用数据加密来保护用户隐私的方式,现在,就跟雪源梅香一起了解其它保护用户隐私的方法。1、清除计算机当中的用户操作痕迹我们应当在使用完计算机后,对操作所产的痕迹进行全面清…

java日期相关的类正则表达式

常用的API Date、Math、DateFormat、Calendar、正则表达式 Data类 public class DateDeom {public static void main(String[] args) {//创建日期类的对象Date datenew Date();// 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。long timedate.getTim…

M_Map画南海水深地形图

数据来自Etopo1全球地形和水深数据。 其分为两个版本,Ice Surface和Bedrock,两个版本基本一致。不同之处在于在处理南极洲和Greenland地形时,前者给出的是加上冰盖层之后的高程,后者给出的是岩床的高程。 在每个子版本下又有多种数…

blackberry Jvm error 104 错误(Device Simulator)

把模拟器目录下的这个文件 **-fs.dmp 删掉或者搬个家就成啦,然后重启模拟器 每次启动它都会生成这个文件,具体原因还待研究 8300 GSM GPRS EDGE8310 8300 GPS8320 8300 Wi-Fi8330 8310 CDMA Ev-DO Video Recording (!)转载于:https://www.c…

关于Map的key值的问题

HashMap<StringBuffer,String> strmap new HashMap<>();StringBuffer snew StringBuffer("1");strmap.put(s,"1");s.append("2");System.out.println(strmap.get("1")); null 与之前研究的value值的问题一样&#xff0c;…

田志刚:要你共享,但不告诉你共享什么

案例所述的问题很典型&#xff0c;是国内各类机构做知识管理的一个典型&#xff1a;我需要你共享&#xff0c;但不告诉你共享什么。问题是&#xff0c;我也不知道你该共享什么。这样的结果就是共享出来的东西都没用也都有用&#xff0c;因为你根本没有标准&#xff0c;所以我说…

Oracle Data Guard 理论知识

RAC&#xff0c; Data Gurad&#xff0c; Stream 是Oracle 高可用性体系中的三种工具&#xff0c;每个工具即可以独立应用&#xff0c;也可以相互配合。 他们各自的侧重点不同&#xff0c;适用场景也不同。 RAC 它的强项在于解决单点故障和负载均衡&#xff0c;因此RAC 方案常用…

JavaScript脚本文件学习总结

javaScript 学习总结 什么是JavaScript和javaScript的特点 是一种解释型脚本语言&#xff08;代码不进行预编译&#xff09;&#xff0c;不需要进行编译&#xff0c;直接嵌套在HTML页面&#xff0c;将静态的页面转变成支持用户交互的动态页面。 文件类型是.js 特点 解释性&…

Git note

feat&#xff1a;新功能&#xff08;feature&#xff09; fix&#xff1a;修补bug docs&#xff1a;文档&#xff08;documentation&#xff09; style&#xff1a; 格式&#xff08;不影响代码运行的变动&#xff09;注意不是 css 修改 refactor&#xff1a;重构&#xff08;即…

说客是一种俗文化

说客是一种俗文化阿祥中国移动旗下的139.com社区改版&#xff0c;没有张扬&#xff0c;也没有滥发广告&#xff0c;还是引起了业内人士的广泛减少。为什么&#xff1f;以笔者之见&#xff0c;这个改版后的社区打出“说客”这张牌&#xff0c;是互联网文化的一个全新的创意&…

leetcode 203 Remove Linked List Elements

&#xfeff;&#xfeff;Remove all elements from a linked list of integers that have valueval. ExampleGiven: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val 6Return: 1 --> 2 --> 3 --> 4 --> 5 我的解法&#xff1a; // Linklist.cpp …

eclipse实用快捷键

eclipse的快捷键非常的多&#xff0c;全部记录一遍也不利于查看&#xff0c;记录一些比较实用的更加方便。 ctrl / 注释单行/取消注释 ctrl Z 回退一步 ctrl Y &#xff08;回退后&#xff09;前一步 ctrl S 保存 ctrl D 删除行 alt / 补全提示 ctrl …

集合 泛型 迭代器

什么是集合 集合与数组的区别 数组的长度是固定的&#xff0c;集合的长度是可变的数组中可以存储任何类型的元素&#xff08;基本类型和引用类型&#xff09;&#xff0c;集合只能存储引用类型的。 集合 在java中提供了很多的集合&#xff0c;因为用户要求存储不同接口的数据…

《监控》再起风云,连同创作中的《监控2》成功牵手影视公司

“监控”&#xff0c;辞海上的解释为&#xff1a;监测并进行控制。 “监控”&#xff0c;百度百科解释为&#xff1a;监控&#xff0c;职场谍战小说。 从2个月内超过230万人阅读的天涯热帖&#xff0c;到上市两月即获重印的畅销图书&#xff0c;神秘作者搏击带着他的《监控》在…

跟我学交换机配置(四)

以下内容摘自笔者最新图书《Cisco/H3C交换机配置与管理完全手册》。本书在51CTO上的样章试读地址为&#xff1a;http://book.51cto.com/art/200908/142118.htm 8.5.4 创建PVLAN 在IOS和CatOS系统交换机中都可以配置PVLAN&#xff0c;所以下面也分别予以介绍。 1. IOS系统交换机…

使用nc传输文件和目录【转】

方法1&#xff0c;传输文件演示&#xff08;先启动接收命令&#xff09; 使用nc传输文件还是比较方便的&#xff0c;因为不用scp和rsync那种输入密码的操作了把A机器上的一个rpm文件发送到B机器上需注意操作次序&#xff0c;receiver先侦听端口&#xff0c;sender向receiver所在…

假如有Thread1、Thread2、ThreaD3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?...

有两种方法&#xff1a; 第一种方法&#xff1a; 一般情况&#xff0c;我们实现多线程都是Thread或者Runnable(后者比较多)&#xff0c;但是&#xff0c;这两种都是没返回值的&#xff0c;所以我们需要使用callable(有返回值的多线程)和future(获得线程的返回值)来实现了。 /**…

ORA-00907:缺少右括号

在创建以下表的时候出现ORA-00907&#xff1a;缺少右括号的错误&#xff0c;最后发现是字符串类型写错了&#xff0c;VARCHAR2写成了VARCAHR2&#xff0c; /**//* DBMS name: ORACLE Version 9i2 *//* Created on: 2010-4-23 12:28:27 …

Java Web项目第二次总结

学生管理系统 问题 jQuery 不熟悉El需要复习servlet的内置对象 新认识的知识 利用servlet的 Session对象实现权限的验证。它的作用是:只能通过登录后才能进入主界面&#xff0c;否则不能进入。没有加权限验证前是可以根据页面的完整路径进入主界面&#xff0c;可以不输入密…

软件项目中的需求分析具体方法探讨之一

这家单位&#xff0c;我进去没多久&#xff0c;满打满算也就刚两月多一周而已。我也不是开发部的人&#xff0c;但是&#xff0c;看到了一些事情&#xff0c;纯为有感而发。领导想做个CRM&#xff0c;于是&#xff0c;开发部的人写了&#xff0c;当然&#xff0c;正式的需求分析…

portscaner 多线程、多协程并发端口扫描

import socket,time,re,sys,os,threading import gevent from gevent import monkey monkey.patch_all()socket.setdefaulttimeout(2)#该方法用来处理用户数据的port范围&#xff0c;并计算范围内的port&#xff0c;将其添加到列表中&#xff0c;将列表返回 def handle_port(in…

POJ 2828 Buy Tickets | 线段树的喵用

题意: 给你n次插队操作,每次两个数,pos,w,意为在pos后插入一个权值为w的数; 最后输出1~n的权值 题解: 首先可以发现,最后一次插入的位置是准确的位置 所以这个就变成了若干个子问题, 所以用线段树维护一下每个区间剩余多少位置可选 对于一个pos 如果左儿子的剩余超过当前位置,就…