GKE 入口;将重写应用于特定服务
GKE ingress; apply rewrite to specific service
鉴于此 yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress-2
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
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
我希望 rewrite-target
仅适用于服务 admin
。对 keycloak
的请求不应受到影响。我怎样才能做到这一点?
你可以分离出入口文件或配置,只要确保你保持不同的名称
所以你可以创建 两个 入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress-1
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: test.com
http:
paths:
- backend:
serviceName: admin
servicePort: 8080
path: /admin/*
pathType: ImplementationSpecific
Ingress: 2 使用不同的配置,您可以根据需要编辑任何内容,现在删除注释。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress-2
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: test.com
http:
paths:
- backend:
serviceName: keycloak
servicePort: 8080
path: /auth/*
pathType: ImplementationSpecific
如果您想将所有内容存储在一个 YAML 文件中,您也可以通过将它们与 ---
合并来实现。
用户Harsh Manvar的回答很好,给出了正确的解决方案。但我会稍微扩展一下并告诉你原因。始终创建尽可能少相互依赖的部署。例如,如果您需要更改 keycloak
中的某些内容,它不应该对 admin
产生任何影响。此外,如果入口发生故障,您将有 2 个损坏的服务,而不是一个。实际上,您应该始终为一项服务创建一个入口。
此外,您可能想要创建完全不同的重写规则。那么,创建单独的入口将是一个很好的主意。看看this question.
另请参阅 documentation 关于重写规则。
鉴于此 yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress-2
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
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
我希望 rewrite-target
仅适用于服务 admin
。对 keycloak
的请求不应受到影响。我怎样才能做到这一点?
你可以分离出入口文件或配置,只要确保你保持不同的名称
所以你可以创建 两个 入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress-1
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: test.com
http:
paths:
- backend:
serviceName: admin
servicePort: 8080
path: /admin/*
pathType: ImplementationSpecific
Ingress: 2 使用不同的配置,您可以根据需要编辑任何内容,现在删除注释。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress-2
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: test.com
http:
paths:
- backend:
serviceName: keycloak
servicePort: 8080
path: /auth/*
pathType: ImplementationSpecific
如果您想将所有内容存储在一个 YAML 文件中,您也可以通过将它们与 ---
合并来实现。
用户Harsh Manvar的回答很好,给出了正确的解决方案。但我会稍微扩展一下并告诉你原因。始终创建尽可能少相互依赖的部署。例如,如果您需要更改 keycloak
中的某些内容,它不应该对 admin
产生任何影响。此外,如果入口发生故障,您将有 2 个损坏的服务,而不是一个。实际上,您应该始终为一项服务创建一个入口。
此外,您可能想要创建完全不同的重写规则。那么,创建单独的入口将是一个很好的主意。看看this question.
另请参阅 documentation 关于重写规则。