我要做什么
/
的交通需要转到运行在client
上的FE 3000
。 /api
的交通需要前往BE server
。apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/add-base-url: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /?(.*)
backend:
serviceName: client-cluster-ip-service
servicePort: 3000
- path: /api?/(.*)
backend:
serviceName: server-cluster-ip-service
servicePort: 5000
问题
# urls.py
urlpatterns = [
path('auth/', include('authentication.urls')),
path('admin/', admin.site.urls),
]
/api/auth
可以正常工作。 /api/admin
。 Django从网址中删除了/api
,使其仅/admin
不存在。 这似乎是Django的默认行为。据我所知,无法覆盖它。 有效的方法
- path: /?(.*)
backend:
serviceName: server-cluster-ip-service
servicePort: 5000
/admin
可以正常工作。 client
的能力。以某种方式,我需要防止Django删除前缀。或者也许有一种方法可以处理来自nginx-ingress
的这种类型的路由。
什么不起作用
以下任何变化:
- http:
paths:
- path: /?(.*)
backend:
serviceName: client-cluster-ip-service
servicePort: 3000
- path: /api?/(.*)
backend:
serviceName: server-cluster-ip-service
servicePort: 5000
- path: /admin?/(.*)
backend:
serviceName: server-cluster-ip-service
servicePort: 5000
urlpatterns = [
path('auth/', include('authentication.urls')),
path('/', admin.site.urls),
]
urlpatterns = [
path('auth/', include('authentication.urls')),
path('', admin.site.urls),
]
urlpatterns = [
path('auth/', include('authentication.urls')),
path('api/admin/', admin.site.urls), # this justmakes it /api/api/admin given the ingress
]
# This just makes the URL pattern:
# - /api/api/auth/
# - /api/api/admin/
urlpatterns = [
path('api/', include([
path('auth/', include('authentication.urls'), name='auth'),
path('admin/', admin.site.urls),
])),
]
问题
所以不太确定如何解决这个问题。
nginx-ingress
解决此问题?提交请求后,以某种方式剥离了/api
?/api
中剥离/api/admin
?答案 0 :(得分:0)
在Django settings.py中添加了以下内容:
FORCE_SCRIPT_NAME = '/api/'
更新STATIC_URL,因为它将不再为管理门户提供资产:
STATIC_URL = '/api/static/`