Skip to content

Commit ef6c3df

Browse files
committed
fix(networkpolicy): allow all egress for API server access
NetworkPolicy cannot select host-network endpoints and the API server port is configurable, so allow unrestricted egress. Remove APIServerPort from PlatformParams. Admin network policy could improve this later but would break third-party SDNs. Signed-off-by: Khurram Baig <kbaig@redhat.com> Assisted-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent a5da4e5 commit ef6c3df

4 files changed

Lines changed: 13 additions & 34 deletions

File tree

pkg/reconciler/common/networkpolicy/networkpolicy.go

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -123,16 +123,11 @@ func DNSEgressRule(p PlatformParams) networkingv1.NetworkPolicyEgressRule {
123123
}
124124
}
125125

126-
// APIServerEgressRule allows egress to the API server on the platform-specific port (443 on
127-
// Kubernetes, 6443 on OpenShift). No To restriction — API server is behind a ClusterIP service.
128-
func APIServerEgressRule(p PlatformParams) networkingv1.NetworkPolicyEgressRule {
129-
tcp := corev1.ProtocolTCP
130-
apiPort := intstr.FromInt32(p.APIServerPort)
131-
return networkingv1.NetworkPolicyEgressRule{
132-
Ports: []networkingv1.NetworkPolicyPort{
133-
{Protocol: &tcp, Port: &apiPort},
134-
},
135-
}
126+
// APIServerEgressRule allows all egress so pods can reach the API server.
127+
// NetworkPolicy cannot select host-network endpoints, and the API server
128+
// port is configurable, so we must allow unrestricted egress.
129+
func APIServerEgressRule() networkingv1.NetworkPolicyEgressRule {
130+
return networkingv1.NetworkPolicyEgressRule{}
136131
}
137132

138133
// InternetEgressRule allows egress on TCP 80 and 443 to any destination.

pkg/reconciler/common/networkpolicy/networkpolicy_test.go

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -177,25 +177,13 @@ func TestInternetEgressRule(t *testing.T) {
177177
}
178178
}
179179

180-
func TestAPIServerEgressRule_Kubernetes(t *testing.T) {
181-
params := networkpolicy.KubernetesPlatformDefaults()
182-
rule := networkpolicy.APIServerEgressRule(params)
183-
if len(rule.Ports) != 1 || rule.Ports[0].Port.IntVal != 443 {
184-
t.Fatalf("expected port 443 for Kubernetes, got %v", rule.Ports)
185-
}
186-
if len(rule.To) != 0 {
187-
t.Errorf("expected no To restriction for API server egress, got %v", rule.To)
188-
}
189-
}
190-
191-
func TestAPIServerEgressRule_OpenShift(t *testing.T) {
192-
params := networkpolicy.OpenShiftPlatformDefaults()
193-
rule := networkpolicy.APIServerEgressRule(params)
194-
if len(rule.Ports) != 1 || rule.Ports[0].Port.IntVal != 6443 {
195-
t.Fatalf("expected port 6443 for OpenShift, got %v", rule.Ports)
180+
func TestAPIServerEgressRule(t *testing.T) {
181+
rule := networkpolicy.APIServerEgressRule()
182+
if len(rule.Ports) != 0 {
183+
t.Errorf("expected no port restriction (allow all), got %v", rule.Ports)
196184
}
197185
if len(rule.To) != 0 {
198-
t.Errorf("expected no To restriction for API server egress, got %v", rule.To)
186+
t.Errorf("expected no To restriction (allow all), got %v", rule.To)
199187
}
200188
}
201189

pkg/reconciler/common/networkpolicy/platform.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ type PlatformParams struct {
2525
// DNSPort is the DNS resolver pod port. Kubernetes CoreDNS uses 53; OpenShift DNS
2626
// uses 5353 (OVN-K8s enforces NetworkPolicy after DNAT, so pod port applies).
2727
DNSPort int32
28-
// APIServerPort is the kubernetes.default.svc port: 443 on Kubernetes, 6443 on OpenShift.
29-
APIServerPort int32
3028
}
3129

3230
// KubernetesPlatformDefaults returns PlatformParams for vanilla Kubernetes.
@@ -36,7 +34,6 @@ func KubernetesPlatformDefaults() PlatformParams {
3634
DNSResolverPodLabel: map[string]string{"k8s-app": "kube-dns"},
3735
PrometheusNamespaceLabel: map[string]string{"kubernetes.io/metadata.name": "monitoring"},
3836
DNSPort: 53,
39-
APIServerPort: 443,
4037
}
4138
}
4239

@@ -47,6 +44,5 @@ func OpenShiftPlatformDefaults() PlatformParams {
4744
DNSResolverPodLabel: map[string]string{"dns.operator.openshift.io/daemonset-dns": "default"},
4845
PrometheusNamespaceLabel: map[string]string{"openshift.io/cluster-monitoring": "true"},
4946
DNSPort: 5353,
50-
APIServerPort: 6443,
5147
}
5248
}

pkg/reconciler/kubernetes/tektontrigger/networkpolicies.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func triggersDefaultPolicies(params networkpolicy.PlatformParams) []networkingv1
4848
},
4949
Egress: []networkingv1.NetworkPolicyEgressRule{
5050
networkpolicy.DNSEgressRule(params),
51-
networkpolicy.APIServerEgressRule(params),
51+
networkpolicy.APIServerEgressRule(),
5252
},
5353
},
5454
},
@@ -66,7 +66,7 @@ func triggersDefaultPolicies(params networkpolicy.PlatformParams) []networkingv1
6666
},
6767
Egress: []networkingv1.NetworkPolicyEgressRule{
6868
networkpolicy.DNSEgressRule(params),
69-
networkpolicy.APIServerEgressRule(params),
69+
networkpolicy.APIServerEgressRule(),
7070
},
7171
},
7272
},
@@ -91,7 +91,7 @@ func triggersDefaultPolicies(params networkpolicy.PlatformParams) []networkingv1
9191
},
9292
Egress: []networkingv1.NetworkPolicyEgressRule{
9393
networkpolicy.DNSEgressRule(params),
94-
networkpolicy.APIServerEgressRule(params),
94+
networkpolicy.APIServerEgressRule(),
9595
// Allow egress to external APIs (e.g. GitHub) for file fetching and validation.
9696
networkpolicy.InternetEgressRule(),
9797
},

0 commit comments

Comments
 (0)