🌳
pt0/deployF/k8sF/generic1NodePortTmplF.mts
1import * as _ from 'lodash-es'
4export const k8sPortRange = [30000, 32767] as const
6type NodePortTmplProps = {
7 name: string
8 nodePort: number
9 svcPort: number
10 inclUdp?: boolean
11 selector?: Record<string, string>
12 externalTrafficPolicy?: 'Cluster' | 'Local'
15export const genericNodePortTmpl = ({
16 name, nodePort, svcPort, inclUdp=false, selector, externalTrafficPolicy
17}: NodePortTmplProps) => {
18 const sel = selector || {name}
19 const [minPort, maxPort] = k8sPortRange
20 throwIf(() => !(nodePort >= minPort && nodePort <= maxPort), {minPort, maxPort})
21 return {
22 apiVersion: 'v1',
23 kind: 'Service',
24 metadata: {
25 name,
26 },
27 spec: {
28 ports: _.compact([
29 {
30 nodePort,
31 port: svcPort,
32 protocol: 'TCP',
33 targetPort: svcPort,
34 name: `tcp-${nodePort}`
35 },
36 inclUdp && {
37 nodePort,
38 port: svcPort,
39 protocol: 'UDP',
40 targetPort: svcPort,
41 name: `udp-${nodePort}`
42 }
43 ]),
44 selector: sel,
45 type: 'NodePort',
46 ...(externalTrafficPolicy ? {externalTrafficPolicy} : {})
47 },
48 }