GCP url-map with cookie regex matching rule
GCP url-map with cookie regex matching rule
我正在设置 GCP url map 以根据 cookie 值将请求路由到后端服务。由于 cookie 会有多个键值,我正在尝试使用正则表达式匹配器。
我需要根据来自 cookie 的区域值将请求路由到后端。
典型的 cookie 如下所示:foo=bar;region=eu;variant=beta;
defaultService: https://www.googleapis.com/compute/v1/projects/<project_id>/global/backendServices/multi-region-1
kind: compute#urlMap
name: regex-url-map
hostRules:
- hosts:
- '*'
pathMatcher: path-matcher-1
pathMatchers:
- defaultService: https://www.googleapis.com/compute/v1/projects/<project_id>/global/backendServices/multi-region-1
name: path-matcher-1
routeRules:
- matchRules:
- prefixMatch: /
headerMatches:
- headerName: Cookie
regexMatch: (region=us)
priority: 0
service: https://www.googleapis.com/compute/v1/projects/<project_id>/global/backendServices/multi-region-1
- matchRules:
- prefixMatch: /
headerMatches:
- headerName: Cookie
regexMatch: (region=eu)
priority: 1
service: https://www.googleapis.com/compute/v1/projects/<project_id>/global/backendServices/multi-region-2
但是,此 url-map 验证失败并出现以下错误:
$ gcloud compute url-maps validate --source regex-url-map.yaml
result:
loadErrors:
- HttpHeaderMatch has no predicates specified
loadSucceeded: false
testPassed: false
请注意,如果 cookie 的值是这样的:region=us
,则与 cookie 的完全匹配会通过验证并正确匹配。完全匹配的 headerMatches
部分如下所示:
headerMatches:
- headerName: Cookie
exactMatch: region=us
关于我在这里做错了什么的任何指示?
谢谢!
您的推理方式是正确的,但是 您尝试使用的功能在 GCP 的外部负载平衡中不受支持;它仅适用于内部负载平衡。
查看 documentation 中的最后一个短语:
Note that regexMatch only applies to Loadbalancers that have their loadBalancingScheme set to INTERNAL_SELF_MANAGED.
我知道这不是你要找的答案,但你总是可以file a new feature request on Google's IssueTracker并详细解释你想要什么,它是如何工作的等等。
您总是可以尝试在 http 请求中传递 region
值,而不是一直请求 https://myhost.com
如果您可以添加后缀,例如:https://myhost.com/region1
它会允许 GCP 负载平衡器规则处理它并且 direct the traffic to the backend 您希望。
看看这个例子. Another example . And another one (mine) explaining how to use pathMatcher
to direct traffic to different backend services。
我正在设置 GCP url map 以根据 cookie 值将请求路由到后端服务。由于 cookie 会有多个键值,我正在尝试使用正则表达式匹配器。
我需要根据来自 cookie 的区域值将请求路由到后端。
典型的 cookie 如下所示:foo=bar;region=eu;variant=beta;
defaultService: https://www.googleapis.com/compute/v1/projects/<project_id>/global/backendServices/multi-region-1
kind: compute#urlMap
name: regex-url-map
hostRules:
- hosts:
- '*'
pathMatcher: path-matcher-1
pathMatchers:
- defaultService: https://www.googleapis.com/compute/v1/projects/<project_id>/global/backendServices/multi-region-1
name: path-matcher-1
routeRules:
- matchRules:
- prefixMatch: /
headerMatches:
- headerName: Cookie
regexMatch: (region=us)
priority: 0
service: https://www.googleapis.com/compute/v1/projects/<project_id>/global/backendServices/multi-region-1
- matchRules:
- prefixMatch: /
headerMatches:
- headerName: Cookie
regexMatch: (region=eu)
priority: 1
service: https://www.googleapis.com/compute/v1/projects/<project_id>/global/backendServices/multi-region-2
但是,此 url-map 验证失败并出现以下错误:
$ gcloud compute url-maps validate --source regex-url-map.yaml
result:
loadErrors:
- HttpHeaderMatch has no predicates specified
loadSucceeded: false
testPassed: false
请注意,如果 cookie 的值是这样的:region=us
,则与 cookie 的完全匹配会通过验证并正确匹配。完全匹配的 headerMatches
部分如下所示:
headerMatches:
- headerName: Cookie
exactMatch: region=us
关于我在这里做错了什么的任何指示? 谢谢!
您的推理方式是正确的,但是 您尝试使用的功能在 GCP 的外部负载平衡中不受支持;它仅适用于内部负载平衡。
查看 documentation 中的最后一个短语:
Note that regexMatch only applies to Loadbalancers that have their loadBalancingScheme set to INTERNAL_SELF_MANAGED.
我知道这不是你要找的答案,但你总是可以file a new feature request on Google's IssueTracker并详细解释你想要什么,它是如何工作的等等。
您总是可以尝试在 http 请求中传递 region
值,而不是一直请求 https://myhost.com
如果您可以添加后缀,例如:https://myhost.com/region1
它会允许 GCP 负载平衡器规则处理它并且 direct the traffic to the backend 您希望。
看看这个例子pathMatcher
to direct traffic to different backend services。