从 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 地址,该地址位于外部 的集群。
Kubernetes
ServiceTypes
允许您指定哪种服务 你想要。默认值为ClusterIP
。
Type
值及其行为包括:
ClusterIP
:在群集内部 IP 上公开服务。选择此值会使服务只能从 簇。这是默认ServiceType
。NodePort
: 在静态端口(NodePort
(。ClusterIP
服务,NodePort
服务路由是自动创建的。您将能够联系NodePort
服务,从群集外部,通过请求<NodeIP>:<NodePort>
.LoadBalancer
: 使用云提供商的负载均衡器在外部公开服务。 外部负载的NodePort
和ClusterIP
服务,外部负载 将自动创建平衡器路由。
ExternalName
: 将服务映射到externalName
字段的内容(例如foo.bar.example.com
(,通过返回CNAME
记录及其价值。未设置任何类型的代理。
注意:您需要 CoreDNS 版本 1.7 或更高版本才能使用
ExternalName
类型。
我建议改用NodePort
或LoadBalancer
服务类型。
有关示例,请参阅上述文档链接。