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
相关产品推荐
相关产品推荐

