Kubernetes(minikube) + React Frontend + .netcore api + Clust



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

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

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

但是,当我尝试从浏览器调用它时,反应应用程序会呈现,但对 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 核心接口

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:testtasks [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只能从集群内部访问。

发布服务(服务类型(

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

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

Type值及其行为包括:

  • ClusterIP:在群集内部 IP 上公开服务。选择此值会使服务只能从 簇。这是默认ServiceType
  • NodePort: 在静态端口(NodePort(。ClusterIP服务,NodePort服务路由是自动创建的。您将能够联系NodePort服务,从群集外部,通过请求<NodeIP>:<NodePort>.
  • LoadBalancer: 使用云提供商的负载均衡器在外部公开服务。 外部负载的NodePortClusterIP服务,外部负载 将自动创建平衡器路由。
  • ExternalName: 将服务映射到externalName字段的内容(例如foo.bar.example.com(,通过返回CNAME记录

    及其价值。未设置任何类型的代理。

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

我建议改用NodePortLoadBalancer服务类型。

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

最新更新