簡體   English   中英

Kubernetes(minikube) + React 前端 + .netcore api + 集群 IP 服務 + ingress + net::ERR_NAME_NOT_RESOLVED

[英]Kubernetes(minikube) + React Frontend + .netcore api + Cluster IP service + ingress + net::ERR_NAME_NOT_RESOLVED

從 React JS 前端調用時,無法解析在 Minikube 上托管為 ClusterIP 服務的 API。

我的應用的基本架構如下 React --> .NET core API

這兩個組件都作為 ClusterIP 服務托管。 我創建了一個入口服務,其中 http 路徑指向 React 組件和 .NET 核心 API。

但是,當我嘗試從瀏覽器調用它時,反應應用程序會呈現,但是對 API 的調用失敗並出現 net::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 以進入前端 pod 以嘗試使用上述 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

您從本地計算機收到此錯誤,因為ClusterIP服務類型錯誤,無法從集群外部訪問。 如 kubernetes 文檔中所述, ClusterIP只能從集群內部訪問。

發布服務(ServiceTypes)

對於您的應用程序的某些部分(例如,前端),您可能希望將服務公開到外部 IP 地址,該地址位於您的集群之外。

Kubernetes ServiceTypes允許您指定所需的服務類型。 默認值為ClusterIP

Type值及其行為是:

  • ClusterIP :在集群內部 IP 上公開服務。 選擇此值使服務只能從集群內訪問。 這是默認的ServiceType
  • NodePort :在 static 端口( NodePort )上公開每個節點的 IP 上的服務。 自動創建NodePort服務路由到的ClusterIP服務。 您可以通過請求<NodeIP>:<NodePort>從集群外部聯系NodePort服務。
  • LoadBalancer :使用雲提供商的負載均衡器在外部公開服務。 自動創建外部負載均衡器路由到的NodePortClusterIP服務。
  • ExternalName :通過返回CNAME記錄將服務映射到externalName字段的內容(例如foo.bar.example.com

    以其價值。 沒有設置任何類型的代理。

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

我建議改用NodePortLoadBalancer服務類型。

有關示例,請參閱上述文檔鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM