Dns Kubernetes,将前端应用程序php代码连接到后端服务器php代码
现在,我正在尝试使用kubernetes托管简单的站点。我的应用程序在前端和后端都有一个简单的php文件。我的前端php文件希望访问后端php文件,我正在创建一个ajax请求来执行同样的操作。但我无法确定在ajax调用中访问后端需要指定什么基本url(对于kubernetes) 我当前的设置:Dns Kubernetes,将前端应用程序php代码连接到后端服务器php代码,dns,kubernetes,google-cloud-platform,Dns,Kubernetes,Google Cloud Platform,现在,我正在尝试使用kubernetes托管简单的站点。我的应用程序在前端和后端都有一个简单的php文件。我的前端php文件希望访问后端php文件,我正在创建一个ajax请求来执行同样的操作。但我无法确定在ajax调用中访问后端需要指定什么基本url(对于kubernetes) 我当前的设置: 创建了两个容器映像,一个用于前端代码,另一个用于后端代码 将这些图像推送到我的gcr 启动了Kubernetes群集。为前端RC和服务以及后端RC和服务设置yaml文件 通过运行kubectl命令,我们可
url: "http://mytestapp-be-service:80",
通常,在完全配置的kubernetes群集上,您应该让dns开箱即用。如果在同一名称空间中前后部署,则POD应该能够仅通过服务名称进行通信。这里您可能面临的问题是,当您在浏览器上打开一个页面并尝试从该页面发出请求时,只需指向您的后端服务,您就可以尝试从浏览器发出该请求,该浏览器不在kubernetes群集内,并且无法通过in-kubernetes网络访问其他POD
如果是这种情况,则需要同时公开前端和后端,以便浏览器可以访问它们(实际上有两种方法可以做到这一点,从nodePort服务开始,通过LB服务到入口。通常,在完全配置的kubernetes群集上,您应该让dns开箱即用。如果您在同一命名空间中前后部署,您的POD应该能够仅通过服务名称进行通信。问题是您可能面临的问题是,当您在浏览器上打开一个页面并尝试从该页面发出请求时,只需指向您的后端服务,您就可以尝试从不在kubernetes群集内的浏览器发出此请求,并且无法通过in-kubernetes网络到达其他POD
如果是这种情况,您需要公开前端和后端,以便浏览器可以访问它们(实际上有几种方法可以做到这一点,从nodePort服务开始,通过LB服务到入口。如果您在此处发布YAML,将更容易查明您的问题。但这里有一些一般信息: kubernetes的优势之一是易于发现内部服务。对于从容器内部到k8s中的另一个服务的通信,您可以使用内置DNS或环境变量。DNS的工作原理如下:该服务通过其名称可用,并解析为该服务的群集IP。因此,如果您的服务名称为
backendservice
您应该能够通过该名称从集群中访问其集群IP(如果您选择了指定的命名空间,则位于指定的命名空间下,例如backendservice.my namespace
)。服务端口应转发到作为服务一部分的POD的已定义目标端口。例如:
apiVersion: v1
kind: Service
metadata:
name: backendservice
spec:
selector:
name: nginxphppod
ports:
- name: http
port: 80
targetPort: 80
将您的前端指向http://backendservice:80
有关更多信息,请阅读和
要进行故障排除,请运行
kubectl get svc
,并仔细检查您的所有服务是否分配了clusterIP。如果您没有在服务yaml中指定clusterIP:None
,则应该是这种情况。如果您在此处发布yaml,将更容易查明您的问题。但这里有一些一般信息:
kubernetes的优势之一是易于发现内部服务。对于从容器内部到k8s中的另一个服务的通信,您可以使用内置DNS或环境变量。DNS的工作原理如下:该服务通过其名称可用,并解析为该服务的群集IP。因此,如果您的服务名称为backendservice
您应该能够通过该名称从集群中访问其集群IP(如果您选择了指定的命名空间,则位于指定的命名空间下,例如backendservice.my namespace
)。服务端口应转发到作为服务一部分的POD的已定义目标端口。例如:
apiVersion: v1
kind: Service
metadata:
name: backendservice
spec:
selector:
name: nginxphppod
ports:
- name: http
port: 80
targetPort: 80
将您的前端指向http://backendservice:80
有关更多信息,请阅读和
要进行故障排除,请运行
kubectl get svc
,并仔细检查您的所有服务是否已分配群集IP。如果您没有在服务yaml中指定clusterIP:None
,则应该是这种情况。感谢您的响应。但是我的前端和后端都已公开,并且位于同一群集上。我可以为bot创建服务但是我不知道如何连接这两个服务,特别是我需要在我的应用程序代码中给出什么url(比如我在一个容器图像中打包的index.php)要使用ajax访问后端。那么,您如何公开它们呢?因为从您编写的内容来看,您使用的ClusterIP服务似乎不公开ClusterIP之外的服务/播客。感谢您的响应。但是我的前端和后端都是公开的,并且位于同一个群集上。我可以为它们创建服务,并且能够在群集上运行它但是我不知道如何连接这两个服务,特别是我需要在我的应用程序代码中给出什么url(比如index.php,我已经在c语言中打包了它)