带有后端服务名称 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处于挂起阶段

听到任何可能的解决方案都会非常有趣。之前在堆栈上讨论过,但是没有任何进展: