Support encoded path in router (#1347)
Encoded path means the URL path contains encoded string like "/foo%2Fbar". Gorilla/Mux by default doesn't enable encoded path support, you need to enable it when initializing the router. This PR adds a new environment variable USE_ENCODED_PATH to the router deployment to enable encoded path support.
This commit is contained in:
@@ -69,6 +69,7 @@ Parameter | Description | Default
|
|||||||
`router.svcAddressMaxRetries` | Max retries times for router to retry on a certain service URL returns from cache/executor | `5`
|
`router.svcAddressMaxRetries` | Max retries times for router to retry on a certain service URL returns from cache/executor | `5`
|
||||||
`router.svcAddressUpdateTimeout` | The length of update lock expiry time for router to get a service URL returns from executor | `30`
|
`router.svcAddressUpdateTimeout` | The length of update lock expiry time for router to get a service URL returns from executor | `30`
|
||||||
`router.svcAnnotations` | Annotations for router service | None
|
`router.svcAnnotations` | Annotations for router service | None
|
||||||
|
`router.useEncodedPath` | For router to match encoded path. If true, "/foo%2Fbar" will match the path "/{var}"; Otherwise, it will match the path "/foo/bar". | `false`
|
||||||
`router.roundTrip.disableKeepAlive` | Disable transport keep-alive for fast switching function version | `true`
|
`router.roundTrip.disableKeepAlive` | Disable transport keep-alive for fast switching function version | `true`
|
||||||
`router.roundTrip.keepAliveTime` | The keep-alive period for an active network connection to function pod | `30s`
|
`router.roundTrip.keepAliveTime` | The keep-alive period for an active network connection to function pod | `30s`
|
||||||
`router.roundTrip.timeout` | HTTP transport request timeout | `50ms`
|
`router.roundTrip.timeout` | HTTP transport request timeout | `50ms`
|
||||||
|
|||||||
@@ -53,10 +53,12 @@ spec:
|
|||||||
value: {{ .Values.router.svcAddressMaxRetries | default 5 | quote }}
|
value: {{ .Values.router.svcAddressMaxRetries | default 5 | quote }}
|
||||||
- name: ROUTER_SVC_ADDRESS_UPDATE_TIMEOUT
|
- name: ROUTER_SVC_ADDRESS_UPDATE_TIMEOUT
|
||||||
value: {{ .Values.router.svcAddressUpdateTimeout | default "30s" | quote }}
|
value: {{ .Values.router.svcAddressUpdateTimeout | default "30s" | quote }}
|
||||||
- name: DEBUG_ENV
|
|
||||||
value: {{ .Values.debugEnv | quote }}
|
|
||||||
- name: TRACING_SAMPLING_RATE
|
- name: TRACING_SAMPLING_RATE
|
||||||
value: {{ .Values.traceSamplingRate | default "0.5" | quote }}
|
value: {{ .Values.traceSamplingRate | default "0.5" | quote }}
|
||||||
|
- name: USE_ENCODED_PATH
|
||||||
|
value: {{ .Values.router.useEncodedPath | default false | quote }}
|
||||||
|
- name: DEBUG_ENV
|
||||||
|
value: {{ .Values.debugEnv | quote }}
|
||||||
{{- if .Values.analytics }}
|
{{- if .Values.analytics }}
|
||||||
- name: ANALYTICS_URL
|
- name: ANALYTICS_URL
|
||||||
value: "https://g.fission.sh/metrics"
|
value: "https://g.fission.sh/metrics"
|
||||||
|
|||||||
@@ -66,6 +66,12 @@ router:
|
|||||||
## Add annotations for router
|
## Add annotations for router
|
||||||
# svcAnnotations:
|
# svcAnnotations:
|
||||||
# cloud.google.com/load-balancer-type: Internal
|
# cloud.google.com/load-balancer-type: Internal
|
||||||
|
|
||||||
|
## For router to match encoded path.
|
||||||
|
## If true, "/foo%2Fbar" will match the path "/{var}";
|
||||||
|
## Otherwise, it will match the path "/foo/bar".
|
||||||
|
useEncodedPath: false
|
||||||
|
|
||||||
roundTrip:
|
roundTrip:
|
||||||
## If true, router will disable the HTTP keep-alive which result in performance degradation.
|
## If true, router will disable the HTTP keep-alive which result in performance degradation.
|
||||||
## But it ensures that router can redirect new coming requests to new function pods.
|
## But it ensures that router can redirect new coming requests to new function pods.
|
||||||
|
|||||||
@@ -53,10 +53,12 @@ spec:
|
|||||||
value: {{ .Values.router.svcAddressMaxRetries | default 5 | quote }}
|
value: {{ .Values.router.svcAddressMaxRetries | default 5 | quote }}
|
||||||
- name: ROUTER_SVC_ADDRESS_UPDATE_TIMEOUT
|
- name: ROUTER_SVC_ADDRESS_UPDATE_TIMEOUT
|
||||||
value: {{ .Values.router.svcAddressUpdateTimeout | default "30s" | quote }}
|
value: {{ .Values.router.svcAddressUpdateTimeout | default "30s" | quote }}
|
||||||
- name: DEBUG_ENV
|
|
||||||
value: {{ .Values.debugEnv | quote }}
|
|
||||||
- name: TRACING_SAMPLING_RATE
|
- name: TRACING_SAMPLING_RATE
|
||||||
value: {{ .Values.traceSamplingRate | default "0.5" | quote }}
|
value: {{ .Values.traceSamplingRate | default "0.5" | quote }}
|
||||||
|
- name: USE_ENCODED_PATH
|
||||||
|
value: {{ .Values.router.useEncodedPath | default false | quote }}
|
||||||
|
- name: DEBUG_ENV
|
||||||
|
value: {{ .Values.debugEnv | quote }}
|
||||||
{{- if .Values.analytics }}
|
{{- if .Values.analytics }}
|
||||||
- name: ANALYTICS_URL
|
- name: ANALYTICS_URL
|
||||||
value: "https://g.fission.sh/metrics"
|
value: "https://g.fission.sh/metrics"
|
||||||
|
|||||||
@@ -53,6 +53,12 @@ router:
|
|||||||
## Add annotations for router
|
## Add annotations for router
|
||||||
# svcAnnotations:
|
# svcAnnotations:
|
||||||
# cloud.google.com/load-balancer-type: Internal
|
# cloud.google.com/load-balancer-type: Internal
|
||||||
|
|
||||||
|
## For router to match encoded path.
|
||||||
|
## If true, "/foo%2Fbar" will match the path "/{var}";
|
||||||
|
## Otherwise, it will match the path "/foo/bar".
|
||||||
|
useEncodedPath: false
|
||||||
|
|
||||||
roundTrip:
|
roundTrip:
|
||||||
## If true, router will disable the HTTP keep-alive which result in performance degradation.
|
## If true, router will disable the HTTP keep-alive which result in performance degradation.
|
||||||
## But it ensures that router can redirect new coming requests to new function pods.
|
## But it ensures that router can redirect new coming requests to new function pods.
|
||||||
|
|||||||
+10
-1
@@ -63,7 +63,16 @@ import (
|
|||||||
// request url ---[trigger]---> Function(name, deployment) ----[deployment]----> Function(name, uid) ----[pool mgr]---> k8s service url
|
// request url ---[trigger]---> Function(name, deployment) ----[deployment]----> Function(name, uid) ----[pool mgr]---> k8s service url
|
||||||
|
|
||||||
func router(ctx context.Context, logger *zap.Logger, httpTriggerSet *HTTPTriggerSet, resolver *functionReferenceResolver) *mutableRouter {
|
func router(ctx context.Context, logger *zap.Logger, httpTriggerSet *HTTPTriggerSet, resolver *functionReferenceResolver) *mutableRouter {
|
||||||
mr := NewMutableRouter(logger, mux.NewRouter())
|
var mr *mutableRouter
|
||||||
|
|
||||||
|
// see issue https://github.com/fission/fission/issues/1317
|
||||||
|
useEncodedPath, _ := strconv.ParseBool(os.Getenv("USE_ENCODED_PATH"))
|
||||||
|
if useEncodedPath {
|
||||||
|
mr = NewMutableRouter(logger, mux.NewRouter().UseEncodedPath())
|
||||||
|
} else {
|
||||||
|
mr = NewMutableRouter(logger, mux.NewRouter())
|
||||||
|
}
|
||||||
|
|
||||||
httpTriggerSet.subscribeRouter(ctx, mr, resolver)
|
httpTriggerSet.subscribeRouter(ctx, mr, resolver)
|
||||||
return mr
|
return mr
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user