是否可以使用必须在该Pod内部运行的命令为Pod设置变量?
我想做的是从节点获取私有和公共IP,因此我可以将它们用于允许的主机上的应用程序中,我可以使用以下方法获取私有IP:
containers:
- env:
- name: NODE_IP
valueFrom:
fieldRef:
status.hostIP
但是只有那个私有IP,我需要公共IP,我的想法是从这里获取它们:
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html 使用以下两个命令:
curl http://169.254.169.254/latest/meta-data/local-ipv4
curl http://169.254.169.254/latest/meta-data/public-ipv4
在容器内进行操作将是这样的:
command: MYPRIVATEIP=$(curl http://169.254.169.254/latest/meta-data/local-ipv4)
command: MYPUBLICIP=$(curl http://169.254.169.254/latest/meta-data/public-ipv4)
containers:
- env:
- name: NODE_IP
valueFrom:
fieldRef:
status.hostIP
我已经尝试过这样放置:
env:
- name: MYIP
value: $(curl http://169.254.169.254/latest/meta-data/local-ipv4)
但是,除了放置类似平面文字的文字外,它什么也没做。
我希望在var内部有该命令输出,以便我的应用可以从那里提取并添加到允许的主机中。在此先感谢您的帮助!问候
答案 0 :(得分:0)
我认为您可以使用生命周期事件来实现这一目标。您可以在这里阅读有关它们的信息。 https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/。
因此,我建议您创建一个shell脚本init.sh来导出所需的所有环境变量,并在pod启动后运行它。
spec:
containers:
- name: container-name
image: image-name
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "/init.sh"]
使用COPY命令构建映像时,可以在docker映像中包含init.sh文件。