k8s ingress nginx 为每个域设置重写目标
k8s ingress nginx set rewrite-target per domain
是否可以在入口中为每个域添加不同的重写目标?
我有一个看起来像这样的入口:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: multiple-domains-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /entry1/
spec:
rules:
- host: domain1.com
http:
paths:
- path: /(.*)
backend:
serviceName: my-service
servicePort: 8080
如果我可以像这样添加具有不同重定向的多个路径,那就太好了:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: multiple-domains-ingress
spec:
rules:
- host: domain1.com
http:
paths:
- path: /(.*)
backend:
serviceName: my-service
servicePort: 8080
redirect: /entry1/
- host: domain2.com
http:
paths:
- path: /(.*)
backend:
serviceName: my-service
servicePort: 8080
redirect: /entry2/
或者我是否必须为每个域创建一个新入口?
另外,如果有任何我在这里违反的最佳实践,我很乐意听到它:-)
谢谢
这是关于 Ingress 抽象的令人沮丧的事情之一。它被构建为一个极简主义系统,因此它可以很容易地由多个控制器(有效)实现,但这意味着很多功能都被困在注释的实现中,这些注释通常与抽象不太匹配,因为它们是一个通用的 key/value 配对系统。
IngressBackend API spec 仅包含 serviceName
和 servicePort
,因此您需要依赖单独入口配置中的注释。
ingress-nginx 细节
kubernetes ingress-nginx
设置了一个 "server" in it's config per ingress definition. This is similar to an apache VirtualHost. Annotations are generally applied at this server level. So unless the specific annotation 可以包含一个域,您需要将入口定义分开。
您可能会在一个入口上使用 configuration-snippet
注释提供自定义 nginx 配置,但我会避免这样做,因为它引入了破坏配置的机会。这也增加了入口控制器仅使用 nginx 的要求。
多个入口定义
主要要注意的是重复配置。如果您最终要管理 100 个域的入口定义,您可能希望从单个域列表构建配置,而不是在 100 个文件中维护相同的信息。
是否可以在入口中为每个域添加不同的重写目标?
我有一个看起来像这样的入口:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: multiple-domains-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /entry1/
spec:
rules:
- host: domain1.com
http:
paths:
- path: /(.*)
backend:
serviceName: my-service
servicePort: 8080
如果我可以像这样添加具有不同重定向的多个路径,那就太好了:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: multiple-domains-ingress
spec:
rules:
- host: domain1.com
http:
paths:
- path: /(.*)
backend:
serviceName: my-service
servicePort: 8080
redirect: /entry1/
- host: domain2.com
http:
paths:
- path: /(.*)
backend:
serviceName: my-service
servicePort: 8080
redirect: /entry2/
或者我是否必须为每个域创建一个新入口? 另外,如果有任何我在这里违反的最佳实践,我很乐意听到它:-)
谢谢
这是关于 Ingress 抽象的令人沮丧的事情之一。它被构建为一个极简主义系统,因此它可以很容易地由多个控制器(有效)实现,但这意味着很多功能都被困在注释的实现中,这些注释通常与抽象不太匹配,因为它们是一个通用的 key/value 配对系统。
IngressBackend API spec 仅包含 serviceName
和 servicePort
,因此您需要依赖单独入口配置中的注释。
ingress-nginx 细节
kubernetes ingress-nginx
设置了一个 "server" in it's config per ingress definition. This is similar to an apache VirtualHost. Annotations are generally applied at this server level. So unless the specific annotation 可以包含一个域,您需要将入口定义分开。
您可能会在一个入口上使用 configuration-snippet
注释提供自定义 nginx 配置,但我会避免这样做,因为它引入了破坏配置的机会。这也增加了入口控制器仅使用 nginx 的要求。
多个入口定义
主要要注意的是重复配置。如果您最终要管理 100 个域的入口定义,您可能希望从单个域列表构建配置,而不是在 100 个文件中维护相同的信息。