Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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
Docker Kubernetes:前端Pod无法解析后端服务的dns(使用Minikube)_Docker_Kubernetes_Dns_Minikube - Fatal编程技术网

Docker Kubernetes:前端Pod无法解析后端服务的dns(使用Minikube)

Docker Kubernetes:前端Pod无法解析后端服务的dns(使用Minikube),docker,kubernetes,dns,minikube,Docker,Kubernetes,Dns,Minikube,我正在学习Kubernetes,在本地Minikube(Docker驱动程序)中获取API时遇到了麻烦。 我有一个运行angluar客户端的pod,它试图访问后端pod。前端Pod由节点端口服务公开。后端pod通过ClusterIP服务向集群公开 但是,当我试图从前端访问clusterip服务时,dns传输文件svc.default.svc.cluster.local无法解析。 dns应该正常工作。我遵循这一点,部署了一个dnsutils吊舱,从那里我可以nslookup winpty kub

我正在学习Kubernetes,在本地Minikube(Docker驱动程序)中获取API时遇到了麻烦。 我有一个运行angluar客户端的pod,它试图访问后端pod。前端Pod由节点端口服务公开。后端pod通过ClusterIP服务向集群公开

但是,当我试图从前端访问clusterip服务时,dns
传输文件svc.default.svc.cluster.local
无法解析。

dns应该正常工作。我遵循这一点,部署了一个dnsutils吊舱,从那里我可以
nslookup

winpty kubectl exec -i -t dnsutils -- nslookup transpile-svc.default
Server:         10.96.0.10
Address:        10.96.0.10#53

Name:   transpile-svc.default.svc.cluster.local
Address: 10.99.196.82
这是clusterIP服务的.yaml文件

apiVersion: v1
kind: Service
metadata:
  name: transpile-svc
  labels: 
    app: transpile
spec:
  selector:
    app: transpile
  ports:
  - port: 80
    targetPort: 80
即使我将IP硬编码到前端的请求中,我也会得到一个空响应。 我验证了后端pod是否正常工作,当我将其作为节点端口公开时,我可以使用浏览器访问api


我错过了什么?这个问题困扰了我很长一段时间,我找不到任何解决方案。

DNS主机名
*.*.svc.cluster.local
只能从kubernetes集群内部解决。您应该使用
http://NODEIP:NODEPORT
或在kubernetes集群外的浏览器中运行的前端javascript代码中由minikube service Transfile svc--url提供的url

如果前端pod是nginx,则可以在nginx配置文件中配置后端服务名称,如下所述,如中所述


因为您的前端应用程序正在从集群外部调用您的应用程序,所以您也需要将后端应用程序公开给外部网络

有两种方法:要么通过将Transfile svc服务更改为loadbalancer类型直接公开它,要么引入一个入口控制器(例如带有入口对象的Nginx入口控制器),该控制器将处理所有重定向

在minikube中将服务公开为loadbalancer的步骤

1.将服务传输文件svc类型更改为LoadBalancer 2.运行命令minikube service TRANSFILE svc以公开服务,即将分配IP。
3.运行kubectl get services以分配外部IP。使用IP:POST从前端应用程序调用

前端是在同一名称空间内的集群中运行的pod,如果我理解正确,您正在从浏览器中运行的javascript代码调用transfile svc.default.svc.cluster.local,如果我不清楚问题,请不要抱歉:)我正在群集两个吊舱都在同一名称空间中运行。问题中出现的错误截图。不是来自浏览器吗?是的。我使用NodePort服务暴露了发出请求的pod。使用
minikube服务客户端svc
我可以在浏览器中访问此pod谢谢您的回答!正如我在另一个答案的评论中提到的,两个pod(前端和后端)都位于同一集群和同一名称空间中。我希望在集群中建立通信,以确保它们位于相同的集群和命名空间中。但是您的应用程序是从集群外部访问的。您可以将前端应用程序设置为静态UI应用程序,并直接公开后端应用程序,也可以将其设置为可以在内部重定向请求的服务器,如Arghya Sadhu所示。我将推荐单独公开的后端服务,因为它更具可扩展性。好的,也许我没有正确理解clusterIP服务的概念。那么,clusterip服务的总体意义是什么呢?最后,我只想让集群中的多个容器相互通信。clusterip用于集群间通信。。当外部世界无法与您的clutser交互时,例如,假设您有3个内部后端应用程序,然后必须彼此通信。然后,它们可以通过服务名称直接相互通信。如果任何应用程序都需要公开,即您可以从任何地方调用它,那么您需要通过负载平衡器或公共ip公开它。
upstream transpile {
    server transpile;
}

server {
    listen 80;

    location / {
        proxy_pass http://transpile-svc;
    }
}