Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dns Kubernetes,将前端应用程序php代码连接到后端服务器php代码_Dns_Kubernetes_Google Cloud Platform - Fatal编程技术网

Dns Kubernetes,将前端应用程序php代码连接到后端服务器php代码

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命令,我们可

现在,我正在尝试使用kubernetes托管简单的站点。我的应用程序在前端和后端都有一个简单的php文件。我的前端php文件希望访问后端php文件,我正在创建一个ajax请求来执行同样的操作。但我无法确定在ajax调用中访问后端需要指定什么基本url(对于kubernetes)

我当前的设置:

  • 创建了两个容器映像,一个用于前端代码,另一个用于后端代码

  • 将这些图像推送到我的gcr

  • 启动了Kubernetes群集。为前端RC和服务以及后端RC和服务设置yaml文件
  • 通过运行kubectl命令,我们可以通过外部IP独立访问这两个服务
  • 但我们的前端无法与后端服务通信
  • 不确定我们是否需要dns服务器??如果你认为我们需要的话,如何设置
  • 后端服务yaml文件 我已经用上面的文件创建了一个服务。我的前端应用程序代码有一个ajax代码段,其中包含一个url,可以使用服务名和端口名访问后端文件

    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语言中打包了它)