{ config, kubenix, ... }: { imports = with kubenix.modules; [ test k8s istio ]; test = { name = "istio-bookinfo"; description = "Simple istio bookinfo application (WIP)"; }; kubernetes.api."networking.istio.io"."v1alpha3" = { Gateway."bookinfo-gateway" = { spec = { selector.istio = "ingressgateway"; servers = [{ port = { number = 80; name = "http"; protocol = "HTTP"; }; hosts = [ "*" ]; }]; }; }; VirtualService.bookinfo = { spec = { hosts = [ "*" ]; gateways = [ "bookinfo-gateway" ]; http = [{ match = [{ uri.exact = "/productpage"; } { uri.exact = "/login"; } { uri.exact = "/logout"; } { uri.prefix = "/api/v1/products"; }]; route = [{ destination = { host = "productpage"; port.number = 9080; }; }]; }]; }; }; DestinationRule.productpage = { spec = { host = "productpage"; subsets = [{ name = "v1"; labels.version = "v1"; }]; }; }; DestinationRule.reviews = { spec = { host = "reviews"; subsets = [{ name = "v1"; labels.version = "v1"; } { name = "v2"; labels.version = "v2"; } { name = "v3"; labels.version = "v3"; }]; }; }; DestinationRule.ratings = { spec = { host = "ratings"; subsets = [{ name = "v1"; labels.version = "v1"; } { name = "v2"; labels.version = "v2"; } { name = "v2-mysql"; labels.version = "v2-mysql"; } { name = "v2-mysql-vm"; labels.version = "v2-mysql-vm"; }]; }; }; DestinationRule.details = { spec = { host = "details"; subsets = [{ name = "v1"; labels.version = "v1"; } { name = "v2"; labels.version = "v2"; }]; }; }; }; }