Amazon-Web-Services

cloud-init 執行時/之前的代理設置

  • December 24, 2020

在 EC2 中啟動到我們的 VPC 中的實例需要HTTP_PROXY設置合作夥伴以訪問位於 VPC 之外的任何內容。

現在我遇到了一個問題(使用數據管道),我無法控制為 cloud-config 傳入的使用者數據。鑑於未設置代理,我可以在 cloud-init 使用者腳本期間看到 wget 掛起(嘗試連接)。

在其中設置環境變數/etc/environment似乎不是在執行級別 3 讀取的(這使用了一個非常古老的Amazon Linux 2013.03,並ps axf表明它是從執行級別 3 呼叫的,但我不得不承認我不熟悉各種 init 守護程序及其與雲的互動-在裡面):

1354 ?        S      0:00  \_ /bin/bash /etc/rc3.d/S99cloud-init-user-scripts start
1355 ?        S      0:00      \_ /usr/bin/python2.6 /usr/bin/cloud-init-run-module once-per-instance user-scripts execute run-parts /var/lib/cloud/data/scripts
1356 ?        S      0:00          \_ /bin/bash /usr/bin/run-parts /var/lib/cloud/data/scripts
1360 ?        S      0:00              \_ /bin/bash /var/lib/cloud/data/scripts/part-000
1362 ?        S      0:00                  \_ wget -O remote-runner-install -N http://datapipeline-ap-southeast-2.s3.amazonaws.com/ap-southeast-2/bootstrap-actions/latest/TaskRu...
                                               \
                                                \ This works in a login shell as I've set 
                                                  the variables in /etc/environment

在這裡設置這些變數似乎不起作用:

  • /etc/環境
  • /etc/sysconfig/cloudinit

如何設置 cloud-init執行時使用的代理?

目前沒有在執行時向 cloud init 添加代理的好方法。在 launchpad/cloud-init 上有一個關於它的開放錯誤。

評論中提到了一些變通方法,但它們本質上都是特定於應用程序的(例如 for yumor apt),在其配置中設置代理變數。

在 openstack 中創建 ubuntu 實例時 cloud-init 的使用者數據範例:

#cloud-config
write_files:
 - path: /etc/apt/apt.conf.d/00-proxy
   permissions: 0640
   owner: root
   content: |
     Acquire::http { Proxy "http://example.com:8080"; };
     Acquire::https { Proxy "http://example.com:8080"; };
     Acquire::http::Pipeline-Depth "23";
     Acquire::Languages "none";
  
package_upgrade: true

packages:
 - wget
 - sysstat
 - screen

引用自:https://serverfault.com/questions/791789