使用 kubernetes 的 Ingress 仅调用索引路由而不调用其他路由
Ingress with kubernetes only calling the index route and not other routes
我有一个 Flask 应用程序,它有多个路由,包括默认路由“/”。我在 kubernetes 上部署了这个应用程序。我将 minikube 用作独立集群。我将部署公开为 NodePort 服务,然后使用入口将外部请求映射到集群中的应用程序 运行。我的入口资源看起来像这样...
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-test-svc
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: \"false\"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
backend:
serviceName: defualt-http-backend
servicePort: 80
rules:
- host: kubernetes-test.info
http:
paths:
- path: /*
backend:
serviceName: kubernetes-test-svc
servicePort: 80
而且我还配置了 /etc/hosts 文件以将请求路由到此主机。看起来像这样...
192.168.99.100 kubernetes-test.info
问题是无论我调用入口的哪个端点总是将它重定向到默认路由“/”。我的烧瓶应用程序看起来像这样...
@app.route('/')
def index():
return "Root route"
@app.route('/route1')
def route1():
return "Route 1"
@app.route('/route2')
def route2():
params = request.args
return make_response(jsonify({'Param1': params['one'], 'Param2': params['two']}))
因此,如果我向 kubernetes-test.info/route1 发出请求,它将向我显示文本 "Root Route" 而不是 "Route 1"。
但是如果我输入 192.168.99.100/route1,它会显示 "Route 1"。我不知道为什么会这样?为什么它与 minikube ip 一起工作但不与我指定的主机一起工作。
服务部署如下所示:-
apiVersion: v1
kind: Service
metadata:
name: kubernetes-test-svc
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
app: kubernetes-test
更新您的入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-test-svc
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
backend:
serviceName: defualt-http-backend
servicePort: 80
rules:
- host: kubernetes-test.info
http:
paths:
- path: /
backend:
serviceName: kubernetes-test-svc
servicePort: 80
我有一个 Flask 应用程序,它有多个路由,包括默认路由“/”。我在 kubernetes 上部署了这个应用程序。我将 minikube 用作独立集群。我将部署公开为 NodePort 服务,然后使用入口将外部请求映射到集群中的应用程序 运行。我的入口资源看起来像这样...
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-test-svc
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: \"false\"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
backend:
serviceName: defualt-http-backend
servicePort: 80
rules:
- host: kubernetes-test.info
http:
paths:
- path: /*
backend:
serviceName: kubernetes-test-svc
servicePort: 80
而且我还配置了 /etc/hosts 文件以将请求路由到此主机。看起来像这样...
192.168.99.100 kubernetes-test.info
问题是无论我调用入口的哪个端点总是将它重定向到默认路由“/”。我的烧瓶应用程序看起来像这样...
@app.route('/')
def index():
return "Root route"
@app.route('/route1')
def route1():
return "Route 1"
@app.route('/route2')
def route2():
params = request.args
return make_response(jsonify({'Param1': params['one'], 'Param2': params['two']}))
因此,如果我向 kubernetes-test.info/route1 发出请求,它将向我显示文本 "Root Route" 而不是 "Route 1"。
但是如果我输入 192.168.99.100/route1,它会显示 "Route 1"。我不知道为什么会这样?为什么它与 minikube ip 一起工作但不与我指定的主机一起工作。
服务部署如下所示:-
apiVersion: v1
kind: Service
metadata:
name: kubernetes-test-svc
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
app: kubernetes-test
更新您的入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-test-svc
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
backend:
serviceName: defualt-http-backend
servicePort: 80
rules:
- host: kubernetes-test.info
http:
paths:
- path: /
backend:
serviceName: kubernetes-test-svc
servicePort: 80