[英]Angular, NGINX cannot connect to backend on Kubernetes cluster
我正在努力学习K8。 我有一个使用 angular 制作的前端应用程序。 我在 NGINX 代理后面提供它。 我也有一个具有功能的后端。 有我的文件,
nginx.conf
http {
upstream gateway {
server sb-gateway:8081;
}
include /etc/nginx/mime.types;
server {
listen 80;
sendfile on;
default_type application/octet-stream;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /api/ {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://gateway;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
用户服务.ts
...
return this.http.post('/api/login', {data})
...
ui-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: sb-ui
name: sb-ui
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
nodePort: 30000
selector:
app: sb-ui
后端服务称为sb-gateway
,我正在尝试将所有包含/api/
的请求路由到后端(如 NGINX 中指定的那样)。 但是当我尝试从前端点击路线/按下按钮时出现此错误。
POST http://192.168.64.2:30000/api/login 404 (NOT FOUND)
。
我正在尝试在 minikube 上运行它。 我在前端 pod 中进行了 SSH,并尝试 curl 后端服务。 有用。 我只需要弄清楚我应该如何从 angular 上的前端服务通信到后端服务。
任何帮助将不胜感激!
将此答案发布为社区 wiki,以提供更多关于如何允许/将流量路由到 Kubernetes 集群/中的基线。
随意扩展它。
牢记以下声明:
我正在努力学习K8。
您应该使用Ingress
,而不是使用充当代理的nginx
Pod
。
总之Ingress
可以描述为:
管理对集群中服务的外部访问的 API object,通常是 HTTP。
Ingress 可以提供负载平衡、SSL 终止和基于名称的虚拟主机。
通过Ingress
object,您可以告诉您的Ingress
controller(在本示例中为nginx-ingress
)具有允许您相应地路由流量的特定配置。
以以下情况为例:
/api
路径上接收请求nginx
Pod
)具体到:
我正在尝试在 minikube 上运行它。
Minikube
已经内置了Ingress
插件,可以通过单个命令启用(有一些例外,请参阅具体--driver
的文档):
$ minikube addons enable ingress
使用上述命令,您将生成nginx-ingress
。
创建设置以显示如何配置它:
$ kubectl create deployment hello --image=gcr.io/google-samples/hello-app:2.0
$ kubectl expose deployment hello --port=8080 --type=ClusterIP
$ kubectl create deployment nginx --image=nginx
$ kubectl expose deployment nginx --port=80 --type=ClusterIP
Ingress
资源应如下所示:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: simple-fanout-example
spec:
ingressClassName: "nginx"
rules:
- host:
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: hello
port:
number: 80
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80
上面的Ingress
示例将做什么:
/api
、 /api/
、 /api/xyz
等请求:
hello
Pod
路由到hello
Service
/
、 /xyz
、 /abc/xyz
等请求:
nginx
Pod
路由到nginx
Service
旁注!
如果您需要向
Ingress
添加一些特定配置,您可以查看此文档:
您可以从hello
Pod
日志中看到:
2021/04/09 15:22:07 Server listening on port 8080
2021/04/09 15:50:14 Serving request: /api
2021/04/09 15:50:17 Serving request: /api
2021/04/09 15:50:19 Serving request: /api/asdasd
其他资源:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.