gpt4 book ai didi

python - 如何让多个 Pod 在 Kubernetes 上相互通信

转载 作者:行者123 更新时间:2023-12-02 11:33:07 24 4
gpt4 key购买 nike

我是 Kubernetes 的新手,我正在尝试通过 microk8s 将应用程序部署到 kubernetes。该应用程序包含 python flask 后端、angular 前端、redis 和 mysql 数据库。我在多个 pod 中部署了图像,状态显示为“正在运行”,但 pod 没有相互通信。

然后应用程序完全 dockerized 并在 docker 级别运行。
在部署到 kubernetes 之前,我的 Flask 主机是 0.0.0.0,mysql 主机是 docker-compose.yaml 中的“服务名称”,但目前我用 kubernetes yml 文件的服务名称替换了它。

另外,在 Angular 前端中,我更改了要连接到支持的 url 为 http://localhost:5000http://backend-service ,其中 backend-service 是 backend-service.yml 文件中给出的名称(dns)。但这也没有任何改变。有人能告诉我如何让这些 pod 通信吗?

部署 rest 未连接后,我只能访问前端。

列出 angular、后端的服务和部署文件。

 apiVersion: v1
kind: Service
metadata:
name: angular-service
spec:
type: NodePort
selector:
name: angular
ports:
- protocol: TCP
nodePort: 30042
targetPort: 4200
port: 4200
 apiVersion: v1
kind: Service
metadata:
name: backend-service
spec:
type: ClusterIP
selector:
name: backend
ports:
- protocol: TCP
targetPort: 5000
port: 5000

提前致谢!

( 修改服务文件 )

最佳答案

用于中不同微服务之间的内部通信Kubernetes 你应该使用 Service类型 ClusterIP .它实际上是 默认类型 所以即使您没有在 Service 中指定它yaml 定义文件, Kubernetes 假设您要创建 ClusterIP .
它创建虚拟内部 IP(可在您的 Kubernetes 集群中访问)并将您的集群组件(微服务)作为单个入口点公开,即使它由许多 pod 备份。

假设您有一个前端应用程序,它需要与在 3 个不同 pod 中运行的后端组件进行通信。 ClusterIP service 提供单一入口点并处理不同 pod 之间的负载平衡,在它们之间均匀分配请求。

您可以访问您的 ClusterIP通过提供应用程序组件公开的 IP 地址和端口来提供服务。请注意,您可以为 port 定义不同的端口(在 Service 定义中称为 Service)。监听而不是应用程序使用的实际端口(在您的 targetPort 定义中称为 Service)。虽然可以访问 Service使用其 ClusterIP地址,所有与它内部暴露的 pod 通信的组件 应该使用它的 DNS 名称 .它只是一个 Service如果所有应用程序组件都放置在同一命名空间中,则您创建的名称。如果某些组件位于不同的命名空间中,您需要使用完全限定的域名,以便它们可以跨命名空间进行通信。

您的 Service定义文件可能如下所示:

apiVersion: v1
kind: Service
metadata:
name: angular-service
spec:
type: ClusterIP ### may be ommited as it is a default type
selector:
name: angular ### should match your labels defined for your angular pods
ports:
- protocol: TCP
targetPort: 4200 ### port your angular app listens on
port: 4200 ### port on which you want to expose it within your cluster

apiVersion: v1
kind: Service
metadata:
name: backend-service
spec:
type: ClusterIP ### may be ommited as it is a default type
selector:
name: backend ### should match your labels defined for your backend pods
ports:
- protocol: TCP
targetPort: 5000 ### port your backend app listens on
port: 5000 ### port on which you want to expose it within your cluster

您可以在官方 中找到该主题的详细说明。 Kubernetes documentation .
NodePort具有完全不同的功能。它可以用于例如在节点 IP 的特定端口上公开您的前端应用程序。请注意,如果您的 Kubernetes 集群由许多节点组成,并且您的前端 pod 位于不同的节点上,那么为了访问您的应用程序,您需要使用 3 个不同的 IP 地址。在这种情况下,您需要一个额外的负载平衡器。如果您使用一些云平台解决方案,并且希望将应用程序的前端部分暴露给外部世界,服务类型 LoadBalancer是要走的路(而不是使用 NodePort )。

关于python - 如何让多个 Pod 在 Kubernetes 上相互通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58798201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com