簡體   English   中英

Ruby 無法從 Azure 實例元數據服務獲取 Azure VM 元數據

[英]Ruby cannot get Azure VM metadata from Azure Instance Metadata service

根據 MS 文檔https://docs.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service Azure 在“http://169.254.169.254/metadata/instance? api 版本=2017-08-01 "。 但是我無法使用 ruby​​ 在我的其中一台虛擬機上獲取元數據。 同時,我可以使用 PowerShell 獲取元數據。 操作系統環境:Windows Server 2012R2。 Ruby 版本:ruby 2.5.3p105(2018-10-18 修訂版 65156)[x64-mingw32] PowerShell 版本:4.0

PowerShell 代碼:

Invoke-WebRequest -Headers @{"Metadata"="true"} -URI "http://169.254.169.254/metadata/instance?api-version=2017-08-01"

來自 powershell 代碼的響應:

StatusCode        : 200
StatusDescription : OK
...

紅寶石代碼:

require 'net/http'

AZURE_METADATA_ADDR = "169.254.169.254".freeze unless defined?(AZURE_METADATA_ADDR) 
AZURE_METADATA_URL = "/metadata/instance?api-version=2017-08-01".freeze unless defined?(AZURE_METADATA_URL)

def http_get(uri) 
conn = Net::HTTP.start(AZURE_METADATA_ADDR) 
conn.read_timeout = 6 
conn.get(uri, { "Metadata" => "true" }) 
end

puts "Fetching metadata from host #{AZURE_METADATA_ADDR} at #{AZURE_METADATA_URL}" 
response = http_get(AZURE_METADATA_URL)

puts response 

來自 Ruby 代碼的響應:

Fetching metadata from host 169.254.169.254 at /metadata/instance?api-version=2017-08-01 
#<Net::HTTPNotFound:0x0000000002372128> 

任何人都可以建議如何繼續解決此問題? 是Ruby內部的問題嗎? 附注。 這是廚師客戶端提供的嵌入式 Ruby

所以,這對我有用:

require 'net/http'
require 'json'

http = Net::HTTP.new('169.254.169.254', '80')
request = Net::HTTP::Get.new('/metadata/instance?api-version=2020-06-01')
request['Metadata'] = 'true'
response = http.request(request)
JSON.parse(response.body)

...在 Ruby 2.5.5 上。 我看到的唯一明顯區別是顯式端口設置為“80”。

事實證明,環境變量“http_proxy”阻止了 ruby​​ 訪問端點。 解決方法是設置“no_proxy”環境變量,並在“no_proxy”列表中設置“169.254.169.254”。

Ruby 尊重“http_proxy”,而其他語言如 powershell 和 java 不尊重它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM