Skip to content

Commit 287cb5b

Browse files
committed
fix: add new OpenShift internal namespaces
Exclude several new OpenShift internal namespaces from container scanning. Additionally changed the following: - using a Set instead of Array to check the internal namespaces, getting O(1) instead of O(n) performance - switch the related test to Jest instead of Tap
1 parent 51fc1c8 commit 287cb5b

File tree

5 files changed

+185
-162
lines changed

5 files changed

+185
-162
lines changed

src/supervisor/watchers/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export function extractNamespaceName(namespace: V1Namespace): string {
5050
}
5151

5252
export function isKubernetesInternalNamespace(namespace: string): boolean {
53-
return kubernetesInternalNamespaces.includes(namespace);
53+
return kubernetesInternalNamespaces.has(namespace);
5454
}
5555

5656
function setupWatchesForCluster(): void {

src/supervisor/watchers/internal-namespaces.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,45 @@
1-
export const kubernetesInternalNamespaces = [
1+
export const kubernetesInternalNamespaces = new Set([
22
'kube-node-lease',
33
'kube-public',
44
'kube-system',
55
'local-path-storage',
66
'openshift',
77
'openshift-apiserver',
88
'openshift-apiserver-operator',
9+
'openshift-aqua',
910
'openshift-authentication',
1011
'openshift-authentication-operator',
12+
'openshift-backplane',
13+
'openshift-backplane-cee',
14+
'openshift-backplane-srep',
15+
'openshift-build-test',
1116
'openshift-cloud-credential-operator',
17+
'openshift-cloud-ingress-operator',
18+
'openshift-cluster-csi-drivers',
1219
'openshift-cluster-machine-approver',
1320
'openshift-cluster-node-tuning-operator',
1421
'openshift-cluster-samples-operator',
1522
'openshift-cluster-storage-operator',
1623
'openshift-cluster-version',
24+
'openshift-codeready-workspaces',
1725
'openshift-config',
1826
'openshift-config-managed',
1927
'openshift-config-operator',
2028
'openshift-console',
2129
'openshift-console-operator',
30+
'openshift-console-user-settings',
2231
'openshift-controller-manager',
2332
'openshift-controller-manager-operator',
33+
'openshift-custom-domains-operator',
34+
'openshift-customer-monitoring',
2435
'openshift-dns',
2536
'openshift-dns-operator',
2637
'openshift-etcd',
2738
'openshift-etcd-operator',
2839
'openshift-image-registry',
2940
'openshift-infra',
3041
'openshift-ingress',
42+
'openshift-ingress-canary',
3143
'openshift-ingress-operator',
3244
'openshift-insights',
3345
'openshift-kni-infra',
@@ -39,23 +51,40 @@ export const kubernetesInternalNamespaces = [
3951
'openshift-kube-scheduler-operator',
4052
'openshift-kube-storage-version-migrator',
4153
'openshift-kube-storage-version-migrator-operator',
54+
'openshift-kubevirt-infra',
55+
'openshift-logging',
4256
'openshift-machine-api',
4357
'openshift-machine-config-operator',
58+
'openshift-managed-upgrade-operator',
4459
'openshift-marketplace',
4560
'openshift-monitoring',
4661
'openshift-multus',
62+
'openshift-must-gather-operator',
63+
'openshift-network-diagnostics',
4764
'openshift-network-operator',
4865
'openshift-node',
66+
'openshift-oauth-apiserver',
4967
'openshift-openstack-infra',
5068
'openshift-operator-lifecycle-manager',
5169
'openshift-operators',
70+
'openshift-operators-redhat',
71+
'openshift-osd-metrics',
5272
'openshift-ovirt-infra',
73+
'openshift-rbac-permissions',
74+
'openshift-route-monitor-operator',
5375
'openshift-sdn',
76+
'openshift-security',
5477
'openshift-service-ca',
5578
'openshift-service-ca-operator',
5679
'openshift-service-catalog-apiserver-operator',
5780
'openshift-service-catalog-controller-manager-operator',
5881
'openshift-service-catalog-removed',
82+
'openshift-splunk-forwarder-operator',
83+
'openshift-sre-pruning',
84+
'openshift-sre-sshd',
85+
'openshift-strimzi',
5986
'openshift-user-workload-monitoring',
87+
'openshift-validation-webhook',
88+
'openshift-velero',
6089
'openshift-vsphere-infra',
61-
];
90+
]);
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`internal Kubernetes namespaces tests internal namespaces list against snapshot 1`] = `
4+
Set {
5+
"kube-node-lease",
6+
"kube-public",
7+
"kube-system",
8+
"local-path-storage",
9+
"openshift",
10+
"openshift-apiserver",
11+
"openshift-apiserver-operator",
12+
"openshift-aqua",
13+
"openshift-authentication",
14+
"openshift-authentication-operator",
15+
"openshift-backplane",
16+
"openshift-backplane-cee",
17+
"openshift-backplane-srep",
18+
"openshift-build-test",
19+
"openshift-cloud-credential-operator",
20+
"openshift-cloud-ingress-operator",
21+
"openshift-cluster-csi-drivers",
22+
"openshift-cluster-machine-approver",
23+
"openshift-cluster-node-tuning-operator",
24+
"openshift-cluster-samples-operator",
25+
"openshift-cluster-storage-operator",
26+
"openshift-cluster-version",
27+
"openshift-codeready-workspaces",
28+
"openshift-config",
29+
"openshift-config-managed",
30+
"openshift-config-operator",
31+
"openshift-console",
32+
"openshift-console-operator",
33+
"openshift-console-user-settings",
34+
"openshift-controller-manager",
35+
"openshift-controller-manager-operator",
36+
"openshift-custom-domains-operator",
37+
"openshift-customer-monitoring",
38+
"openshift-dns",
39+
"openshift-dns-operator",
40+
"openshift-etcd",
41+
"openshift-etcd-operator",
42+
"openshift-image-registry",
43+
"openshift-infra",
44+
"openshift-ingress",
45+
"openshift-ingress-canary",
46+
"openshift-ingress-operator",
47+
"openshift-insights",
48+
"openshift-kni-infra",
49+
"openshift-kube-apiserver",
50+
"openshift-kube-apiserver-operator",
51+
"openshift-kube-controller-manager",
52+
"openshift-kube-controller-manager-operator",
53+
"openshift-kube-scheduler",
54+
"openshift-kube-scheduler-operator",
55+
"openshift-kube-storage-version-migrator",
56+
"openshift-kube-storage-version-migrator-operator",
57+
"openshift-kubevirt-infra",
58+
"openshift-logging",
59+
"openshift-machine-api",
60+
"openshift-machine-config-operator",
61+
"openshift-managed-upgrade-operator",
62+
"openshift-marketplace",
63+
"openshift-monitoring",
64+
"openshift-multus",
65+
"openshift-must-gather-operator",
66+
"openshift-network-diagnostics",
67+
"openshift-network-operator",
68+
"openshift-node",
69+
"openshift-oauth-apiserver",
70+
"openshift-openstack-infra",
71+
"openshift-operator-lifecycle-manager",
72+
"openshift-operators",
73+
"openshift-operators-redhat",
74+
"openshift-osd-metrics",
75+
"openshift-ovirt-infra",
76+
"openshift-rbac-permissions",
77+
"openshift-route-monitor-operator",
78+
"openshift-sdn",
79+
"openshift-security",
80+
"openshift-service-ca",
81+
"openshift-service-ca-operator",
82+
"openshift-service-catalog-apiserver-operator",
83+
"openshift-service-catalog-controller-manager-operator",
84+
"openshift-service-catalog-removed",
85+
"openshift-splunk-forwarder-operator",
86+
"openshift-sre-pruning",
87+
"openshift-sre-sshd",
88+
"openshift-strimzi",
89+
"openshift-user-workload-monitoring",
90+
"openshift-validation-webhook",
91+
"openshift-velero",
92+
"openshift-vsphere-infra",
93+
}
94+
`;
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import { V1Namespace } from '@kubernetes/client-node';
2+
3+
import * as watchers from '../../../src/supervisor/watchers';
4+
import { kubernetesInternalNamespaces } from '../../../src/supervisor/watchers/internal-namespaces';
5+
6+
describe('extractNamespaceName() tests', () => {
7+
test.each([
8+
['extractNamespaceName() throws on empty input', {} as V1Namespace],
9+
[
10+
'extractNamespaceName() throws on empty metadata',
11+
{ metadata: {} } as V1Namespace,
12+
],
13+
[
14+
'extractNamespaceName() throws on undefined name',
15+
{ metadata: { name: undefined } } as V1Namespace,
16+
],
17+
[
18+
'extractNamespaceName() throws on empty name',
19+
{ metadata: { name: '' } } as V1Namespace,
20+
],
21+
])('%s', (_testCaseName, input) => {
22+
expect(() => watchers.extractNamespaceName(input)).toThrowError(
23+
'Namespace missing metadata.name',
24+
);
25+
});
26+
27+
test('extractNamespaceName() returns namespace.metadata.name', () => {
28+
expect(
29+
watchers.extractNamespaceName({
30+
metadata: { name: 'literally anything else' },
31+
}),
32+
).toEqual('literally anything else');
33+
});
34+
});
35+
36+
describe('internal Kubernetes namespaces tests', () => {
37+
test('internal namespaces list against snapshot', () => {
38+
expect(kubernetesInternalNamespaces).toMatchSnapshot();
39+
});
40+
41+
test('isKubernetesInternalNamespace(): internal Kubernetes namespaces are used', () => {
42+
for (const internalNamespace of kubernetesInternalNamespaces) {
43+
expect(watchers.isKubernetesInternalNamespace(internalNamespace)).toEqual(
44+
true,
45+
);
46+
}
47+
});
48+
49+
test.each([
50+
['kube-node-lease-'],
51+
['node-lease'],
52+
['snyk-monitor'],
53+
['egg'],
54+
[''],
55+
[(undefined as unknown) as string],
56+
])('isKubernetesInternalNamespace(%s) -> false', (input) => {
57+
expect(watchers.isKubernetesInternalNamespace(input)).toEqual(false);
58+
});
59+
});

0 commit comments

Comments
 (0)