我在单个host:
下有多个location
块,如下所示:
apiVersion: networking.k8s.io/v1
kind: ingress
metadata:
name: ingress-nginx
annotations:
kubernetes.io/ingress.calass: nginx
ngnx.ingress.kubernetes.io/use-regex: "true"
ngnx.ingress.kubernetes.io/rewrite-target: /$2
spec:
ingressClassName: nginx
rules:
- host: ingress.mydomain.org.local
http:
paths:
- path: /app1(/|$)(.*)
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 5678
- path: /api(/|$)(.*)
pathType: Prefix
backend:
service:
name: api-service
port:
number: 5678
我需要插入access_by_lua_block{...}
仅为一个位置,说:/api
-我怎么做?我尝试了ngnx.ingress.kubernetes.ioconfiguration-snippet
,像这样:
annotations:
ngnx.ingress.kubernetes.ioconfiguration-snippet: |
location ~* "^/api(/|$)(.*)" {
access_by_lua_block {
....
}
}
,但这只是在每个其他位置条目下添加一个嵌套的location ~* "^/api(/|$)(.*)"
块。有什么办法可以实现吗?
正如@mdaniel所建议的,当你只需要对其中一个应用注释时,答案总是创建第二个入口资源。
多个Ingress controller在一个集群中的平稳共存是由Ingress类概念提供的,它要求以下内容:
-
每个Ingress Controller必须只处理其特定类的Ingress资源。
-
入口资源应该将ingressClassName字段设置为值,该值对应于用户想要使用的入口控制器的类。
-
VirtualServer, VirtualServerRoute, Policy和TransportServer资源应该将ingressClassName字段设置为值,该值对应于用户想要使用的入口控制器的类。
有关Ingress资源的更多信息,请参阅本文档。