基于Cookie值配置Nginx Ingress实现Kubernetes多服务流量路由
要实现携带Cookie Beta=1的请求转发到api-v1,其余情况(Beta=0或无该Cookie)转发到api-v2,可通过Nginx Ingress的自定义snippets注解完成,完整配置如下:
kind: Ingress metadata: name: api namespace: api annotations: kubernetes.io/ingress.class: nginx nginx.org/server-snippets: | upstream api-v1-svc { server api-v1.api.svc.cluster.local:80; } upstream api-v2-svc { server api-v2.api.svc.cluster.local:80; } nginx.org/location-snippets: | if ($cookie_Beta = "1") { proxy_pass http://api-v1-svc; break; } proxy_pass http://api-v2-svc; spec: ingressClassName: nginx tls: - hosts: - api.domain.com secretName: api-domain-com-tls rules: - host: api.domain.com http: paths: - path: / pathType: Prefix backend: service: name: api-v2 port: number: 80
配置要点说明
- server-snippets:在Nginx的server块中定义两个上游服务(upstream),分别指向
api-v1和api-v2的集群内部服务地址(格式为服务名.命名空间.svc.cluster.local:端口),这里选用Service的80端口(http端口)。 - location-snippets:
- 通过
$cookie_Beta变量提取请求中的Beta Cookie值,当值为1时,将请求转发到api-v1-svc上游,并用break终止后续规则执行。 - 所有未匹配到
Beta=1的请求(包括Beta=0或无该Cookie),默认转发到api-v2-svc上游。
- 通过
- 默认Backend:在Ingress规则中配置默认后端为api-v2,作为兜底保障,避免snippets规则未覆盖到的场景出现请求异常。
内容的提问来源于stack exchange,提问作者Szymon Kamiński
相关产品推荐
相关产品推荐

