API Kubernetes Gateway — использование правил HTTPRoute для перезаписи путей URI

Моя цель — иметь одинGatewayкоторый можно использовать для размещения нескольких приложений по разным путям. URLRewriteФильтр существует, однако, когда кажется, что он не работает должным образом.

Например, используя Cilium's Hubble, у меня есть следующий ресурс:

      apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
  name: hubble
  namespace: kube-system
spec:
  parentRefs:
    - name: gateway
      namespace: gateway-system
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /hubble
      filters:
        - type: URLRewrite
          urlRewrite:
            path:
              type: ReplacePrefixMatch
              replacePrefixMatch: /
      backendRefs:
        - name: hubble-ui
          port: 80

Я хотел бы перейти к доступу к Хабблу,http://k8s-ingress/argo-cdдля доступа к компакт-диску Argo,http://k8s-ingress/foobarдля доступа к Foobar и т. д.

Однако когда я применяю этот ресурс и перехожу к , я получаю ответ, но это пустая страница, а не обычная панель управления Хаббла. (Однако я могу сказать, что сервер отвечает, поскольку имя вкладки браузера установлено наHubble UI.

И если яcurlесли я получу ответ:

      $> curl http://k8s-ingress/hubble
<!doctype html><html><head><meta charset="utf-8"/><title>Hubble UI</title><base href="/"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width,user-scalable=0,initial-scale=1,minimum-scale=1,maximum-scale=1"/><link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png"/><link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png"/><link rel="shortcut icon" href="favicon.ico"/><script defer="defer" src="bundle.main.104f057a7d45238d9d45.js"></script><link href="bundle.main.3818224e482785607640.css" rel="stylesheet"></head><body><div id="app"></div></body></html>%

Я предполагаю, что что-то не работает, потому что мой сервер обрабатывает мой запрос так, как будто он предназначен для/hubbleвместо . Что обычно ни к чему не приводит. Но разве не в этом сутьURLRewrite/ReplacePrefixMatch? Переписать путь URI перед маршрутизацией на сервер?

Возможно, я неправильно помню, но разве не так обстоят дела в Istio? Например, следующееVirtualServiceспецификация:

      http:
  - match:
      - uri: 
          prefix: /hubble
    route:
      - destination:
          host: hubble-ui
          port: 
            number: 80
    rewrite:
      uri: /

Я также пытался использоватьURLRewrite/ReplaceFullPathно это приводит к тому же поведению, что и выше.

          - matches:
        - path:
            type: PathPrefix
            value: /hubble
      filters:
        - type: URLRewrite
          urlRewrite:
            path:
              type: ReplaceFullPath
              replaceFullPath: /
      backendRefs:
        - name: hubble-ui
          port: 80

RequestRedirect/ReplaceFullpathработает несколько. Благодаря этому я могу перейти кhttp://k8s-ingress/hubbleи мой браузер перенаправится с кодом 302 наhttp://k8s-ingressгде я могу успешно попасть в пользовательский интерфейс Хаббла. Но это не то, чего я хочу, поскольку я смогу разместить на шлюзе только одно приложение по адресу:/.

          - matches:
        - path:
            type: PathPrefix
            value: /hubble
      filters:
        - type: RequestRedirect
          requestRedirect:
            path:
              type: ReplaceFullPath
              replaceFullPath: /
            statusCode: 302
    - backendRefs:
        - name: hubble-ui
          port: 80

0 ответов

Другие вопросы по тегам