4

I'm trying to configure istio VirtualService so that I can open the kubevious dashboard (https://github.com/kubevious/kubevious) through it.

I have the following setup:

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 website is opening (albeit with some socket errors which I guess are related to kubevious).

I have one issue with this approach. What if I want to host more websites which have static content? Currently everything that goes to %istio_ingress_ip%/static will be forwarded to kubevious. 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?

Blink
  • 1,408
  • 13
  • 21

1 Answers1

2

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

AFAIK you should specify hosts for that, instead of *


For example let's say you have 2 static sites, example.com and sample.com, then you create 2 hosts in your virtual service.

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

Additional resources:


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?

There are few resources worth to check about rewrite in istio.

Jakub
  • 8,189
  • 1
  • 17
  • 31
  • 1
    Thanks for an answer. If I understood it correctly I'll need to work with FQDN which makes sense. I'll come back to accepting it as soon as I have implemented it. – Blink Oct 20 '20 at 08:21