Kubernetes 如何调试非';你发球不正确吗?

Kubernetes 如何调试非';你发球不正确吗?,kubernetes,Kubernetes,我已经建立了Kubernetes集群。该集群包含一个集群和一个部署(基于容器)来呈现一个API Web服务 我已经使用LoadBalancer服务类型(这在GCP上)在外部部署了该服务: 我的理解是(如果我错了,请纠正我!)现在可以通过访问http://35.224.78.225在浏览器中 在本地运行Docker容器时,我可以通过导航到以下URL来验证工作是否正常: http://localhost:49161/starting_x=-73.954527&starting_y=40.58

我已经建立了Kubernetes集群。该集群包含一个集群和一个部署(基于容器)来呈现一个API Web服务

我已经使用
LoadBalancer
服务类型(这在GCP上)在外部部署了该服务:

我的理解是(如果我错了,请纠正我!)现在可以通过访问
http://35.224.78.225
在浏览器中

在本地运行Docker容器时,我可以通过导航到以下URL来验证工作是否正常:

http://localhost:49161/starting_x=-73.954527&starting_y=40.587243&ending_x=-73.977756&ending_y=40.687163
查看
kubectl get
输出,我希望在浏览器中访问以下URL将为我提供我要查找的内容:

http://35.224.78.225:31396/starting_x=-73.954527&starting_y=40.587243&ending_x=-73.977756&ending_y=40.687163
但是当我访问这个URL时,什么也得不到


我怀疑部署配置中存在非致命错误。调试此问题的有效方法是什么?是否有访问日志或
stdout
流,我可以在某个地方检查是否有问题?

您可以尝试运行调试服务的官方文档:


除此之外,您是否确认正在正确的端口上查询负载平衡器?虽然我没有在GCP上部署,但当在AWS上为kubernetes服务启动负载平衡器时,它将在端口80/443上接受流量,并将其转发到服务的节点端口,对于您的情况,我猜是31396。kubectl get svc subway explorer gmaps代理服务-o yaml中列出了哪些端口

我没有意识到的是谷歌云有一个独立的防火墙系统,这与Kubernetes管理的连接设置不同。为了向外界公开应用程序(例如,web浏览器),我还需要修改Google云防火墙规则(例如,请参见如何修改)

要测试应用程序是否在Kubernetes端工作,您无需修改云防火墙规则。相反,从集群上的另一个pod运行
wget
curl
,或一些类似的数据检索命令,指向感兴趣的pod的内部IP地址和端口号

比如说。Kubernetes文档使用的“hello world”pod是
busybox
pod(已定义)。通过在我的群集中创建此pod,然后运行以下操作:

kubectl exec busybox -c busybox -- wget "10.35.249.23:9000"
我能够确认服务在Kubernetes内正常运行。你也可以使用任何其他的pod,它在底层操作系统中定义了一个
wget
,我只是使用了
busybox
,因为我所有的其他pod都使用了谷歌的容器优化操作系统,它不包括它

最后,为了调试的目的,我继续向我的API应用程序服务添加了一个
/status
端点,当核心服务工作时,它提供
{“status”:“OK”}
。我建议其他应用程序也遵循这种模式,因为它提供了一个简单的端点,您可以对其进行测试,以确保Web服务器至少能够响应输入。在我的例子中,我发现
/status
页面正常,但API调用失败,这使我能够将问题缩小到由错误的凭据机密导致的未解决的承诺。

供参考的是部署
YAML
文件。中的命令输出。
kubectl exec busybox -c busybox -- wget "10.35.249.23:9000"