带有后端服务名称 regex/wildcard 或选择器的 Kubernetes 入口
Kubernetes ingress with backend serviceName regex/wildcard or selector
大家好,我们有一个使用 Flink 运算符的蓝绿部署的 Flink 应用程序。
Flinkk8soperator 用于 Apache Flink。运营商在部署后启动了以下三个 K8s 服务:
my-flinkapp-14hdhsr (Top level service)
my-flinkapp-green
my-flinkapp-blue
我们的想法是,蓝绿色中的两者之一将处于活动状态并且具有 pods(蓝色或绿色)。
活动选择器的选择器将与选择器 flink-application-version=blue
一起存储在顶级 myflinkapp-14hdhsr
服务中。或绿色。如下:
Labels: flink-app=my-flinkapp
flink-app-hash=14hdhsr
flink-application-version=blue
Annotations: <none>
Selector: flink-app=my-flinkapp,flink-application-version=blue,flink-deployment-type=jobmanager,
我有一个入口定义如下,我想用它指向顶级服务。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header Accept-Encoding "";
sub_filter '<head>' '<head> <base href="/happy-flink-ui/">';
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/auth-url: "https://$host/oauth2/auth"
nginx.ingress.kubernetes.io/auth-signin: "https://$host/oauth2/start?rd=$escaped_request_uri"
name: flink-secure-ingress-my-flink-app
namespace: happy-flink-flink
spec:
rules:
- host: flinkui-myapp.foo.com
http:
paths:
- path: /happy-flink-ui(/|$)(.*)
backend:
serviceName: my-flinkapp-14hdhsr // This works but....
servicePort: 8081
我面临的问题是,随着 flink 操作员在每次部署时更改哈希值,顶级服务在最后不断更改哈希值。例如。 myflinkapp-89hddew .etc.
所以我不能在入口定义中有静态服务名称。
所以我想知道入口是否可以根据选择器或服务名称的正则表达式来选择服务,这可以说明顶级应用程序服务名称加上末尾的哈希值。
flink-app-hash
(即服务名称的哈希部分 - 14hdsr)也是顶级服务中标签的一部分。不管怎样,我可以利用它吗?
想知道是否可以在此处应用默认后端?
使用 Flink 运算符的人是否以不同的方式解决了这个问题?
不幸的是,在 Ingres 控制器内的 .backend.serviceName
内使用任何类型的 regex/wildcards/jsonpath/variables/references
是不可能的。
您只能在 path
中使用正则表达式:Ingress Path Matching
并且暂时不会实施:Allow variable references in backend spec处于挂起阶段
听到任何可能的解决方案都会非常有趣。之前在堆栈上讨论过,但是没有任何进展:
大家好,我们有一个使用 Flink 运算符的蓝绿部署的 Flink 应用程序。
Flinkk8soperator 用于 Apache Flink。运营商在部署后启动了以下三个 K8s 服务:
my-flinkapp-14hdhsr (Top level service)
my-flinkapp-green
my-flinkapp-blue
我们的想法是,蓝绿色中的两者之一将处于活动状态并且具有 pods(蓝色或绿色)。
活动选择器的选择器将与选择器 flink-application-version=blue
一起存储在顶级 myflinkapp-14hdhsr
服务中。或绿色。如下:
Labels: flink-app=my-flinkapp
flink-app-hash=14hdhsr
flink-application-version=blue
Annotations: <none>
Selector: flink-app=my-flinkapp,flink-application-version=blue,flink-deployment-type=jobmanager,
我有一个入口定义如下,我想用它指向顶级服务。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header Accept-Encoding "";
sub_filter '<head>' '<head> <base href="/happy-flink-ui/">';
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/auth-url: "https://$host/oauth2/auth"
nginx.ingress.kubernetes.io/auth-signin: "https://$host/oauth2/start?rd=$escaped_request_uri"
name: flink-secure-ingress-my-flink-app
namespace: happy-flink-flink
spec:
rules:
- host: flinkui-myapp.foo.com
http:
paths:
- path: /happy-flink-ui(/|$)(.*)
backend:
serviceName: my-flinkapp-14hdhsr // This works but....
servicePort: 8081
我面临的问题是,随着 flink 操作员在每次部署时更改哈希值,顶级服务在最后不断更改哈希值。例如。 myflinkapp-89hddew .etc.
所以我不能在入口定义中有静态服务名称。
所以我想知道入口是否可以根据选择器或服务名称的正则表达式来选择服务,这可以说明顶级应用程序服务名称加上末尾的哈希值。
flink-app-hash
(即服务名称的哈希部分 - 14hdsr)也是顶级服务中标签的一部分。不管怎样,我可以利用它吗?
想知道是否可以在此处应用默认后端?
使用 Flink 运算符的人是否以不同的方式解决了这个问题?
不幸的是,在 Ingres 控制器内的 .backend.serviceName
内使用任何类型的 regex/wildcards/jsonpath/variables/references
是不可能的。
您只能在 path
中使用正则表达式:Ingress Path Matching
并且暂时不会实施:Allow variable references in backend spec处于挂起阶段
听到任何可能的解决方案都会非常有趣。之前在堆栈上讨论过,但是没有任何进展: