@r8s/recipes 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.d.ts +11 -2
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +15 -11
- package/dist/app.js.map +1 -1
- package/dist/database.d.ts +80 -5
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +189 -76
- package/dist/database.js.map +1 -1
- package/dist/dns-provider.js +1 -1
- package/dist/dns-provider.js.map +1 -1
- package/dist/endpoint-provider.d.ts.map +1 -1
- package/dist/endpoint-provider.js +22 -2
- package/dist/endpoint-provider.js.map +1 -1
- package/dist/endpoint.d.ts +17 -0
- package/dist/endpoint.d.ts.map +1 -1
- package/dist/endpoint.js +73 -35
- package/dist/endpoint.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/platform.d.ts +9 -0
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js.map +1 -1
- package/dist/r8s-cluster.d.ts +105 -0
- package/dist/r8s-cluster.d.ts.map +1 -0
- package/dist/r8s-cluster.js +187 -0
- package/dist/r8s-cluster.js.map +1 -0
- package/dist/secret-provider.d.ts +5 -1
- package/dist/secret-provider.d.ts.map +1 -1
- package/dist/secret-provider.js +3 -1
- package/dist/secret-provider.js.map +1 -1
- package/dist/web-service.d.ts +89 -0
- package/dist/web-service.d.ts.map +1 -1
- package/dist/web-service.js +74 -17
- package/dist/web-service.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint-provider.d.ts","sourceRoot":"","sources":["../src/endpoint-provider.tsx"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,GAAG,CAAC,EAAE;QACJ,qCAAqC;QACrC,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,CAQvD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,GAAG,CAAC,EAAE;QACJ,qCAAqC;QACrC,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,cAAc,CAQrE;AAED,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,QAAQ,EAAE,OAAO,GAAG,eAAe,CAAA;IACnC,iCAAiC;IACjC,QAAQ,CAAC,EAAE;QACT,8CAA8C;QAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,sCAAsC;QACtC,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,gCAAgC;QAChC,GAAG,CAAC,EAAE;YACJ,aAAa,CAAC,EAAE,MAAM,CAAA;SACvB,CAAA;KACF,CAAA;CACF;AAED,oDAAoD;AACpD,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,eAAe,GAAG,cAAc,CAAA;AAE9E,eAAO,MAAM,eAAe,0DAAuD,CAAA;AAEnF,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"endpoint-provider.d.ts","sourceRoot":"","sources":["../src/endpoint-provider.tsx"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,GAAG,CAAC,EAAE;QACJ,qCAAqC;QACrC,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,CAQvD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,GAAG,CAAC,EAAE;QACJ,qCAAqC;QACrC,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,cAAc,CAQrE;AAED,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,QAAQ,EAAE,OAAO,GAAG,eAAe,CAAA;IACnC,iCAAiC;IACjC,QAAQ,CAAC,EAAE;QACT,8CAA8C;QAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,sCAAsC;QACtC,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,gCAAgC;QAChC,GAAG,CAAC,EAAE;YACJ,aAAa,CAAC,EAAE,MAAM,CAAA;SACvB,CAAA;KACF,CAAA;CACF;AAED,oDAAoD;AACpD,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,eAAe,GAAG,cAAc,CAAA;AAE9E,eAAO,MAAM,eAAe,0DAAuD,CAAA;AAEnF,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,kCAiC5D"}
|
|
@@ -64,8 +64,28 @@ exports.EndpointContext = (0, defaults_1.createContext)({ provider: 'nginx' });
|
|
|
64
64
|
*/
|
|
65
65
|
function EndpointProvider(props) {
|
|
66
66
|
const { provider, children } = props;
|
|
67
|
-
// Resolve provider config
|
|
68
|
-
|
|
67
|
+
// Resolve provider config. Accepts:
|
|
68
|
+
// - string ('nginx' | 'envoy-gateway')
|
|
69
|
+
// - a plain EndpointConfig object
|
|
70
|
+
// - a JSX element of a provider component (e.g. <EnvoyGateway className="eg" />)
|
|
71
|
+
// — invoked here to produce its EndpointConfig
|
|
72
|
+
let config;
|
|
73
|
+
if (typeof provider === 'string') {
|
|
74
|
+
config = { provider };
|
|
75
|
+
}
|
|
76
|
+
else if (provider && typeof provider === 'object') {
|
|
77
|
+
const element = provider;
|
|
78
|
+
if (typeof element.type === 'function') {
|
|
79
|
+
const ProviderComponent = element.type;
|
|
80
|
+
config = ProviderComponent(element.props ?? {});
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
config = provider;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
config = provider;
|
|
88
|
+
}
|
|
69
89
|
// Map to RoutingContext for backward compatibility
|
|
70
90
|
const routing = {
|
|
71
91
|
mode: config.provider === 'envoy-gateway' ? 'gateway' : 'ingress',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint-provider.js","sourceRoot":"","sources":["../src/endpoint-provider.tsx"],"names":[],"mappings":";;;AAsBA,sBAQC;AAoBD,oCAQC;AAyFD,
|
|
1
|
+
{"version":3,"file":"endpoint-provider.js","sourceRoot":"","sources":["../src/endpoint-provider.tsx"],"names":[],"mappings":";;;AAsBA,sBAQC;AAoBD,oCAQC;AAyFD,4CAiCC;AApLD,oCAA2C;AAC3C,iDAAkD;AAClD,iDAAmD;AAoBnD,SAAgB,KAAK,CAAC,KAAiB;IACrC,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE;YACR,gBAAgB,EAAE,KAAK,CAAC,SAAS,IAAI,OAAO;YAC5C,GAAG,EAAE,KAAK,CAAC,GAAG;SACf;KACF,CAAA;AACH,CAAC;AAoBD,SAAgB,YAAY,CAAC,KAAwB;IACnD,OAAO;QACL,QAAQ,EAAE,eAAe;QACzB,QAAQ,EAAE;YACR,gBAAgB,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;YACzC,GAAG,EAAE,KAAK,CAAC,GAAG;SACf;KACF,CAAA;AACH,CAAC;AAsBY,QAAA,eAAe,GAAG,IAAA,wBAAa,EAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;AA+BnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,SAAgB,gBAAgB,CAAC,KAA4B;IAC3D,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAEpC,oCAAoC;IACpC,wCAAwC;IACxC,mCAAmC;IACnC,kFAAkF;IAClF,kDAAkD;IAClD,IAAI,MAAsB,CAAA;IAC1B,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,GAAG,EAAE,QAAQ,EAAE,CAAA;IACvB,CAAC;SAAM,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,QAA8C,CAAA;QAC9D,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAqC,CAAA;YACvE,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,QAA0B,CAAA;QACrC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,QAA0B,CAAA;IACrC,CAAC;IAED,mDAAmD;IACnD,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,MAAM,CAAC,QAAQ,KAAK,eAAe,CAAC,CAAC,CAAE,SAAmB,CAAC,CAAC,CAAE,SAAmB;QACvF,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,IAAI,IAAI;KAC5D,CAAA;IAED,OAAO,IAAA,UAAG,EAAC,yBAAc,CAAC,QAAQ,EAAE;QAClC,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,IAAA,UAAG,EAAC,uBAAe,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;KACrE,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/endpoint.d.ts
CHANGED
|
@@ -6,10 +6,27 @@ export interface EndpointProps extends Omit<BaseRouteProps, 'host'> {
|
|
|
6
6
|
serviceName: string;
|
|
7
7
|
/** Service port (default: 80) */
|
|
8
8
|
servicePort?: number;
|
|
9
|
+
/**
|
|
10
|
+
* Request path to route (default: '/'). Path-based routes are rendered
|
|
11
|
+
* as Prefix paths in Ingress mode AND PathPrefix matches in Gateway
|
|
12
|
+
* (HTTPRoute) mode so one host can serve multiple services.
|
|
13
|
+
*/
|
|
14
|
+
path?: string;
|
|
15
|
+
/** Ingress pathType when `path` is set (default: 'Prefix') */
|
|
16
|
+
pathType?: 'Prefix' | 'Exact' | 'ImplementationSpecific';
|
|
9
17
|
/** Create a DNS record via ExternalDNS (default: false, or true when DnsProvider is set) */
|
|
10
18
|
dns?: boolean;
|
|
11
19
|
/** DNS record TTL in seconds (default: 300) */
|
|
12
20
|
dnsTtl?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Reference to an existing shared Gateway instead of creating a new one.
|
|
23
|
+
* Set this to avoid allocating a new LoadBalancer IP per app.
|
|
24
|
+
* When set, only an HTTPRoute is created (no Gateway resource).
|
|
25
|
+
*/
|
|
26
|
+
sharedGateway?: {
|
|
27
|
+
name: string;
|
|
28
|
+
namespace?: string;
|
|
29
|
+
};
|
|
13
30
|
}
|
|
14
31
|
/**
|
|
15
32
|
* Endpoint — cluster-adaptive routing for a service.
|
package/dist/endpoint.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../src/endpoint.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAQpD,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;IACjE,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4FAA4F;IAC5F,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../src/endpoint.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAQpD,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;IACjE,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,wBAAwB,CAAA;IACxD,4FAA4F;IAC5F,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,kCAmQ5C"}
|
package/dist/endpoint.js
CHANGED
|
@@ -37,18 +37,22 @@ const dns_provider_1 = require("./dns-provider");
|
|
|
37
37
|
* )
|
|
38
38
|
*/
|
|
39
39
|
function Endpoint(props) {
|
|
40
|
-
const { name, namespace = 'default', host, serviceName, servicePort = 80, tls, annotations = {}, dns, dnsTtl = 300, } = props;
|
|
40
|
+
const { name, namespace = 'default', host, serviceName, servicePort = 80, path, pathType, tls, annotations = {}, dns, dnsTtl = 300, sharedGateway, } = props;
|
|
41
41
|
const routing = (0, core_1.useContext)(defaults_1.RoutingContext);
|
|
42
42
|
const endpointConfig = (0, core_1.useContext)(endpoint_provider_1.EndpointContext);
|
|
43
43
|
const sharedOperators = (0, core_1.useContext)(defaults_1.OperatorContext);
|
|
44
44
|
const dnsConfig = (0, core_1.useContext)(dns_provider_1.DnsContext);
|
|
45
45
|
// DNS defaults to true when DnsProvider is set, unless explicitly disabled
|
|
46
46
|
const createDnsRecord = dns ?? dnsConfig !== null;
|
|
47
|
+
// Mode resolution: the Platform RoutingContext describes the cluster, but
|
|
48
|
+
// an explicit EndpointProvider with <EnvoyGateway /> opts this endpoint
|
|
49
|
+
// into Gateway API even without a Platform (or CLI route-level default)
|
|
50
|
+
const gatewayMode = routing.mode === 'gateway' || endpointConfig.provider === 'envoy-gateway';
|
|
47
51
|
const resources = [];
|
|
48
|
-
if (
|
|
49
|
-
const gatewayClassName = routing.gatewayClassName
|
|
52
|
+
if (gatewayMode) {
|
|
53
|
+
const gatewayClassName = endpointConfig.settings?.gatewayClassName ?? routing.gatewayClassName ?? 'eg';
|
|
50
54
|
const secretName = tls?.secretName || `${name}-tls`;
|
|
51
|
-
const issuerName = tls?.clusterIssuer
|
|
55
|
+
const issuerName = tls?.clusterIssuer ?? endpointConfig.settings?.tls?.clusterIssuer ?? 'letsencrypt-prod';
|
|
52
56
|
const hasCertManager = sharedOperators.some((op) => op.name === 'cert-manager');
|
|
53
57
|
const hasEnvoyGateway = sharedOperators.some((op) => op.name === 'envoy-gateway');
|
|
54
58
|
if (tls && !hasCertManager) {
|
|
@@ -77,46 +81,77 @@ function Endpoint(props) {
|
|
|
77
81
|
}
|
|
78
82
|
// HTTPS listener with TLS, HTTP listener without
|
|
79
83
|
const useHttps = !!tls;
|
|
80
|
-
|
|
84
|
+
// Only create a Gateway when no sharedGateway is provided.
|
|
85
|
+
// When sharedGateway is set, attach an HTTPRoute to the existing
|
|
86
|
+
// gateway instead of allocating a new LoadBalancer IP.
|
|
87
|
+
if (!sharedGateway) {
|
|
88
|
+
resources.push((0, core_1.jsx)('Gateway', {
|
|
89
|
+
apiVersion: 'gateway.networking.k8s.io/v1',
|
|
90
|
+
kind: 'Gateway',
|
|
91
|
+
metadata: {
|
|
92
|
+
name: `${name}-gateway`,
|
|
93
|
+
namespace,
|
|
94
|
+
// ExternalDNS gateway source picks up hostnames from this annotation
|
|
95
|
+
...(createDnsRecord && {
|
|
96
|
+
annotations: {
|
|
97
|
+
'external-dns.alpha.kubernetes.io/hostname': host,
|
|
98
|
+
},
|
|
99
|
+
}),
|
|
100
|
+
},
|
|
101
|
+
spec: {
|
|
102
|
+
gatewayClassName,
|
|
103
|
+
listeners: [
|
|
104
|
+
{
|
|
105
|
+
name: useHttps ? 'https' : 'http',
|
|
106
|
+
protocol: useHttps ? 'HTTPS' : 'HTTP',
|
|
107
|
+
port: useHttps ? 443 : 80,
|
|
108
|
+
hostname: host,
|
|
109
|
+
...(tls && {
|
|
110
|
+
tls: {
|
|
111
|
+
mode: 'Terminate',
|
|
112
|
+
certificateRefs: [{ name: secretName }],
|
|
113
|
+
},
|
|
114
|
+
}),
|
|
115
|
+
},
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
120
|
+
const parentRef = sharedGateway
|
|
121
|
+
? {
|
|
122
|
+
name: sharedGateway.name,
|
|
123
|
+
...(sharedGateway.namespace && { namespace: sharedGateway.namespace }),
|
|
124
|
+
}
|
|
125
|
+
: { name: `${name}-gateway` };
|
|
126
|
+
resources.push((0, core_1.jsx)('HTTPRoute', {
|
|
81
127
|
apiVersion: 'gateway.networking.k8s.io/v1',
|
|
82
|
-
kind: '
|
|
128
|
+
kind: 'HTTPRoute',
|
|
83
129
|
metadata: {
|
|
84
|
-
name: `${name}-
|
|
130
|
+
name: `${name}-route`,
|
|
85
131
|
namespace,
|
|
86
|
-
// ExternalDNS
|
|
87
|
-
...(createDnsRecord &&
|
|
132
|
+
// ExternalDNS picks up hostnames from HTTPRoute annotations
|
|
133
|
+
...(createDnsRecord &&
|
|
134
|
+
sharedGateway && {
|
|
88
135
|
annotations: {
|
|
89
136
|
'external-dns.alpha.kubernetes.io/hostname': host,
|
|
90
137
|
},
|
|
91
138
|
}),
|
|
92
139
|
},
|
|
93
140
|
spec: {
|
|
94
|
-
|
|
95
|
-
listeners: [
|
|
96
|
-
{
|
|
97
|
-
name: useHttps ? 'https' : 'http',
|
|
98
|
-
protocol: useHttps ? 'HTTPS' : 'HTTP',
|
|
99
|
-
port: useHttps ? 443 : 80,
|
|
100
|
-
hostname: host,
|
|
101
|
-
...(tls && {
|
|
102
|
-
tls: {
|
|
103
|
-
mode: 'Terminate',
|
|
104
|
-
certificateRefs: [{ name: secretName }],
|
|
105
|
-
},
|
|
106
|
-
}),
|
|
107
|
-
},
|
|
108
|
-
],
|
|
109
|
-
},
|
|
110
|
-
}));
|
|
111
|
-
resources.push((0, core_1.jsx)('HTTPRoute', {
|
|
112
|
-
apiVersion: 'gateway.networking.k8s.io/v1',
|
|
113
|
-
kind: 'HTTPRoute',
|
|
114
|
-
metadata: { name: `${name}-route`, namespace },
|
|
115
|
-
spec: {
|
|
116
|
-
parentRefs: [{ name: `${name}-gateway` }],
|
|
141
|
+
parentRefs: [parentRef],
|
|
117
142
|
hostnames: [host],
|
|
118
143
|
rules: [
|
|
119
144
|
{
|
|
145
|
+
...(path && {
|
|
146
|
+
matches: [
|
|
147
|
+
{
|
|
148
|
+
path: {
|
|
149
|
+
type: 'PathPrefix',
|
|
150
|
+
value: path,
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
}),
|
|
120
155
|
backendRefs: [{ name: serviceName, port: servicePort }],
|
|
121
156
|
},
|
|
122
157
|
],
|
|
@@ -139,7 +174,10 @@ function Endpoint(props) {
|
|
|
139
174
|
name,
|
|
140
175
|
namespace,
|
|
141
176
|
annotations: {
|
|
142
|
-
|
|
177
|
+
// NOTE: no rewrite-target on host-level routes — setting it to
|
|
178
|
+
// '/' rewrites EVERY request path to '/' and breaks path-based
|
|
179
|
+
// upstreams (webhooks, APIs, OAuth callbacks). Set annotations
|
|
180
|
+
// explicitly when a captured-regex path needs one.
|
|
143
181
|
// ExternalDNS ingress source picks up hostnames from this annotation
|
|
144
182
|
...(createDnsRecord ? { 'external-dns.alpha.kubernetes.io/hostname': host } : {}),
|
|
145
183
|
...(tls?.clusterIssuer
|
|
@@ -158,8 +196,8 @@ function Endpoint(props) {
|
|
|
158
196
|
http: {
|
|
159
197
|
paths: [
|
|
160
198
|
{
|
|
161
|
-
path: '/',
|
|
162
|
-
pathType: 'Prefix',
|
|
199
|
+
path: path ?? '/',
|
|
200
|
+
pathType: pathType ?? 'Prefix',
|
|
163
201
|
backend: {
|
|
164
202
|
service: {
|
|
165
203
|
name: serviceName,
|
package/dist/endpoint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../src/endpoint.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../src/endpoint.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { Platform, type PlatformProps, type RoutingMode } from './platform';
|
|
2
|
+
export { R8sCluster, type R8sClusterProps } from './r8s-cluster';
|
|
2
3
|
export { App, type AppProps } from './app';
|
|
3
4
|
export { Database, type DatabaseProps } from './database';
|
|
4
5
|
export { Endpoint, type EndpointProps } from './endpoint';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,cAAc,GACpB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAGnD,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,EACL,KAAK,UAAU,EACf,aAAa,EACb,KAAK,kBAAkB,EACvB,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,UAAU,EACV,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,eAAe,EACf,KAAK,EACL,KAAK,UAAU,EACf,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,WAAW,EACX,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,cAAc,GACpB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AAGnD,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,EACL,KAAK,UAAU,EACf,aAAa,EACb,KAAK,kBAAkB,EACvB,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,UAAU,EACV,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,eAAe,EACf,KAAK,EACL,KAAK,UAAU,EACf,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,WAAW,EACX,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
// with good defaults. Named after what the user wants to achieve, not the
|
|
5
5
|
// underlying tools.
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.vaultSecretsOperator = exports.nginxIngressOperator = exports.cnpgOperator = exports.CertManager = exports.CertContext = exports.CertProvider = exports.EnvoyGateway = exports.Nginx = exports.EndpointContext = exports.EndpointProvider = exports.ExternalDns = exports.DnsContext = exports.DnsProvider = exports.ManualSecrets = exports.SealedSecrets = exports.Vault = exports.OpenBao = exports.SecretProvider = exports.Backup = exports.Monitoring = exports.Auth = exports.WebService = exports.Endpoint = exports.Database = exports.App = exports.Platform = void 0;
|
|
7
|
+
exports.vaultSecretsOperator = exports.nginxIngressOperator = exports.cnpgOperator = exports.CertManager = exports.CertContext = exports.CertProvider = exports.EnvoyGateway = exports.Nginx = exports.EndpointContext = exports.EndpointProvider = exports.ExternalDns = exports.DnsContext = exports.DnsProvider = exports.ManualSecrets = exports.SealedSecrets = exports.Vault = exports.OpenBao = exports.SecretProvider = exports.Backup = exports.Monitoring = exports.Auth = exports.WebService = exports.Endpoint = exports.Database = exports.App = exports.R8sCluster = exports.Platform = void 0;
|
|
8
8
|
var platform_1 = require("./platform");
|
|
9
9
|
Object.defineProperty(exports, "Platform", { enumerable: true, get: function () { return platform_1.Platform; } });
|
|
10
|
+
var r8s_cluster_1 = require("./r8s-cluster");
|
|
11
|
+
Object.defineProperty(exports, "R8sCluster", { enumerable: true, get: function () { return r8s_cluster_1.R8sCluster; } });
|
|
10
12
|
var app_1 = require("./app");
|
|
11
13
|
Object.defineProperty(exports, "App", { enumerable: true, get: function () { return app_1.App; } });
|
|
12
14
|
var database_1 = require("./database");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,wDAAwD;AACxD,4EAA4E;AAC5E,0EAA0E;AAC1E,oBAAoB;;;AAEpB,uCAA2E;AAAlE,oGAAA,QAAQ,OAAA;AACjB,6BAA0C;AAAjC,0FAAA,GAAG,OAAA;AACZ,uCAAyD;AAAhD,oGAAA,QAAQ,OAAA;AACjB,uCAAyD;AAAhD,oGAAA,QAAQ,OAAA;AACjB,6CAKsB;AAJpB,yGAAA,UAAU,OAAA;AAKZ,+BAA6C;AAApC,4FAAA,IAAI,OAAA;AACb,2CAA+D;AAAtD,wGAAA,UAAU,OAAA;AACnB,mCAAmD;AAA1C,gGAAA,MAAM,OAAA;AAEf,wEAAwE;AACxE,qDAY0B;AAXxB,iHAAA,cAAc,OAAA;AAGd,0GAAA,OAAO,OAAA;AAEP,wGAAA,KAAK,OAAA;AAEL,gHAAA,aAAa,OAAA;AAEb,gHAAA,aAAa,OAAA;AAGf,+CAQuB;AAPrB,2GAAA,WAAW,OAAA;AAIX,0GAAA,UAAU,OAAA;AACV,2GAAA,WAAW,OAAA;AAGb,yDAU4B;AAT1B,qHAAA,gBAAgB,OAAA;AAIhB,oHAAA,eAAe,OAAA;AACf,0GAAA,KAAK,OAAA;AAEL,iHAAA,YAAY,OAAA;AAGd,iDAQwB;AAPtB,6GAAA,YAAY,OAAA;AAIZ,4GAAA,WAAW,OAAA;AACX,4GAAA,WAAW,OAAA;AAIb,uDAAuD;AACvD,yCAAsF;AAA7E,yGAAA,YAAY,OAAA;AAAE,iHAAA,oBAAoB,OAAA;AAAE,iHAAA,oBAAoB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,wDAAwD;AACxD,4EAA4E;AAC5E,0EAA0E;AAC1E,oBAAoB;;;AAEpB,uCAA2E;AAAlE,oGAAA,QAAQ,OAAA;AACjB,6CAAgE;AAAvD,yGAAA,UAAU,OAAA;AACnB,6BAA0C;AAAjC,0FAAA,GAAG,OAAA;AACZ,uCAAyD;AAAhD,oGAAA,QAAQ,OAAA;AACjB,uCAAyD;AAAhD,oGAAA,QAAQ,OAAA;AACjB,6CAKsB;AAJpB,yGAAA,UAAU,OAAA;AAKZ,+BAA6C;AAApC,4FAAA,IAAI,OAAA;AACb,2CAA+D;AAAtD,wGAAA,UAAU,OAAA;AACnB,mCAAmD;AAA1C,gGAAA,MAAM,OAAA;AAEf,wEAAwE;AACxE,qDAY0B;AAXxB,iHAAA,cAAc,OAAA;AAGd,0GAAA,OAAO,OAAA;AAEP,wGAAA,KAAK,OAAA;AAEL,gHAAA,aAAa,OAAA;AAEb,gHAAA,aAAa,OAAA;AAGf,+CAQuB;AAPrB,2GAAA,WAAW,OAAA;AAIX,0GAAA,UAAU,OAAA;AACV,2GAAA,WAAW,OAAA;AAGb,yDAU4B;AAT1B,qHAAA,gBAAgB,OAAA;AAIhB,oHAAA,eAAe,OAAA;AACf,0GAAA,KAAK,OAAA;AAEL,iHAAA,YAAY,OAAA;AAGd,iDAQwB;AAPtB,6GAAA,YAAY,OAAA;AAIZ,4GAAA,WAAW,OAAA;AACX,4GAAA,WAAW,OAAA;AAIb,uDAAuD;AACvD,yCAAsF;AAA7E,yGAAA,YAAY,OAAA;AAAE,iHAAA,oBAAoB,OAAA;AAAE,iHAAA,oBAAoB,OAAA"}
|
package/dist/platform.d.ts
CHANGED
|
@@ -11,6 +11,15 @@ export interface PlatformProps {
|
|
|
11
11
|
routing?: RoutingMode;
|
|
12
12
|
/** Gateway class name (only used when routing='gateway', default: 'eg') */
|
|
13
13
|
gatewayClassName?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Reference to a shared Gateway for all child endpoints.
|
|
16
|
+
* When set, App/Endpoint create only HTTPRoutes (no per-app Gateway),
|
|
17
|
+
* avoiding a new LoadBalancer IP per app.
|
|
18
|
+
*/
|
|
19
|
+
sharedGateway?: {
|
|
20
|
+
name: string;
|
|
21
|
+
namespace?: string;
|
|
22
|
+
};
|
|
14
23
|
/** Default namespace for all child resources */
|
|
15
24
|
namespace?: string;
|
|
16
25
|
/** Default labels applied to all child resources */
|
package/dist/platform.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAOnE,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAA;AAE/C,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,+CAA+C;IAC/C,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IACtB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAC7B;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,gBAAgB,CAAA;IACtB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,WA4D5C"}
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAOnE,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAA;AAE/C,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;OAIG;IACH,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACpD,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,+CAA+C;IAC/C,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IACtB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAC7B;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,gBAAgB,CAAA;IACtB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,WA4D5C"}
|
package/dist/platform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.tsx"],"names":[],"mappings":";;AAyIA,4BA4DC;AArMD,oCAAqD;AACrD,iDAO2B;AAE3B,uDAA4E;AAC5E,iDAAmE;AACnE,2DAI4B;AAmD5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqEG;AACH,SAAgB,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EACJ,OAAO,GAAG,SAAS,EACnB,gBAAgB,GAAG,IAAI,EACvB,SAAS,EACT,MAAM,EACN,SAAS,EACT,OAAO,EACP,GAAG,EACH,QAAQ,GACT,GAAG,KAAK,CAAA;IAET,IAAI,MAAM,GAAY,QAAQ,CAAA;IAE9B,2EAA2E;IAC3E,0EAA0E;IAC1E,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,IAAA,UAAG,EAAC,eAAQ,EAAE;YACrB,QAAQ,EAAE;gBACR,IAAA,UAAG,EAAC,WAAW,EAAE;oBACf,UAAU,EAAE,IAAI;oBAChB,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;iBAC9B,CAAC;gBACF,MAAM;aACP;SACF,CAAC,CAAA;IACJ,CAAC;IAED,qFAAqF;IACrF,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,GAAG,IAAA,UAAG,EAAC,0BAAW,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAChE,CAAC;IAED,iEAAiE;IACjE,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,IAAA,UAAG,EAAC,gCAAc,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IACvE,CAAC;IAED,6CAA6C;IAC7C,MAAM,gBAAgB,GACpB,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;IACjG,MAAM,GAAG,IAAA,UAAG,EAAC,oCAAgB,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAEhF,0BAA0B;IAC1B,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,GAAG,IAAA,UAAG,EAAC,0BAAe,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAChF,CAAC;IAED,uBAAuB;IACvB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,IAAA,UAAG,EAAC,iBAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,0BAA0B;IAC1B,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,IAAA,UAAG,EAAC,oBAAS,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { Operator } from '@r8s/k8s-types';
|
|
2
|
+
export interface R8sClusterProps {
|
|
3
|
+
/**
|
|
4
|
+
* OpenBao secrets backend configuration. VSO (Vault Secrets Operator)
|
|
5
|
+
* is declared automatically. This context is inherited by all
|
|
6
|
+
* children (App, Database, Auth, etc.) so credentials are managed
|
|
7
|
+
* by VSO — never plaintext.
|
|
8
|
+
*/
|
|
9
|
+
secrets: {
|
|
10
|
+
/** OpenBao mount path (e.g., 'secret') */
|
|
11
|
+
mount: string;
|
|
12
|
+
/** OpenBao path prefix for this cluster (e.g., 'production') */
|
|
13
|
+
path: string;
|
|
14
|
+
/** Optional VSO auth reference name */
|
|
15
|
+
authRef?: string;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* ExternalDNS configuration with TSIG for secure RFC 2136 updates.
|
|
19
|
+
* The external-dns operator is declared automatically, and a
|
|
20
|
+
* VaultStaticSecret is created for the TSIG key in the external-dns
|
|
21
|
+
* namespace.
|
|
22
|
+
*/
|
|
23
|
+
dns: {
|
|
24
|
+
/** RFC 2136 DNS server (e.g., 'ns1.example.com') */
|
|
25
|
+
server: string;
|
|
26
|
+
/** DNS zone (e.g., 'example.com') */
|
|
27
|
+
zone: string;
|
|
28
|
+
/** TSIG key path in OpenBao (e.g., 'dns/tsig') */
|
|
29
|
+
tsigPath: string;
|
|
30
|
+
/** TSIG key name in the secret (default: 'secret') */
|
|
31
|
+
tsigKey?: string;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Gateway class name for Envoy Gateway (default: 'eg').
|
|
35
|
+
* The envoy-gateway operator is declared automatically.
|
|
36
|
+
*/
|
|
37
|
+
gatewayClassName?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Default labels applied to all resources.
|
|
40
|
+
*/
|
|
41
|
+
labels?: Record<string, string>;
|
|
42
|
+
/**
|
|
43
|
+
* Pre-installed operators. R8sCluster won't re-declare these.
|
|
44
|
+
*/
|
|
45
|
+
operators?: Operator[];
|
|
46
|
+
/**
|
|
47
|
+
* Namespace for LokiStack and logging resources (default: 'logging').
|
|
48
|
+
* This is separate from app namespaces — logging infra lives in
|
|
49
|
+
* its own namespace.
|
|
50
|
+
*/
|
|
51
|
+
logsNamespace?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Storage class for Loki logs (default: 'standard').
|
|
54
|
+
*/
|
|
55
|
+
logsStorageClass?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Application components (App, Database, Auth, etc.).
|
|
58
|
+
* Children inherit routing, secrets, and DNS contexts.
|
|
59
|
+
* Optional — R8sCluster can be used standalone to set up cluster
|
|
60
|
+
* infrastructure without any apps.
|
|
61
|
+
*/
|
|
62
|
+
children?: unknown;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* R8sCluster — opinionated cluster foundation with all recommended operators.
|
|
66
|
+
*
|
|
67
|
+
* @title R8sCluster
|
|
68
|
+
* @category Complete Solution
|
|
69
|
+
*
|
|
70
|
+
* Sets up a complete cluster foundation in one component:
|
|
71
|
+
* - **cert-manager** for TLS certificate automation
|
|
72
|
+
* - **external-dns** with TSIG for secure DNS updates
|
|
73
|
+
* - **Envoy Gateway** for Gateway API routing
|
|
74
|
+
* - **OpenBao VSO** for secrets management
|
|
75
|
+
* - **Prometheus** for metrics and alerting
|
|
76
|
+
* - **Loki + FluentBit** for log aggregation of all user pods
|
|
77
|
+
*
|
|
78
|
+
* All operators are declared automatically. Children inherit routing,
|
|
79
|
+
* secrets, and DNS contexts — just add your apps.
|
|
80
|
+
*
|
|
81
|
+
* R8sCluster is cluster-scoped — it does not take a namespace. Operators
|
|
82
|
+
* install to their own namespaces (cert-manager, external-dns, etc.).
|
|
83
|
+
* Logging infrastructure lives in a dedicated namespace (default:
|
|
84
|
+
* 'logging'). App namespaces are managed by Platform or the apps
|
|
85
|
+
* themselves.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* import { R8sCluster, Platform, App, Database } from '@r8s/recipes'
|
|
89
|
+
*
|
|
90
|
+
* export default (
|
|
91
|
+
* <>
|
|
92
|
+
* <R8sCluster
|
|
93
|
+
* secrets={{ mount: 'secret', path: 'production' }}
|
|
94
|
+
* dns={{ server: 'ns1.example.com', zone: 'example.com', tsigPath: 'dns/tsig' }}
|
|
95
|
+
* >
|
|
96
|
+
* <Platform namespace="production">
|
|
97
|
+
* <Database name="api-db" storage="20Gi" />
|
|
98
|
+
* <App name="api" image="api:v1" host="api.example.com" />
|
|
99
|
+
* </Platform>
|
|
100
|
+
* </R8sCluster>
|
|
101
|
+
* </>
|
|
102
|
+
* )
|
|
103
|
+
*/
|
|
104
|
+
export declare function R8sCluster(props: R8sClusterProps): unknown;
|
|
105
|
+
//# sourceMappingURL=r8s-cluster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"r8s-cluster.d.ts","sourceRoot":"","sources":["../src/r8s-cluster.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,OAAO,EAAE;QACP,0CAA0C;QAC1C,KAAK,EAAE,MAAM,CAAA;QACb,gEAAgE;QAChE,IAAI,EAAE,MAAM,CAAA;QACZ,uCAAuC;QACvC,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;IACD;;;;;OAKG;IACH,GAAG,EAAE;QACH,oDAAoD;QACpD,MAAM,EAAE,MAAM,CAAA;QACd,qCAAqC;QACrC,IAAI,EAAE,MAAM,CAAA;QACZ,kDAAkD;QAClD,QAAQ,EAAE,MAAM,CAAA;QAChB,sDAAsD;QACtD,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;IACD;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B;;OAEG;IACH,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IACtB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,WA2KhD"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.R8sCluster = R8sCluster;
|
|
4
|
+
const core_1 = require("@r8s/core");
|
|
5
|
+
const defaults_1 = require("@r8s/core/defaults");
|
|
6
|
+
const crds_1 = require("@r8s/crds");
|
|
7
|
+
const loki_1 = require("@r8s/crds/loki");
|
|
8
|
+
const logging_1 = require("@r8s/crds/logging");
|
|
9
|
+
const secret_provider_1 = require("./secret-provider");
|
|
10
|
+
const dns_provider_1 = require("./dns-provider");
|
|
11
|
+
const endpoint_provider_1 = require("./endpoint-provider");
|
|
12
|
+
/**
|
|
13
|
+
* R8sCluster — opinionated cluster foundation with all recommended operators.
|
|
14
|
+
*
|
|
15
|
+
* @title R8sCluster
|
|
16
|
+
* @category Complete Solution
|
|
17
|
+
*
|
|
18
|
+
* Sets up a complete cluster foundation in one component:
|
|
19
|
+
* - **cert-manager** for TLS certificate automation
|
|
20
|
+
* - **external-dns** with TSIG for secure DNS updates
|
|
21
|
+
* - **Envoy Gateway** for Gateway API routing
|
|
22
|
+
* - **OpenBao VSO** for secrets management
|
|
23
|
+
* - **Prometheus** for metrics and alerting
|
|
24
|
+
* - **Loki + FluentBit** for log aggregation of all user pods
|
|
25
|
+
*
|
|
26
|
+
* All operators are declared automatically. Children inherit routing,
|
|
27
|
+
* secrets, and DNS contexts — just add your apps.
|
|
28
|
+
*
|
|
29
|
+
* R8sCluster is cluster-scoped — it does not take a namespace. Operators
|
|
30
|
+
* install to their own namespaces (cert-manager, external-dns, etc.).
|
|
31
|
+
* Logging infrastructure lives in a dedicated namespace (default:
|
|
32
|
+
* 'logging'). App namespaces are managed by Platform or the apps
|
|
33
|
+
* themselves.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* import { R8sCluster, Platform, App, Database } from '@r8s/recipes'
|
|
37
|
+
*
|
|
38
|
+
* export default (
|
|
39
|
+
* <>
|
|
40
|
+
* <R8sCluster
|
|
41
|
+
* secrets={{ mount: 'secret', path: 'production' }}
|
|
42
|
+
* dns={{ server: 'ns1.example.com', zone: 'example.com', tsigPath: 'dns/tsig' }}
|
|
43
|
+
* >
|
|
44
|
+
* <Platform namespace="production">
|
|
45
|
+
* <Database name="api-db" storage="20Gi" />
|
|
46
|
+
* <App name="api" image="api:v1" host="api.example.com" />
|
|
47
|
+
* </Platform>
|
|
48
|
+
* </R8sCluster>
|
|
49
|
+
* </>
|
|
50
|
+
* )
|
|
51
|
+
*/
|
|
52
|
+
function R8sCluster(props) {
|
|
53
|
+
const { secrets, dns, gatewayClassName = 'eg', labels, operators: preinstalled = [], logsNamespace = 'logging', logsStorageClass = 'standard', children, } = props;
|
|
54
|
+
// Build the operator list — R8sCluster declares all cluster operators
|
|
55
|
+
// so children don't have to. Children can still declare more (e.g.
|
|
56
|
+
// cnpg, keycloak) via their own logic.
|
|
57
|
+
const sharedOperators = (0, core_1.useContext)(defaults_1.OperatorContext);
|
|
58
|
+
const declared = [];
|
|
59
|
+
const clusterOperators = [
|
|
60
|
+
'cert-manager',
|
|
61
|
+
'external-dns',
|
|
62
|
+
'envoy-gateway',
|
|
63
|
+
'vault-secrets-operator',
|
|
64
|
+
'prometheus',
|
|
65
|
+
'loki',
|
|
66
|
+
'logging-operator',
|
|
67
|
+
];
|
|
68
|
+
for (const opName of clusterOperators) {
|
|
69
|
+
const alreadyDeclared = sharedOperators.some((op) => op.name === opName) ||
|
|
70
|
+
preinstalled.some((op) => op.name === opName) ||
|
|
71
|
+
declared.some((op) => op.name === opName);
|
|
72
|
+
if (!alreadyDeclared && crds_1.operators[opName]) {
|
|
73
|
+
declared.push(crds_1.operators[opName]());
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Build the secrets provider (OpenBao VSO)
|
|
77
|
+
const secretProvider = (0, secret_provider_1.OpenBao)({
|
|
78
|
+
mount: secrets.mount,
|
|
79
|
+
path: secrets.path,
|
|
80
|
+
authRef: secrets.authRef,
|
|
81
|
+
});
|
|
82
|
+
// Build the DNS provider (ExternalDNS with TSIG)
|
|
83
|
+
const dnsProvider = (0, dns_provider_1.ExternalDns)({
|
|
84
|
+
server: dns.server,
|
|
85
|
+
zone: dns.zone,
|
|
86
|
+
tsig: {
|
|
87
|
+
path: dns.tsigPath,
|
|
88
|
+
key: dns.tsigKey ?? 'secret',
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
// Build the endpoint provider (Envoy Gateway)
|
|
92
|
+
const endpointProvider = (0, endpoint_provider_1.EnvoyGateway)({ className: gatewayClassName });
|
|
93
|
+
// Cluster-level logging: FluentBit collects logs from ALL pods
|
|
94
|
+
// and ships to Loki. Resources live in the logs namespace.
|
|
95
|
+
const loggingName = 'cluster-logging';
|
|
96
|
+
const lokiName = 'cluster-loki';
|
|
97
|
+
const lokiOutputName = 'cluster-loki-output';
|
|
98
|
+
const lokiStorageSecret = 'cluster-loki-storage';
|
|
99
|
+
const clusterResources = [];
|
|
100
|
+
// LokiStack — log aggregation backend (in logs namespace)
|
|
101
|
+
clusterResources.push((0, loki_1.LokiStackComponent)({
|
|
102
|
+
metadata: { name: lokiName, namespace: logsNamespace },
|
|
103
|
+
spec: {
|
|
104
|
+
size: '1x.small',
|
|
105
|
+
storageClassName: logsStorageClass,
|
|
106
|
+
storage: {
|
|
107
|
+
schemas: [{ version: 'v13', effectiveDate: '2024-01-01' }],
|
|
108
|
+
secret: { name: lokiStorageSecret, type: 's3' },
|
|
109
|
+
},
|
|
110
|
+
tenants: {
|
|
111
|
+
mode: 'static',
|
|
112
|
+
authentication: [{ tenantName: 'application', tenantId: 'app' }],
|
|
113
|
+
authorization: {
|
|
114
|
+
roles: [
|
|
115
|
+
{
|
|
116
|
+
name: 'app-reader',
|
|
117
|
+
permissions: ['read'],
|
|
118
|
+
resources: ['logs'],
|
|
119
|
+
tenants: ['application'],
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
roleBindings: [
|
|
123
|
+
{
|
|
124
|
+
name: 'app-reader-binding',
|
|
125
|
+
roles: ['app-reader'],
|
|
126
|
+
subjects: [{ kind: 'group', name: 'system:authenticated' }],
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
}));
|
|
133
|
+
// Logging — Banzai Cloud Logging Operator with FluentBit
|
|
134
|
+
// FluentBit runs as a DaemonSet on every node, collecting all
|
|
135
|
+
// container logs from /var/log/containers/.
|
|
136
|
+
clusterResources.push((0, logging_1.LoggingComponent)({
|
|
137
|
+
metadata: { name: loggingName, namespace: logsNamespace },
|
|
138
|
+
spec: {
|
|
139
|
+
fluentd: {},
|
|
140
|
+
fluentbit: {},
|
|
141
|
+
controlNamespace: logsNamespace,
|
|
142
|
+
},
|
|
143
|
+
}));
|
|
144
|
+
// Output — ship logs to Loki gateway
|
|
145
|
+
clusterResources.push((0, logging_1.OutputComponent)({
|
|
146
|
+
metadata: { name: lokiOutputName, namespace: logsNamespace },
|
|
147
|
+
spec: {
|
|
148
|
+
loki: {
|
|
149
|
+
url: `http://loki-gateway.${logsNamespace}.svc.cluster.local`,
|
|
150
|
+
tenant: 'application',
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
}));
|
|
154
|
+
// Flow — match ALL pods (empty selector = match everything)
|
|
155
|
+
clusterResources.push((0, logging_1.FlowComponent)({
|
|
156
|
+
metadata: { name: 'cluster-flow', namespace: logsNamespace },
|
|
157
|
+
spec: {
|
|
158
|
+
match: [{ select: { labels: {} } }],
|
|
159
|
+
localOutputRefs: [lokiOutputName],
|
|
160
|
+
},
|
|
161
|
+
}));
|
|
162
|
+
// Assemble the full context stack. R8sCluster does NOT set a namespace
|
|
163
|
+
// context — it's cluster-scoped. Children (or Platform) handle
|
|
164
|
+
// app namespaces.
|
|
165
|
+
let result = children;
|
|
166
|
+
// Cluster-level resources first (LokiStack, Logging, Flow, Output)
|
|
167
|
+
result = (0, core_1.jsx)(core_1.Fragment, {
|
|
168
|
+
children: [...clusterResources, result],
|
|
169
|
+
});
|
|
170
|
+
// Apply DNS context (inside SecretProvider so it can access TSIG secret)
|
|
171
|
+
result = (0, core_1.jsx)(dns_provider_1.DnsProvider, { provider: dnsProvider, children: result });
|
|
172
|
+
// Apply secrets context (OpenBao VSO)
|
|
173
|
+
result = (0, core_1.jsx)(secret_provider_1.SecretProvider, { provider: secretProvider, children: result });
|
|
174
|
+
// Apply routing context (Envoy Gateway)
|
|
175
|
+
result = (0, core_1.jsx)(endpoint_provider_1.EndpointProvider, { provider: endpointProvider, children: result });
|
|
176
|
+
// Apply operators context — merge parent operators + preinstalled + declared
|
|
177
|
+
const allOperators = [...sharedOperators, ...preinstalled, ...declared];
|
|
178
|
+
if (allOperators.length > 0) {
|
|
179
|
+
result = (0, core_1.jsx)(defaults_1.OperatorContext.Provider, { value: allOperators, children: result });
|
|
180
|
+
}
|
|
181
|
+
// Apply labels context
|
|
182
|
+
if (labels) {
|
|
183
|
+
result = (0, core_1.jsx)(defaults_1.Labels.Provider, { value: labels, children: result });
|
|
184
|
+
}
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=r8s-cluster.js.map
|