动态解析要获取请求的Pod地址

时间:2018-12-03 03:50:39

标签: python kubernetes

我让我的应用程序在docker-compose中工作,然后使用kompose对其进行了转换。但是,当我想从后端获取数据时遇到问题。由于网址,我无法再使用以前的方法。

@app.route("/")
def home():
    url = "http://backend:5000/"
    try:
        res = requests.get(url)
    except Exception:
        return "Error with {}".format(url)
    dictFromServer = res.json()
    return dictFromServer['message']

使网址正常工作的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

完成的传统方法是使用注入到容器运行时中的环境变量。可以使用合理的默认值,这样本地开发可以像以前一样继续进行:

 import os

 def home():
     be_host = os.getenv('BACKEND_SERVICE_HOST', 'backend')
     be_port = os.getenv('BACKEND_SERVICE_PORT', '5000')
     url = 'http://{}:{}'.format(be_host, be_port)

这些环境变量及其值基于正在运行的Pod当前名称空间中Service对象的名称为injected by kubelet。在上面的示例中,这意味着Service被命名为backend,并且该服务在5000上暴露了ports:(指向Pod本身暴露的containerPorts:。 / p>

如果对您的团队来说这太神奇了,您当然可以声明自己的环境变量。