我已经建立了一个Kubernetes集群。该集群包含一个集群和部署API Web服务的部署(基于subway-explorer-gmaps-proxy
容器)。
我已使用LoadBalancer
服务类型(在GCP上)在外部部署了服务:
$kubectl get svc subway-explorer-gmaps-proxy-service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
subway-explorer-gmaps-proxy-service LoadBalancer 10.35.252.232 35.224.78.225 9000:31396/TCP 19h
我的理解(如果我错了,请纠正我!)现在,通过访问浏览器中的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
输出,我希望在浏览器中访问以下网址会为我提供我正在寻找的内容:
http://35.224.78.225:31396/starting_x=-73.954527&starting_y=40.587243&ending_x=-73.977756&ending_y=40.687163
但是当我访问此网址时,没有任何内容可供使用。
我怀疑部署配置中存在非致命错误。调试这种有效调试方法的有效方法是什么?是否有访问日志或stdout
信息流,我可以查看哪些内容有误?
答案 0 :(得分:2)
您可以尝试运行有关调试服务的官方文档:https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/
除此之外,你确认你在正确的端口上查询负载均衡器吗?虽然我没有在GCP上部署,但是当在AWS上为kubernetes服务启动负载均衡器时,它会接受端口80/443上的流量并将其转发到服务的NodePort,我就是这样做的。猜测是31396为您的情况。 kubectl get svc subway-explorer-gmaps-proxy-service -o yaml
中列出了哪些端口?
答案 1 :(得分:0)
我没有意识到Google Cloud有一个单独的防火墙系统,这与Kubernetes管理的连接设置不同。为了将应用程序暴露给外部世界(例如,Web浏览器),我需要还修改Google Cloud Firewall规则(例如,参见this answer如何)
要测试应用程序是否在Kubernetes端运行,您无需修改云防火墙规则。而是从群集上的不同窗格运行wget
,curl
或某些类似的数据检索命令,指向感兴趣的窗格的内部IP地址和端口号。
例如。 "你好世界" Kubernetes文档使用的pod是busybox
pod(已定义here)。通过在我的群集中创建此pod,然后运行以下命令:
kubectl exec busybox -c busybox -- wget "10.35.249.23:9000"
我能够在 Kubernetes中确认该服务正常运行。您还可以使用在底层操作系统中定义wget
的任何其他窗格,我刚刚使用busybox
,因为我的所有其他窗格都使用了谷歌的容器优化操作系统,它没有使用包括它。
最后,出于调试的目的,我继续向我的API应用程序服务添加/status
端点,该服务在核心服务正常工作时提供{"status": "OK"}
。我建议在其他应用程序中使用此模式,因为它提供了一个简单的端点,您可以进行测试以确保Web服务器至少响应输入。就我而言,我发现/status
页面没问题,但是API调用失败了,这使我可以将问题缩小到由不良凭据密钥导致的未解决的Promise。