提问者:小点点

库伯内特斯:前端Pod无法解析后端服务的dns(使用Minikube)


我正在学习库伯内特斯,我在本地Minikube(Docker驱动程序)中遇到了API的麻烦。我有一个运行angluar客户端的pod,它试图访问后端pod。前端pod由NodePort服务公开。后端pod由ClusterIP服务公开给集群。

但是当我尝试从前端访问grousterip服务时,dnsTranspile-svc. default.svc.club.local无法得到解决。客户端中的错误消息

我遵循这个https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/并部署了一个dnsutils pod,从那里我可以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

这是群集IP服务的. yaml文件

apiVersion: v1
kind: Service
metadata:
  name: transpile-svc
  labels: 
    app: transpile
spec:
  selector:
    app: transpile
  ports:
  - port: 80
    targetPort: 80

即使我将IP硬编码到前端的请求中,我也会得到一个空响应。我验证了后端pod工作正常,当我将其公开为NodePort时,我可以使用浏览器访问api。

我在这里错过了什么?我已经被这个问题困扰了很长一段时间,我没有找到任何解决方案。


共2个答案

匿名用户

由于您的前端应用程序是从集群外部调用您的应用程序,因此您也需要将您的后端应用程序公开给外部网络。

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

在minikube中公开服务作为负载均衡器的步骤

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

匿名用户

DNS主机名*.*. svc.club.local只能在kubernetes集群中解析。您应该在运行在kubernetes集群之外的浏览器中的前端javascript代码中使用超文本传输协议://NODEIP:NODEPORT或由minikube service transile-svc--url提供的url。

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

upstream transpile {
    server transpile;
}

server {
    listen 80;

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