kubernetes 是否在Ingress服务名称中使用路径正则表达式变量匹配?

qni6mghb  于 2023-03-29  发布在  Kubernetes
关注(0)|答案(1)|浏览(181)

是否有可能在通用Ingress配置中实现以下内容?在backend规范中允许变量引用。我已经在https://github.com/kubernetes/ingress-nginx/issues/7739上发现了这一点,但没有任何后续行动。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: global-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - host: tool.example.com
      http:
        paths:
          - path: /be/(?<Namespace>[^/]+)(.+)?
            pathType: Prefix
            backend:
              service:
                name: $Namespace.be-service
                port:
                  number: 8000
neekobn8

neekobn81#

可以用通用的方式来写,但不能用你问题中描述的方式。
对于这个特定的用例,您希望在需要的地方插入“namespace”参数,Helm无疑是最合适的工具。
例如:

值.yaml

namespace: yourNsName

入口.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: global-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - host: tool.example.com
      http:
        paths:
          - path: /be/(?<{{ .Values.namespace }}>[^/]+)(.+)?
            pathType: Prefix
            backend:
              service:
                name: {{ .Values.namespace }}.be-service
                port:
                  number: 8000

显然,整个应用程序必须转换为Chart。
另外还有Kustomize和它的补丁。
示例:

kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - <PATH WHERE INGRESS FILE IS>

patches:
- target:
    kind: Ingress
    name: global-ingress
  patch: |-
    - op: replace
      path: /spec/rules/0/http/paths/0/path
      value: /be/(?<NAMESPACE-NAME>[^/]+)(.+)?
    - op: replace
      path: /spec/rules/0/http/paths/0/backend/service/name
      value: NAMESPACE-NAME.be-service

这取决于您如何构建存储库。

相关问题