从React JS前端调用时,无法解析Minikube上作为ClusterIP服务托管的API。
我的应用程序的基本架构如下 React-> .NET核心API
这两个组件都作为ClusterIP服务托管。我创建了一个带有http路径的入口服务,该路径指向React组件和.NET核心API。
但是,当我尝试从浏览器中调用它时,会响应应用程序渲染,但是对API的调用失败并显示 净:: ERR_NAME_NOT_RESOLVED
以下是.yml文件
apiVersion: v1
kind: Service
metadata:
name: frontend-clusterip
spec:
type: ClusterIP
ports:
- port: 59000
targetPort: 3000
selector:
app: frontend
apiVersion: v1
kind: Service
metadata:
name: backend-svc-nodeport
spec:
type: ClusterIP
selector:
app: backend-svc
ports:
- port: 5901
targetPort: 59001
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
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
答案 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
类型。
我建议改为使用ExternalName
或NodePort
服务类型。
有关示例,请参阅上面的文档链接。