是否可以使用必须在该Pod内部运行的命令为Pod设置变量?

时间:2019-05-24 19:17:03

标签: kubernetes pod

是否可以使用必须在该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内部有该命令输出,以便我的应用可以从那里提取并添加到允许的主机中。在此先感谢您的帮助!问候

1 个答案:

答案 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文件。