ようへいの日々精進XP

よかろうもん

PowerShell で操作する Azure メモ(4)

ども、かっぱです。

tl;dr

引続き、PowerShell で Azure を操作するメモ。

操作する環境は以下の通り。

PS C:\Users\Administrator\Downloads> [System.Environment]::OSVersion

                          Platform ServicePack                        Version                            VersionString
                          -------- -----------                        -------                            -------------
                           Win32NT                                    6.3.9600.0                         Microsoft Windows NT 6.3.9600.0

PS C:\Users\Administrator\Downloads> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.42000
BuildVersion                   6.3.9600.17400
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

Web サーバーや簡単なアプリケーションに負荷分散セット経由でアクセスする

構成

f:id:inokara:20160911084913p:plain

クラウドサービス内に仮想マシンを構築

$_locationName  = "Japan West"
$_cloudService  = "oreno-cloudservice01"
$_vmType        = "Small"
$_imageName     = @(Get-AzureVMImage | ? {$_.OS -eq "Linux" -and $_.ImageFamily -eq "Ubuntu Server 16.04 LTS"} ` | Sort-Object PublishedDate –Descending | Select-Object -First 1 ).ImageName
$_adminUser     = "oreadmin"
$_adminPassword = "YourPassword!01"
$_vnetName      = @(Get-AzureVNetSite -VNetName "Group oreno-cloudservice01 TestVNet01").Name
$_subNet        = "FrontEnd"
$_ReservedIP = New-AzureReservedIP –ReservedIPName "OrenoReservedIP" –Label "OrenoReservedIP" –Location "Japan West"
$_vmName        = "vm01"
$_vmConfig = `
New-AzureVMConfig -Name $_vmName -InstanceSize $_vmType -ImageName $_imageName `
| Add-AzureProvisioningConfig -Linux -LinuxUser $_adminUser –Password $_adminPassword `
| Set-AzureVMBGInfoExtension `
| Set-AzureSubnet -SubnetNames $_subNet `
| New-AzureVM -ServiceName $_cloudService  -VNetName $_vnetName -Location $_locationName -WaitForBoot -ReservedIPName "OrenoReservedIP"
  • 仮想マシン vm01 のエンドポイント VIP とポート番号を確認
Get-AzureVM -ServiceName $_cloudService -Name $_vmName  | Get-AzureEndpoint | Select Name,Port,Vip
$_vmName        = "vm02"
$_vmConfig = `
New-AzureVMConfig -Name $_vmName -InstanceSize $_vmType -ImageName $_imageName `
| Add-AzureProvisioningConfig -Linux -LinuxUser $_adminUser –Password $_adminPassword `
| Set-AzureVMBGInfoExtension `
| Set-AzureSubnet -SubnetNames $_subNet `
| New-AzureVM -ServiceName $_cloudService  -VNetName $_vnetName -Location $_locationName -WaitForBoot -ReservedIPName "OrenoReservedIP"
  • 仮想マシン vm02 のエンドポイント VIP とポート番号を確認
Get-AzureVM -ServiceName $_cloudService -Name $_vmName  | Get-AzureEndpoint | Select Name,Port,Vip

雑なアプリケーションをデプロイ

itamae ssh -h ${VIP} -p ${VM01_SSH_PORT} --user=oreadmin --ask_password --sudo roles/common.rb --node-json node.json --log-level=debug
itamae ssh -h ${VIP} -p ${VM01_SSH_PORT} --user=oreadmin --ask_password --sudo roles/common.rb --node-json node.json --log-level=debug

インターネット向けの外部ロードバランサを設定

  • memo
- クラウドサービスにはデフォルトでインターネット向けの外部ロードバランサが提供されている
- 外部ロードバランサを利用する為には負荷分散セットを設定する必要がある
  • 外部からポート 8000 番でアクセスさせるエンドポイントと負荷分散セットを作成
Get-AzureVM -ServiceName $_cloudService -Name "vm01" `
| Add-AzureEndpoint -Name "Http8000-vm01" -Protocol "tcp" -PublicPort 8000 -LocalPort 80 -LBSetName "OrenoLB" -ProbePort 80 -ProbeProtocol "tcp" `
| Update-AzureVM

Get-AzureVM -ServiceName $_cloudService -Name "vm02" `
| Add-AzureEndpoint -Name "Http8000-vm02" -Protocol "tcp" -PublicPort 8000 -LocalPort 80 -LBSetName "OrenoLB" -ProbePort 80 -ProbeProtocol "tcp" `
| Update-AzureVM
  • 外部からポート 8001 番でアクセスさせるエンドポイントと負荷分散セットをアクセスコントロール付きで作成
#
# xxx.xxx.xxx.xxx/32 からのアクセスを許可する
#
$_acl = New-AzureAclConfig
Set-AzureAclConfig -AddRule Permit -RemoteSubnet "xxx.xxx.xxx.xxx/32" -Order 1000 -ACL $_acl -Description "Http8081-Allow"

以下のように出力される。

RuleId       : 0
Order        : 1000
Action       : Permit
RemoteSubnet : xxx.xxx.xxx.xxx/32
Description  : Http8081-Allow

アクセスコントロールを付与してエンドポイントと負荷分散セットを作成。

Get-AzureVM -ServiceName $_cloudService -Name "vm01" `
| Add-AzureEndpoint -Name "Http8081-vm01" -Protocol "tcp" -PublicPort 8081 -LocalPort 19190 -LBSetName "OrenoLB-8081" -ProbePort 19190 -ProbeProtocol "http" -ProbePath '/api/endpoint/healthcheck' -ACL $_acl `
| Update-AzureVM

Get-AzureVM -ServiceName $_cloudService -Name "vm02" `
| Add-AzureEndpoint -Name "Http8081-vm02" -Protocol "tcp" -PublicPort 8081 -LocalPort 19190 -LBSetName "OrenoLB-8081" -ProbePort 19190 -ProbeProtocol "http" -ProbePath '/api/endpoint/healthcheck' -ACL $_acl `
| Update-AzureVM

動作確認

  • アクセスコントロールで許可されている拠点より
% curl --connect-timeout 10 -I xxx.xxx.xxx.xxx:8000
HTTP/1.1 200 OK
Server: nginx/1.10.0 (Ubuntu)
Date: Sat, 10 Sep 2016 23:54:00 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sat, 10 Sep 2016 22:09:07 GMT
Connection: keep-alive
ETag: "57d48483-264"
Accept-Ranges: bytes

% curl --connect-timeout 10 -I xxx.xxx.xxx.xxx:8081/api/endpoint/healthcheck
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 2
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Authorization, Content-Type
Access-Control-Expose-Headers: Authorization
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 1728000
Server: Werkzeug/0.11.11 Python/2.7.12
Date: Sat, 10 Sep 2016 23:55:14 GMT
  • アクセスコントロールで許可されていない拠点より
$ curl --connect-timeout 10 -I xxx.xxx.xxx.xxx:8000
HTTP/1.1 200 OK
Server: nginx/1.10.0 (Ubuntu)
Date: Sat, 10 Sep 2016 23:59:06 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sat, 10 Sep 2016 22:18:23 GMT
Connection: keep-alive
ETag: "57d486af-264"
Accept-Ranges: bytes

#
# アクセスコントロールが効いていることが判る
#
$ curl --connect-timeout 10 -I xxx.xxx.xxx.xxx:8081/api/endpoint/healthcheck
curl: (28) Connection timed out after 10007 milliseconds

以上

エンドポイント、負荷分散セット...混乱している。