You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GKE Ingress如何为指定admin服务单独配置rewrite规则不影响keycloak

实现方案

Nginx Ingress 的 annotation 默认作用于整个 Ingress 资源下的所有路由规则,要让 rewrite-target 仅作用于admin服务,最通用且低风险的方案是拆分出两个独立的 Ingress 资源,分别管理两类路由规则:

方案1:拆分Ingress资源(推荐)

第一个Ingress仅配置admin服务的路由,携带重写规则注解:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress-admin
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - host: test.com
    http:
      paths:
      - backend:
          serviceName: admin
          servicePort: 8080
        path: /admin/*
        pathType: ImplementationSpecific

第二个Ingress仅配置keycloak服务的路由,不带重写规则注解:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress-keycloak
spec:
  rules:
  - host: test.com
    http:
      paths:
      - backend:
          serviceName: keycloak
          servicePort: 8080
        path: /auth/*
        pathType: ImplementationSpecific

该方案无需自定义Nginx配置,兼容性好,后续修改不同服务的路由规则互不干扰。

方案2:单个Ingress内通过配置片段实现(适合不想拆分资源的场景)

如果需要保留单个Ingress资源,可以移除全局的rewrite-target注解,改用nginx.ingress.kubernetes.io/configuration-snippet针对/admin路径单独配置重写规则:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress-2
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^/admin/(.*) /$1 break;
spec:
  rules:
  - host: test.com
    http:
      paths:
      - backend:
          serviceName: admin
          servicePort: 8080
        path: /admin/*
        pathType: ImplementationSpecific
      - backend:
          serviceName: keycloak
          servicePort: 8080
        path: /auth/*
        pathType: ImplementationSpecific

注意:你当前使用的extensions/v1beta1版本的Ingress API在Kubernetes 1.19之后已被废弃,推荐升级为networking.k8s.io/v1版本的API使用。

内容的提问来源于stack exchange,提问作者Alloys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:12:00