|
| 1 | += NetworkPolicy for Collector Pods |
| 2 | + |
| 3 | +The Cluster Logging Operator automatically creates and manages a `NetworkPolicy` for its collector pods to ensure they function in restrictive network environments, even if a cluster-wide `AdminNetworkPolicy` would otherwise block their traffic. |
| 4 | + |
| 5 | +== Overview |
| 6 | + |
| 7 | +When a `ClusterLogForwarder` is deployed, the operator creates a permissive `NetworkPolicy` that allows all ingress and egress traffic for the collector pods. This ensures that log collection can function properly even when: |
| 8 | + |
| 9 | +* Restrictive default `NetworkPolicies` are in place |
| 10 | +* `AdminNetworkPolicy` configurations limit pod communications |
| 11 | +* Namespace-level network restrictions are applied |
| 12 | + |
| 13 | +The `NetworkPolicy` is automatically created and removed along with the collector deployment lifecycle. |
| 14 | + |
| 15 | +The `NetworkPolicy` can directly be edited by the cluster administrator and won't be reconciled by the operator upon updates. |
| 16 | + |
| 17 | +== NetworkPolicy Configuration |
| 18 | + |
| 19 | +The operator creates a `NetworkPolicy` for the collector with the following characteristics: |
| 20 | + |
| 21 | +```yaml |
| 22 | +apiVersion: networking.k8s.io/v1 |
| 23 | +kind: NetworkPolicy |
| 24 | +metadata: |
| 25 | + name: <COLLECTOR-INSTANCE-NAME> |
| 26 | + namespace: <COLLECTOR-NAMESPACE> |
| 27 | + labels: |
| 28 | + app.kubernetes.io/name: vector |
| 29 | + app.kubernetes.io/instance: <COLLECTOR-INSTANCE-NAME> |
| 30 | + app.kubernetes.io/component: collector |
| 31 | + app.kubernetes.io/part-of: cluster-logging |
| 32 | + app.kubernetes.io/managed-by: cluster-logging-operator |
| 33 | + app.kubernetes.io/version: <CLO-VERSION> |
| 34 | +spec: |
| 35 | + podSelector: |
| 36 | + matchLabels: |
| 37 | + app.kubernetes.io/name: vector |
| 38 | + app.kubernetes.io/instance: <COLLECTOR-INSTANCE-NAME> |
| 39 | + app.kubernetes.io/component: collector |
| 40 | + app.kubernetes.io/part-of: cluster-logging |
| 41 | + app.kubernetes.io/managed-by: cluster-logging-operator |
| 42 | + policyTypes: |
| 43 | + - Ingress |
| 44 | + - Egress |
| 45 | + ingress: |
| 46 | + - {} # Allow all ingress traffic |
| 47 | + egress: |
| 48 | + - {} # Allow all egress traffic |
| 49 | +``` |
| 50 | + |
| 51 | +== AdminNetworkPolicy Delegation |
| 52 | + |
| 53 | +When an `AdminNetworkPolicy` (ANP) is used in your cluster to enforce network restrictions, you may need to configure delegation to allow the collector's `NetworkPolicy` to take precedence for log collection traffic. |
| 54 | + |
| 55 | +=== Understanding the Hierarchy |
| 56 | + |
| 57 | +OpenShift network policy precedence (highest to lowest priority): |
| 58 | + |
| 59 | +1. **AdminNetworkPolicy** - Cluster-admin controlled, highest priority |
| 60 | +2. **BaselineAdminNetworkPolicy** - Default fallback rules |
| 61 | +3. **NetworkPolicy** - Namespace-level policies (where collector policies reside) |
| 62 | + |
| 63 | +=== Delegation Configuration |
| 64 | + |
| 65 | +To ensure collector pods can communicate properly when an `AdminNetworkPolicy` is blocking traffic, create an `AdminNetworkPolicy` rule that delegates to `NetworkPolicy` for collector traffic: |
| 66 | + |
| 67 | +==== Example: Delegating Collector Traffic |
| 68 | + |
| 69 | +```yaml |
| 70 | +apiVersion: policy.networking.k8s.io/v1alpha1 |
| 71 | +kind: AdminNetworkPolicy |
| 72 | +metadata: |
| 73 | + name: allow-logging-collector-delegation |
| 74 | +spec: |
| 75 | + priority: 50 # Adjust based on your cluster's ANP priority scheme. Lower number means higher priority |
| 76 | + subject: |
| 77 | + pods: # Target the collector pods |
| 78 | + namespaceSelector: |
| 79 | + matchLabels: |
| 80 | + kubernetes.io/metadata.name: openshift-logging # or collector namespace |
| 81 | + podSelector: |
| 82 | + matchLabels: |
| 83 | + app.kubernetes.io/name: vector |
| 84 | + app.kubernetes.io/instance: my-clf # or collector instance name |
| 85 | + app.kubernetes.io/managed-by: cluster-logging-operator |
| 86 | + app.kubernetes.io/part-of: cluster-logging |
| 87 | + app.kubernetes.io/component: collector |
| 88 | + ingress: |
| 89 | + - name: "delegate-to-collector-ingress" |
| 90 | + action: "Pass" # Pass to collector NetworkPolicy |
| 91 | + from: |
| 92 | + - {} # Delegate decisions for traffic coming from any source |
| 93 | + egress: |
| 94 | + - name: "delegate-to-collector-egress" |
| 95 | + action: "Pass" # Pass to collector NetworkPolicy |
| 96 | + to: |
| 97 | + - {} # Delegate decisions for traffic going to any destination |
| 98 | +``` |
| 99 | + |
| 100 | +== References |
| 101 | + |
| 102 | +- https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/network_security/admin-network-policy#adminnetworkpolicy_ovn-k-anp[Openshift AdminNetworkPolicy] |
| 103 | +- https://docs.openshift.com/container-platform/latest/networking/network_policy/about-network-policy.html[OpenShift Network Policy] |
| 104 | +- https://kubernetes.io/docs/concepts/services-networking/network-policies/[Kubernetes NetworkPolicy Documentation] |
0 commit comments