我在Azure上运行了两个部署+服务:react客户端和nodejs auth。我在Azure上注册了一个公共IP,我将其添加到我的windows主机文件(=myexample.com
)。在浏览器中输入URL,客户端打开并请求按预期进入认证服务。
现在我想在本地运行客户端(使用npm start
),但连接到仍然在Azure上运行的认证服务。
我从云部署(=部署+服务)中删除了客户端,并在我的React客户端中使用域(=myexample.cloud
)作为我的axios客户端的基础URL。为了确认,在Azure上,我的入口-nginx-控制器类型Load_Balancer显示上述公共IP作为其外部IP加上端口80:30819/TCP,443:31077/TCP。当我在本地运行客户端时,它显示了正确的请求URL (http://myexample.cloud/api/users/signin
),但我得到了403 Forbidden
答案。
我错过了什么?我应该能够通过使用公共IP连接到我的云服务?这个错误是由我的客户端引起的,因为Azure没有设置路障。我是说这是一个公共IP,对吗?
更新1
只是为了澄清,403 Forbidden
不是由我试图用不正确的凭据登录引起的。我有另一个api/users/health-ckeck
路由给了我同样的错误
我的云入口部署。我也试过删除客户端部分(最后7行),但没有效果。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-service
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: myexample.cloud
http:
paths:
- path: /api/users/?(.*)
pathType: Prefix
backend:
service:
name: auth-srv
port:
number: 3000
- path: /
pathType: Prefix
backend:
service:
name: client-srv
port:
number: 3000
我的客户端云部署+当客户端在云中运行时工作的服务
apiVersion: apps/v1
kind: Deployment
metadata:
name: client
spec:
replicas: 1
selector:
matchLabels:
app: client
template:
metadata:
labels:
app: client
spec:
containers:
- name: client
image: client
---
apiVersion: v1
kind: Service
metadata:
name: client
spec:
selector:
app: client
ports:
- name: client
protocol: TCP
port: 3000
targetPort: 3000
my auth deployment + service
apiVersion: apps/v1
kind: Deployment
metadata:
name: auth
spec:
replicas: 1
selector:
matchLabels:
app: auth
template:
metadata:
labels:
app: auth
spec:
containers:
- name: auth
image: auth
apiVersion: v1
kind: Service
metadata:
name: auth
spec:
selector:
app: auth
ports:
- name: auth
protocol: TCP
port: 3000
targetPort: 3000
问题实际上是CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin'
但是我的浏览器没有告诉我。从Chrome切换到Firefox后,问题变得明显起来。我必须向我的入口控制器添加注释,如下所述:express + socket。kubernetes Access-Control-Allow-Origin'头