infra/homelab/endpoints.nix

49 lines
1.3 KiB
Nix

let
endpoints = {
"proxmox" = {
location = "100.100.75.80";
host = "proxmox.gmem.ca";
port = 8006;
protocol = "HTTPS";
};
"austin" = {
location = "192.168.50.237";
host = "austin.gmem.ca";
port = 8080;
protocol = "HTTP";
};
};
in {
kubernetes.resources.services = builtins.mapAttrs (name: endpoint: {
spec = {
ports.${name} = {
port = endpoint.port;
targetPort = endpoint.port;
};
};
}) endpoints;
kubernetes.resources.endpoints = builtins.mapAttrs (name: endpoint: {
subsets = [ {
addresses = [ { ip = endpoint.location; } ];
ports = [ { name = name; port = endpoint.port; protocol = "TCP"; } ];
} ];
}) endpoints;
kubernetes.resources.ingresses = builtins.mapAttrs (name: endpoint: {
metadata = { name = name; annotations = {
"cert-manager.io/issuer" = "le-issuer";
"nginx.ingress.kubernetes.io/backend-protocol" = endpoint.protocol;
}; };
spec = {
tls = [ { hosts = [ endpoint.host ]; secretName = "gmem-ca-wildcard"; } ];
rules = [ { host = endpoint.host; http.paths = [
{ path = "/"; pathType = "Prefix";
backend.service = {
name = name;
port.number = endpoint.port;
};
}
];}];
};
}) endpoints;
}