Kubernetes(minikube)+ React Frontend + .netcore api +集群IP服务+入口+ net :: ERR_NAME_NOT_RESOLVED

时间:2019-10-08 18:37:13

标签: reactjs kubernetes .net-core kubernetes-ingress

从React JS前端调用时,无法解析Minikube上作为ClusterIP服务托管的API。

我的应用程序的基本架构如下 React-> .NET核心API

这两个组件都作为ClusterIP服务托管。我创建了一个带有http路径的入口服务,该路径指向React组件和.NET核心API。

但是,当我尝试从浏览器中调用它时,会响应应用程序渲染,但是对API的调用失败并显示 净:: ERR_NAME_NOT_RESOLVED

以下是.yml文件


1。反应应用程序

apiVersion: v1
kind: Service
metadata:
    name: frontend-clusterip
spec:
    type: ClusterIP
    ports:
    - port: 59000
        targetPort: 3000
    selector:
    app: frontend

2。 .NET核心API

apiVersion: v1
kind: Service
metadata:
    name: backend-svc-nodeport
spec:
    type: ClusterIP
    selector:
    app: backend-svc
    ports:
    - port: 5901
        targetPort: 59001

3。入口服务

apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
    name: ingress-service
    annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
    rules:
    - http:
        paths:
        - path: /?(.*)
            backend: 
            serviceName: frontend-clusterip
            servicePort: 59000
        - path: /api/?(.*)
            backend:
            serviceName: backend-svc-nodeport
            servicePort: 5901

4。前端部署

apiVersion: apps/v1
kind: Deployment
metadata:
    name: frontend
spec:
    selector:
    matchLabels:
        app: frontend
    replicas: 1
    template:
        metadata:
        labels:
        app: frontend
    spec:
        containers:
        - name: frontend
        image: upendra409/tasks_tasks.frontend
        ports:
        - containerPort: 3000
        env:
        - name: "REACT_APP_ENVIRONMENT"
            value: "Kubernetes"
        - name: "REACT_APP_BACKEND"
            value: "http://backend-svc-nodeport"
        - name: "REACT_APP_BACKENDPORT"
            value: "5901"

这是我在浏览器中看到的错误:

xhr.js:166 GET 
http://backend-svc-nodeport:5901/api/tasks net::ERR_NAME_NOT_RESOLVED

我在前端容器中安装了curl以进入前端容器,以尝试使用上述URL连接后端API,但是该命令不起作用

C:\test\tasks [develop ≡ +1 ~6 -0 !]> kubectl exec -it frontend-655776bc6d-nlj7z --curl http://backend-svc-nodeport:5901/api/tasks

Error: unknown flag: --curl

1 个答案:

答案 0 :(得分:1)

您从本地计算机收到此错误,因为ClusterIP服务的类型错误,无法从群集外部进行访问。如kubernetes所述,documentation ClusterIP仅可从集群内部访问。

  

发布服务(服务类型)

     

对于应用程序的某些部分(例如,前端),您可以   想要将服务公开到外部的外部IP地址上   集群中的一个。

     

Kubernetes ServiceTypes允许您指定哪种服务   你要。默认值为ClusterIP

     

Type值及其行为为:

     
      
  • ClusterIP:在群集内部IP上公开服务。选择此值将使该服务仅可从   簇。这是默认的ServiceType
  •   
  • NodePort:   在静态端口上将服务公开到每个节点的IP上(   NodePort)。 ClusterIP的{​​{1}}服务   服务路线,是自动创建的。您将可以联系   通过请求从群集外部的NodePort服务   NodePort
  •   
  • LoadBalancer:   使用云提供商的负载平衡器对外公开服务。   <NodeIP>:<NodePort>NodePort服务,外部负载   平衡器路线会自动创建。
  •   
  • ExternalName:   将服务映射到ClusterIP字段的内容(例如   externalName),返回一条foo.bar.example.com记录

         

    及其值。没有设置任何代理。

         
        

    注意:您需要CoreDNS版本1.7或更高版本才能使用CNAME类型。

      
  •   

我建议改为使用ExternalNameNodePort服务类型。

有关示例,请参阅上面的文档链接。