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

时间:2020-08-27 12:25:07

标签: docker kubernetes dns minikube

我正在学习Kubernetes,在本地Minikube(Docker驱动程序)中获取API时遇到麻烦。 我有一个运行angluar-client的pod,它试图到达后端pod。前端Pod由NodePort服务公开。后端pod通过ClusterIP服务暴露给群集。

但是,当我尝试从前端访问clusterip服务时,dns transpile-svc.default.svc.cluster.local无法解决。 error message in the client

dns应该正常工作。我遵循了这个https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/,并在可以nslookup的地方部署了dnsutils pod。

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可以正常工作,并且当我将其作为NodePort公开时,可以使用浏览器访问api。

我在这里想念什么?我在相当长的一段时间内一直困扰于此问题,但找不到任何解决方案。

2 个答案:

答案 0 :(得分:2)

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

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

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

1。将您的服务transpile-svc类型更改为LoadBalancer 2.运行命令minikube service transpile-svc公开服务,即将分配IP。 3.运行kubectl get services以获取分配的外部IP。使用IP:POST从前端应用程序呼叫

答案 1 :(得分:0)

DNS主机名*.*.svc.cluster.local仅可从kubernetes群集中解析。您应该在kubernetes集群之外的浏览器中运行的前端javascript代码中使用http://NODEIP:NODEPORTminikube service transpile-svc --url提供的网址。

如果前端容器是nginx,则可以按照docs

中的说明,在nginx配置文件中如下配置后端服务名称。
upstream transpile {
    server transpile;
}

server {
    listen 80;

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