在同一个 kubernetes 集群中从一个 pod 调用一个 rest api 到另一个 pod
Posted
技术标签:
【中文标题】在同一个 kubernetes 集群中从一个 pod 调用一个 rest api 到另一个 pod【英文标题】:Call a rest api from one pod to another pod in same kubernetes cluster 【发布时间】:2019-12-16 17:03:58 【问题描述】:在我的 k8s 集群中,我有两个 pod podA 和 podB。两者都在同一个 k8s 集群中。 pod B 上的微服务是一个 spring boot rest api。 pod A 上的微服务在其 application.yaml 中有 pod B 的 ip 和端口。现在每次 podB 重新创建时,ip 更改都会迫使我们更改 podA 的 application.yml 中的 ip。请提出更好的方法。
我的限制是:我无法更改 podA 的代码。
【问题讨论】:
【参考方案1】:这就是service
的用途。使用 postgres 服务:
kind: Service
apiVersion: v1
metadata:
name: postgres-service
spec:
type: ClusterIP
selector:
app: postgres
ports:
- protocol: TCP
port: 5432
targetPort: 5432
您可以在其他 pod 中使用postgres-service
,而不是引用该 pod 的 ip 地址。您还拥有 k8s 也为您做一些负载平衡的优势。
【讨论】:
【参考方案2】:Service 将为访问 Pod 提供一致的 DNS 名称。
除非您有特定的理由,否则应用程序永远不应直接寻址 Pod(自定义负载平衡是我能想到的,或者 Pod 具有身份的 StatefulSet)。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
然后,您将拥有一致的 DNS 名称来访问与 selector
匹配的任何 Pod:
my-service.default.svc.cluster.local
【讨论】:
以上是关于在同一个 kubernetes 集群中从一个 pod 调用一个 rest api 到另一个 pod的主要内容,如果未能解决你的问题,请参考以下文章
无法通过 Kubernetes 集群中的主机名连接到 MariaDB
Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - Deployment (Deploy)
Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - Deployment (Deploy)