首页 > 解决方案 > Kubernetes - 如何通过休息请求从 pod 中的 Web 服务器访问服务

问题描述

我希望使用 Kubernetes DNS 从 pod 中重新获取 pod。一切都在我的 Kubernetes 集群中。

我想使用来自网络应用程序的 http 请求来调用另一个网络应用程序

例如,我想从 DashboardWebApp 调用 ProductWebApp

我找到了 kubernetes rest api

➜ ~ kubectl exec -it dashboard-57f598dd76-54s2x -- /bin/bash

➜ ~ curl -X GET https://4B3449144A41F5488D670E69D41222D.sk1.us-east-1.eks.amazonaws.com/api/v1/namespaces/staging/services/product-app/proxy/api/product/5bf42b2ca5fc050616640dc6 {“种类“:“状态”,“apiVersion”:“v1”,“元数据”:{

}, "status": "Failure", "message": "services \"product-app\" 被禁止:用户 \"system:anonymous\" 无法在命名空间 \"staging\"" 中获取服务/代理,"原因”:“禁止”,“详细信息”:{“名称”:“产品应用程序”,“种类”:“服务”},“代码”:403 }%

我不明白为什么它被阻止

我还找到了这个 url
➜ ~ curl -XGET product-app.staging.svc.cluster.local/api/product/5bf42b2ca5fc050616640dc6

但这也行不通

那么从 pod 调用到 service 的好方法是什么?

标签: kubernetes

解决方案


当ProductWebApp 和 DashboardWebApp 在同一个 Kubernetes 集群上运行

为您要使用服务调用的应用程序 (ProductWebApp)定义一个服务,如此处所述type: ClusterIP;使用服务名称作为要调用的 URI 配置调用应用程序 (DashboardWebApp)。

例如,假设 ProductWebApp 位于名为 的命名空间中staging,为 ProductWebApp 部署定义一个名为的服务product-app,然后将 DashboardWebApp 配置为在此 URI 处调用 ProductWebApp:

http://product-app.staging.svc.cluster.local/end/point/as/needed

如果 ProductWebApp 端点需要,请将 http 替换为 https。请注意,服务名称可以与服务所在的部署的名称相同。

这在 Kubernetes 集群运行 DNS 服务时有效(大多数集群都这样做) - 请参阅此链接,特别是A 记录部分。


推荐阅读