Files
homelab/utils/traefik/ingressTCP/ingress-tcp.ts

63 lines
1.5 KiB
TypeScript

import { Construct } from "constructs";
import { Manifest } from "@cdktf/provider-kubernetes/lib/manifest";
import { KubernetesProvider } from "@cdktf/provider-kubernetes/lib/provider";
type IngressRouteTcpOptions = {
provider: KubernetesProvider;
name: string;
/**
* Match rule.
* Default is `HostSNI(\`*\`)` which is correct for most TCP services.
*/
match: string;
/** Namespace where the IngressRouteTCP will be created */
namespace: string;
/** EntryPoint name (e.g., "ssh", "mc25565", "postgres", etc.) */
entryPoint: string;
/** Backend service name */
serviceName: string;
/** Backend service port */
servicePort: number;
};
export class IngressRouteTcp extends Construct {
public readonly manifest: Manifest;
constructor(scope: Construct, id: string, opts: IngressRouteTcpOptions) {
super(scope, id);
const { name, match } = opts;
this.manifest = new Manifest(this, name, {
provider: opts.provider,
manifest: {
apiVersion: "traefik.io/v1alpha1",
kind: "IngressRouteTCP",
metadata: {
name,
namespace: opts.namespace,
},
spec: {
entryPoints: [opts.entryPoint],
routes: [
{
match,
services: [
{
name: opts.serviceName,
port: opts.servicePort,
},
],
},
],
},
},
});
}
}