【问题标题】:How can frontend communicate with backend if each is on a separate pod and host within kubernetes?如果每个后端都位于 Kubernetes 中的单独 pod 和主机上,前端如何与后端通信?
【发布时间】:2019-07-06 19:42:59
【问题描述】:

我正在尝试连接一个简单的应用程序来模拟一台主机上的一个 pod 中的前端容器,该容器向另一台主机上的另一个 pod 中的另一个后端容器发出请求。该集群由 kops 在 AWS 上创建。

服务已正确创建,我可以通过前端服务创建的 LB url 访问默认前端服务。但是,调用后端的请求 /greet 挂起并最终超时并出现 500 错误。

我检查了日志,但没有显示任何有用的信息。我是否遗漏了任何会阻止 pod 进行通信的东西?

sample-genericserver“前端”

@app.route('/greet')
def greet():
    r = requests.get('http://sample-greeter')
    print(r.content)
    return r.content

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=int("5000"), debug=True)

//frontend
kubectl run sample-genericserver --image=genericserver --replicas=1 --port=5000
kubectl expose deployment sample-genericserver --port=5000 --type=LoadBalancer

迎接“后端”

@app.route('/')
def hello_world():
    return 'Greetings from BackendService'

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=int("8090"), debug=True)


//backend
$ kubectl run sample-greeter --image=greeter --replicas=1 --port=8090
$ kubectl expose deployment sample-greeter --port=8090

【问题讨论】:

  • 您正在连接到端口 80,但 sample-greeter 服务正在侦听端口 8090。
  • 您是否创建了Service 并从后端 pod 公开了端口,以便其他服务能够与之通信。
  • 谢谢大卫。我没有意识到我需要明确指定 8090 来调用 URL。 r = requests.get('sample-greeter:8090') 有效。

标签: docker kubernetes kops


【解决方案1】:

感谢大卫的回答,我能够将端口号添加到调用 url 并且后端服务能够正确响应。

r = requests.get('http://sample-greeter:8090')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-23
    • 2020-03-07
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2012-05-25
    • 1970-01-01
    相关资源
    最近更新 更多