diff --git a/packages/apps/tenant/templates/networkpolicy.yaml b/packages/apps/tenant/templates/networkpolicy.yaml index 5285b495a..76959b89f 100644 --- a/packages/apps/tenant/templates/networkpolicy.yaml +++ b/packages/apps/tenant/templates/networkpolicy.yaml @@ -187,6 +187,23 @@ spec: --- apiVersion: cilium.io/v2 kind: CiliumNetworkPolicy +metadata: + name: allow-to-observability-proxy + namespace: {{ include "tenant.name" . }} +spec: + endpointSelector: {} + egress: + - toEndpoints: + - matchLabels: + "k8s:io.kubernetes.pod.namespace": cozy-observability-proxy + app.kubernetes.io/name: observability-proxy + toPorts: + - ports: + - port: "8080" + protocol: TCP +--- +apiVersion: cilium.io/v2 +kind: CiliumNetworkPolicy metadata: # Allow the tenant's ingress-nginx to reach both the linstor-gui # gatekeeper pods (for /oauth2/* and app traffic) AND the transient diff --git a/packages/apps/tenant/tests/networkpolicy_observability_proxy_test.yaml b/packages/apps/tenant/tests/networkpolicy_observability_proxy_test.yaml new file mode 100644 index 000000000..d6276ec34 --- /dev/null +++ b/packages/apps/tenant/tests/networkpolicy_observability_proxy_test.yaml @@ -0,0 +1,61 @@ +suite: tenant egress to the observability proxy +# A tenant's Grafana reads the tenant's logs and metrics through the +# observability proxy in cozy-observability-proxy. Tenant egress is +# default-deny plus explicit allow-to-* policies, so without this one those +# reads time out. The console reaches the proxy from cozy-dashboard and needs +# no tenant rule. +templates: + - templates/networkpolicy.yaml +tests: + - it: renders in the root tenant + release: + name: tenant-root + namespace: tenant-root + documentSelector: + path: metadata.name + value: allow-to-observability-proxy + asserts: + - isKind: + of: CiliumNetworkPolicy + - equal: + path: metadata.namespace + value: tenant-root + + - it: renders in a nested tenant with every module off + release: + name: tenant-bar + namespace: tenant-foo + set: + monitoring: false + ingress: false + etcd: false + documentSelector: + path: metadata.name + value: allow-to-observability-proxy + asserts: + - equal: + path: metadata.namespace + value: tenant-foo-bar + + - it: lets every pod of the tenant reach only the proxy pods on their container port + release: + name: tenant-root + namespace: tenant-root + documentSelector: + path: metadata.name + value: allow-to-observability-proxy + asserts: + - equal: + path: spec.endpointSelector + value: {} + - equal: + path: spec.egress + value: + - toEndpoints: + - matchLabels: + "k8s:io.kubernetes.pod.namespace": cozy-observability-proxy + app.kubernetes.io/name: observability-proxy + toPorts: + - ports: + - port: "8080" + protocol: TCP