Skip to content

Commit 2648413

Browse files
gateway api support
1 parent a2cf608 commit 2648413

File tree

5 files changed

+140
-1
lines changed

5 files changed

+140
-1
lines changed

web/src/components/netflow-traffic-tab.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,18 @@ export const NetflowTrafficTab: React.FC<NetflowTrafficTabProps> = ({ match, obj
132132
backAndForth: false
133133
});
134134
break;
135+
case 'Gateway':
136+
// NOTE: Gateways can be both ingress (receive traffic) and egress (send traffic)
137+
setForcedFilters({
138+
list: [
139+
{
140+
def: findFilter(filterDefinitions, 'src_resource')!,
141+
values: [{ v: `${obj.kind}.${obj.metadata!.namespace}.${obj.metadata!.name}` }]
142+
}
143+
],
144+
backAndForth: true
145+
});
146+
break;
135147
case 'Route':
136148
const route = obj as RouteProps;
137149
setForcedFilters({

web/src/components/tabs/netflow-topology/2d/styles/styleNode.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
CubeIcon,
44
CubesIcon,
55
ExternalLinkAltIcon,
6+
GlobeRouteIcon,
67
NetworkIcon,
78
OutlinedHddIcon,
89
QuestionCircleIcon,
@@ -68,6 +69,8 @@ const getTypeIcon = (peer: TopologyMetricPeer): React.ComponentClass<any, any> =
6869
return ZoneIcon;
6970
case 'UDN':
7071
return NetworkIcon;
72+
case 'Gateway':
73+
return GlobeRouteIcon;
7174
case 'CatalogSource':
7275
case 'DaemonSet':
7376
case 'Deployment':

web/src/components/tabs/netflow-topology/peer-resource-link.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,19 @@ export interface PeerResourceLinkProps {
77
peer: TopologyMetricPeer;
88
}
99

10+
// Map of resource kinds that need explicit group-version-kind string
11+
const customResourceGVK: { [kind: string]: string } = {
12+
Gateway: 'gateway.networking.k8s.io~v1~Gateway'
13+
};
14+
1015
export const PeerResourceLink: React.FC<PeerResourceLinkProps> = ({ peer }) => {
1116
const name = peer.getDisplayName(false, false);
1217
if (name) {
1318
if (peer.resourceKind) {
14-
return <ResourceLink inline={true} kind={peer.resourceKind} name={name} namespace={peer.namespace} />;
19+
const gvkString = customResourceGVK[peer.resourceKind];
20+
// Use group~version~kind format for custom resources, or plain kind for standard resources
21+
const kind = gvkString || peer.resourceKind;
22+
return <ResourceLink inline={true} kind={kind} name={name} namespace={peer.namespace} />;
1523
} else {
1624
return <Text>{name}</Text>;
1725
}

web/src/utils/k8s-models-hook.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,29 @@ export function useK8sModelsWithColors() {
99
}
1010
}
1111

12+
function setModel(kind: string, abbr: string, color: string) {
13+
if (k8sModels && !k8sModels[kind]) {
14+
k8sModels[kind] = {
15+
abbr,
16+
color,
17+
kind,
18+
label: kind,
19+
labelKey: kind,
20+
labelPlural: `${kind}s`,
21+
labelPluralKey: `${kind}s`,
22+
plural: `${kind.toLowerCase()}s`,
23+
apiGroup: '',
24+
apiVersion: 'v1',
25+
id: kind.toLowerCase(),
26+
crd: true,
27+
namespaced: true
28+
};
29+
} else if (k8sModels && k8sModels[kind]) {
30+
k8sModels[kind].abbr = abbr;
31+
k8sModels[kind].color = color;
32+
}
33+
}
34+
1235
if (k8sModels && !inFlight) {
1336
/* This part inject missing colors in k8sModels
1437
* check console/frontend/public/style/_vars.scss for values
@@ -73,6 +96,9 @@ export function useK8sModelsWithColors() {
7396

7497
//$color-ingress-dark = $pf-v5-color-purple-700 = #1F0066
7598
setColor('Ingress', '#1F0066');
99+
100+
//$color-gateway-dark = $pf-v5-color-blue-500 = #004080 (same as deployments)
101+
setModel('Gateway', 'G', '#004080');
76102
}
77103

78104
return k8sModels;

web/webpack.config.ts

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,96 @@ module.exports = {
375375
}
376376
}
377377
},
378+
{
379+
type: "console.tab/horizontalNav",
380+
properties: {
381+
model: {
382+
version: "v1",
383+
group: "gateway.networking.k8s.io",
384+
kind: "Gateway"
385+
},
386+
component: {
387+
"$codeRef": "netflowTab.default"
388+
},
389+
"page": {
390+
name: "%plugin__netobserv-plugin~Network Traffic%",
391+
"href": "netflow"
392+
}
393+
},
394+
"flags": { "required": ["NETOBSERV_LOKI_ENABLED"] }
395+
},
396+
{
397+
type: "console.tab/horizontalNav",
398+
properties: {
399+
model: {
400+
version: "v1",
401+
group: "gateway.networking.k8s.io",
402+
kind: "HTTPRoute"
403+
},
404+
component: {
405+
"$codeRef": "netflowTab.default"
406+
},
407+
"page": {
408+
name: "%plugin__netobserv-plugin~Network Traffic%",
409+
"href": "netflow"
410+
}
411+
},
412+
"flags": { "required": ["NETOBSERV_LOKI_ENABLED"] }
413+
},
414+
{
415+
type: "console.tab/horizontalNav",
416+
properties: {
417+
model: {
418+
version: "v1alpha2",
419+
group: "gateway.networking.k8s.io",
420+
kind: "GRPCRoute"
421+
},
422+
component: {
423+
"$codeRef": "netflowTab.default"
424+
},
425+
"page": {
426+
name: "%plugin__netobserv-plugin~Network Traffic%",
427+
"href": "netflow"
428+
}
429+
},
430+
"flags": { "required": ["NETOBSERV_LOKI_ENABLED"] }
431+
},
432+
{
433+
type: "console.tab/horizontalNav",
434+
properties: {
435+
model: {
436+
version: "v1alpha2",
437+
group: "gateway.networking.k8s.io",
438+
kind: "TCPRoute"
439+
},
440+
component: {
441+
"$codeRef": "netflowTab.default"
442+
},
443+
"page": {
444+
name: "%plugin__netobserv-plugin~Network Traffic%",
445+
"href": "netflow"
446+
}
447+
},
448+
"flags": { "required": ["NETOBSERV_LOKI_ENABLED"] }
449+
},
450+
{
451+
type: "console.tab/horizontalNav",
452+
properties: {
453+
model: {
454+
version: "v1alpha2",
455+
group: "gateway.networking.k8s.io",
456+
kind: "UDPRoute"
457+
},
458+
component: {
459+
"$codeRef": "netflowTab.default"
460+
},
461+
"page": {
462+
name: "%plugin__netobserv-plugin~Network Traffic%",
463+
"href": "netflow"
464+
}
465+
},
466+
"flags": { "required": ["NETOBSERV_LOKI_ENABLED"] }
467+
},
378468
{
379469
type: "console.tab/horizontalNav",
380470
properties: {

0 commit comments

Comments
 (0)