kubenix/tests/istio/bookinfo.nix
2022-04-02 13:41:07 -07:00

134 lines
2.6 KiB
Nix

{
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";
}
];
};
};
};
}