【问题标题】:ERR_NAME_NOT_RESOLVED:Angular pod not communicating with python backend in KubernetesERR_NAME_NOT_RESOLVED:Angular pod 未与 Kubernetes 中的 python 后端通信
【发布时间】:2020-03-07 22:41:12
【问题描述】:

我已经通过 microk8s 在 kubernetes 中部署了 angular 前端和 python 后端作为单独的 pod,它们正在运行。我在我的角度文件中将后端 url 指定为“http://backend-service.default.svc.cluster.local:30007”,以便将前端与后端链接起来。但这会引发 ERR_NAME_NOT_RESOLVED。有人可以帮助我理解这个问题吗?

另外,我有一个配置文件,它在我的后端指定 ip 的端口和其他配置。在将 t 部署到 kubernetes 之前,我是否需要对该文件进行任何更改(数据库主机的值?、烧瓶主机的值?、端口?)?

下面显示的是我的 Angular 和后端的部署和服务文件。

    apiVersion: v1
    kind: Service
    metadata:
     name: angular-service
    spec:
     type: NodePort
     selector:
      app: angular
     ports:
      - protocol: TCP
        nodePort: 30042
        targetPort: 4200
        port: 4200
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: angular-deployment
    labels:
      name: angular
    spec:
     replicas: 1
     selector:
      matchLabels:
        name: angular
     template:
       metadata:
         labels:
           name: angular
       spec:
         containers:
         - name: angular
           image: angular:local
           ports:
         - containerPort: 4200



  apiVersion: v1
  kind: Service
  metadata:
    name: backend-service
  spec:
    type:ClusterIP
    selector:
      name: backend
    ports:
      - protocol: TCP
        targetPort: 7000
        port: 7000
  ---
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: backend-deployment
     labels:
       name: backend
   spec:
     replicas: 1
     selector:
       matchLabels:
          name: backend
      template:
       metadata:
         labels:
           name: backend
       spec:
         containers:
         - name: backend
           image: flask:local
           ports:
           - containerPort: 7000

【问题讨论】:

  • 名称未解析对我来说听起来像是 DNS 问题。此外,您的服务在端口 7000 上运行,而不是 30007。那是您的节点端口。
  • 在 kubernetes 上部署 Angular 应用程序时,它仍然在客户端的浏览器中运行,因此请确保客户端知道您使用的名称。
  • 似乎是 DNS 问题,尝试nslookup <service-url> 并首先查看解决方案是否有效。

标签: python-3.x angular kubernetes microk8s


【解决方案1】:

您的集群是否处于健康状态? DNS 由 kube-system 命名空间中的对象 coredns 解析。

以经典方式,您的 Angular 应用程序应在浏览器中显示您的 API 网址,因此它们必须公开和公开。这不是你的情况,我对此有很大的怀疑。 向我们展示您的应用架构?

此外,如果您通过 NodePort 公开您的服务,则不得将其用于内部访问,因为您永远不知道您将访问的节点。 暴露服务时,您的应用需要使用端口属性(而不是节点端口)来访问后端生成的 pod。

【讨论】:

  • 嗨 Germain,是的,它处于健康状态!前端 pod 正在使用 NodePort 及其可访问性,其余部分没有以这种方式通信。我已经浏览了这个 kubernetes 文档 (kubernetes.io/docs/tasks/access-application-cluster/…) 并尝试了这个,但没有成功!
  • 如果我将此 url 更改为 http://:port 它可以工作!但我不能动态地将集群 ip 传递给前端
  • 我遇到了同样的问题,也许我们必须通过代理。
  • 您有一些解决方案来访问您的应用程序:(1) 使用 ClusterIP,我强烈推荐您! (2) 创建一个内部服务,收集你的服务的节点 IP + 节点端口,并将其提供给你的应用程序。这个解决方案对你来说很脏,但在 Kafka 和 Cassandra 节点管理等有限的情况下需要转变(参见我的朋友开发的 Elassandra:github.com/strapdata/elassandra
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
  • 2019-04-02
相关资源
最近更新 更多