anj*_*nju 4 python mysql deployment kubernetes angular
我是 Kubernetes 新手,我正在尝试通过 microk8s 将应用程序部署到 Kubernetes。该应用程序包含Python Flask后端、Angular前端、Redis和MySQL数据库。我将映像部署在多个 Pod 中,状态显示“正在运行”,但 Pod 之间没有相互通信。
然后应用程序就完全docker化了,并且在docker级别运行。在部署到 kubernetes 之前,我的 Flask 主机是 0.0.0.0,mysql 主机是 docker-compose.yaml 中的“服务名称”,但目前我将其替换为 kubernetes yml 文件的服务名称。
另外,在 Angular 前端中,我已将要连接的 url 更改为 http://localhost:5000到http://backend-service,其中 backend-service 是 backend-service.yml 文件中给出的名称(dns) 。但这也没有带来任何改变。有人可以告诉我如何让这些 Pod 进行通信吗?
部署其余未连接后,我只能访问前端。
列出 Angular、后端的服务和部署文件。
apiVersion: v1
kind: Service
metadata:
name: angular-service
spec:
type: NodePort
selector:
name: angular
ports:
- protocol: TCP
nodePort: 30042
targetPort: 4200
port: 4200
Run Code Online (Sandbox Code Playgroud)
apiVersion: v1
kind: Service
metadata:
name: backend-service
spec:
type: ClusterIP
selector:
name: backend
ports:
- protocol: TCP
targetPort: 5000
port: 5000
Run Code Online (Sandbox Code Playgroud)
提前致谢!
(修改服务文件)
对于Kubernetes中不同微服务之间的内部通信,您应该使用ClusterIPService
类型。它实际上是默认类型,因此即使您没有在yaml 定义文件中指定它,Kubernetes也会假设您想要创建. 它创建虚拟内部 IP(可在 Kubernetes 集群内访问)并将集群组件(微服务)公开为单个入口点,即使它由许多 Pod 备份也是如此。Service
ClusterIP
假设您有前端应用程序,需要与在 3 个不同的 pod 中运行的后端组件进行通信。ClusterIP
service 提供单一入口点并处理不同 Pod 之间的负载平衡,在它们之间均匀分配请求。
您可以ClusterIP
通过提供应用程序组件公开的 IP 地址和端口来访问您的服务。请注意,您可以定义一个不同的端口(在定义port
中Service
引用)来侦听,而不是应用程序使用的实际端口(在定义中Service
引用)。尽管可以使用其地址进行访问,但与内部公开的 Pod 进行通信的所有组件都应使用其 DNS 名称。如果所有应用程序组件都放置在同一命名空间中,它只是您创建的一个名称。如果某些组件位于不同的命名空间中,您需要使用完全限定的域名,以便它们可以跨命名空间进行通信。targetPort
Service
Service
ClusterIP
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
Run Code Online (Sandbox Code Playgroud)
您可以在Kubernetes官方 文档中找到该主题的详细描述。
NodePort
具有完全不同的功能。它可用于在节点 IP 上的特定端口上公开您的前端应用程序。请注意,如果您的 Kubernetes 集群由许多节点组成,并且您的前端 Pod 放置在不同的节点上,那么为了访问您的应用程序,您需要使用 3 个不同的 IP 地址。在这种情况下,您需要额外的负载平衡器。如果您使用某些云平台解决方案并且希望将应用程序的前端部分公开给外部世界,则服务类型LoadBalancer是最佳选择(而不是使用NodePort
)。
归档时间: |
|
查看次数: |
4612 次 |
最近记录: |