首页 > 解决方案 > 将 kubernetes 服务传递给 Flask 中的变量

问题描述

我有一个运行 4 个服务的 Kubernetes 集群。其中一项服务是 Nginx,它将充当外部和内部通信的代理。另一项服务是用户可以登录的烧瓶应用程序。登录后,用户被移动到另一个用 go 编写的应用程序。我想在用户登录后将用户重定向回 Nginx,然后 Nginx 会将他们代理到 go 服务。我遇到的问题是如何将用户重定向到 Nginx 服务。Nginx 服务被简单地命名为 nginx。这是我在 python 中的代码:

if usernamedata == None:
    print("Could not log in")   
else:
    if passworddata == password:
        print("Logged in")
        return redirect("http://{0}/user?username".format(nginx))

我知道如果烧瓶在同一个命名空间中,它应该能够解析 nginx 服务名称?这是 nginx 服务: default | nginx | http://192.168.99.104:31316

我也试过"http://nginx/user?username",但也没有用。如何将用户从烧瓶重定向回 nginx?

标签: nginxflask

解决方案


http://nginx/user?username除非您配置了 dns 或hosts文件,否则此行将无法在集群外工作。此外,kubernetes 不会将外部 IP/端口传递给 pod。Flask pod 可以访问内部的 go 服务。但是你需要的是 nginx 外部 ip。

您可以将 Nginx 服务的外部 IP 硬编码到烧瓶中,或者让 kubernetes 将其作为环境变量传递,然后像这样读取它。

...
redirect(os.envirton['EXTERNAL_IP'] + '/go_service')
...

然后让 Nginx 处理对 go 服务的请求。


推荐阅读