具有静态内容的网站的 Istio 配置(特别是 kubevious UI)

Istio configuration for websites with static content (in particular kubevious UI)

我正在尝试配置 istio VirtualService,以便我可以通过它打开 kubevious 仪表板 (https://github.com/kubevious/kubevious)。

我有以下设置:

resource "kubernetes_manifest" "kubevious" {
  provider = kubernetes-alpha

  manifest = {
    apiVersion = "networking.istio.io/v1alpha3"
    kind = "VirtualService"
    metadata = {
      name = "kubevious"
      namespace = "kubevious"
    }
    spec = {
      gateways = [
        "istio-system/space-gateway"
      ]
      hosts = [
        "*"
      ]
      http = [
        {
          match = [
            {
              uri = {
                prefix = "/kubevious"
              }
            }
          ]
          rewrite = {
            uri = "/"
          }
          route = [
            {
              destination = {
                host = "kubevious-ui-svc.kubevious.svc.cluster.local"
              }
            }
          ]
        },
        {
          match = [
            {
              uri = {
                prefix = "/static"
              }
            },
            {
              uri = {
                prefix = "/socket"
              }
            },
            {
              uri = {
                regex: "^.*\.(ico|png|jpg)$"
              }
            }
          ]
          route = [
            {
              destination = {
                host = "kubevious-ui-svc.kubevious.svc.cluster.local"
              }
            }
          ]
        }
      ]
    }
  }
}

kubevious 网站正在打开(尽管有一些我猜与 kubevious 相关的套接字错误)。

我对这种方法有一个问题。如果我想托管更多具有静态内容的网站怎么办?目前所有到达 %istio_ingress_ip%/static 的内容都将转发给 kubevious。配置它的任何其他方式,即当我调用 %istio_ingress_ip%/kubevious 时,它将静态内容解析为 %istio_ingress_ip %/kubevious/static?

What if I want to host more websites which have static content?

AFAIK 你应该为此指定主机,而不是 *


例如,假设您有 2 个静态站点,example.com 和 sample.com,然后您在虚拟服务中创建了 2 个主机。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: example-vs
spec:
  hosts:
  - example.com   <----
  http:
  - match:
    - uri:
        prefix: /example
    - uri:
        prefix: /static
    - uri:
        prefix: /socket
    - uri:
        regex: "^.*\.(ico|png|jpg)$"
    route:
    - destination:
        host: example.default.svc.cluster.local

---

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: sample-vs
spec:
  hosts:
  - sample.com    <----
  http:
  - match:
    - uri:
        prefix: /sample
    - uri:
        prefix: /static
    - uri:
        prefix: /socket
    - uri:
        regex: "^.*\.(ico|png|jpg)$"
    route:
    - destination:
        host: sample.default.svc.cluster.local

其他资源:


Any other way to configure it so that i.e. when I invoke %istio_ingress_ip%/kubevious, it will resolve the static content to %istio_ingress_ip%/kubevious/static?

关于在 istio 中重写,值得检查的资源很少。