在 EC2 中启动到我们的 VPC 中的实例需要HTTP_PROXY
合作伙伴设置为访问位于 VPC 之外的任何内容。
现在我遇到了一个问题(使用数据管道),我无法控制传入 cloud-config 的用户数据。由于未设置代理,我可以看到 wget 在 cloud-init 用户脚本期间挂起(尝试连接)。
设置环境变量后,/etc/environment
似乎在运行级别 3 无法读取它(这使用了一个非常古老的Amazon Linux 2013.03
,并ps axf
表明它是从运行级别 3 调用的,但我不得不承认我不熟悉各种 init 守护进程及其与 cloud-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 期间使用的代理运行?
答案1
目前还没有好的方法可以在运行时向 cloud init 添加代理。有一个未解决的错误在 launchpad/cloud-init 上。
评论中提到了解决方法,但它们本质上都是特定于应用程序的(例如,yum
或apt
),在其配置中设置代理变量。
答案2
在 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