Skip to content

Commit 22be6ef

Browse files
committed
update dependencies
This require additional changes: - bump golang version on docker image - remove anp flags to adapt to the new kube-network-policies architecture We only use stable Network Policies APIs that can be enabled or disabled via a flag, so users can deploy kube-network-policies to have the different Network Policies we are developing in the subproject.
1 parent edb6f19 commit 22be6ef

File tree

6 files changed

+181
-145
lines changed

6 files changed

+181
-145
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-License-Identifier: APACHE-2.0
22

33
# STEP 1: Build kindnetd binary
4-
FROM --platform=$BUILDPLATFORM golang:1.24@sha256:d9db32125db0c3a680cfb7a1afcaefb89c898a075ec148fdc2f0f646cc2ed509 AS builder
4+
FROM --platform=$BUILDPLATFORM golang:1.24 AS builder
55
ARG TARGETARCH BUILDARCH BUILDPLATFORM TARGETPLATFORM
66
# setup cross-compiler, do this early so it can be cached
77
RUN touch /cc-env ;\

cmd/kindnetd/main.go

Lines changed: 84 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,22 @@ import (
3838
"sigs.k8s.io/kindnet/pkg/nflog"
3939
kindnetnode "sigs.k8s.io/kindnet/pkg/node"
4040

41+
"sigs.k8s.io/kube-network-policies/pkg/api"
42+
"sigs.k8s.io/kube-network-policies/pkg/dataplane"
43+
"sigs.k8s.io/kube-network-policies/pkg/networkpolicy"
44+
"sigs.k8s.io/kube-network-policies/pkg/podinfo"
45+
4146
"github.com/prometheus/client_golang/prometheus/promhttp"
4247
"golang.org/x/sys/unix"
4348

49+
"k8s.io/apimachinery/pkg/api/meta"
4450
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
4551
"k8s.io/client-go/informers"
46-
v1 "k8s.io/client-go/informers/core/v1"
4752
"k8s.io/client-go/kubernetes"
4853
"k8s.io/client-go/rest"
4954
nodeutil "k8s.io/component-helpers/node/util"
5055
"k8s.io/klog/v2"
5156

52-
"sigs.k8s.io/kube-network-policies/pkg/networkpolicy"
53-
npaclient "sigs.k8s.io/network-policy-api/pkg/client/clientset/versioned"
54-
npainformers "sigs.k8s.io/network-policy-api/pkg/client/informers/externalversions"
55-
"sigs.k8s.io/network-policy-api/pkg/client/informers/externalversions/apis/v1alpha1"
56-
5757
_ "k8s.io/component-base/metrics/prometheus/clientgo" // load all the prometheus client-go plugin
5858
)
5959

@@ -94,15 +94,15 @@ var (
9494
metricsBindAddress string
9595
fastpathThreshold int
9696
disableCNI bool
97+
disableNRI bool
9798
nflogLevel int
9899
ipsecOverlay bool
99100
)
100101

101102
func init() {
102103
flag.BoolVar(&disableCNI, "disable-cni", false, "If set, disable the CNI functionality to add IPs to Pods and routing between nodes (default false)")
103-
flag.BoolVar(&networkpolicies, "network-policy", true, "If set, enable Network Policies (default true)")
104-
flag.BoolVar(&adminNetworkPolicy, "admin-network-policy", false, "If set, enable Admin Network Policies (default false)")
105-
flag.BoolVar(&baselineAdminNetworkPolicy, "baseline-admin-network-policy", false, "If set, enable Baseline Admin Network Policies (default false)")
104+
flag.BoolVar(&disableNRI, "disable-nri", false, "If set, disable the NRI functionality to get Pod IP information from the container runtime directly (default false)")
105+
flag.BoolVar(&networkpolicies, "network-policy", true, "If set, enable Network Policy GA APIs (default true)")
106106
flag.BoolVar(&dnsCaching, "dns-caching", true, "If set, enable Kubernetes DNS caching (default true)")
107107
flag.BoolVar(&nat64, "nat64", true, "If set, enable NAT64 using the reserved prefix 64:ff9b::/96 on IPv6 only clusters (default true)")
108108
flag.StringVar(&hostnameOverride, "hostname-override", "", "If non-empty, will be used as the name of the Node that kube-network-policies is running on. If unset, the node name is assumed to be the same as the node's hostname.")
@@ -157,7 +157,6 @@ func main() {
157157
}
158158

159159
config.UserAgent = "kindnet"
160-
npaConfig := config // shallow copy because CRDs does not support proto
161160
// use protobuf for better performance at scale
162161
// https://kubernetes.io/docs/reference/using-api/api-concepts/#alternate-representations-of-resources
163162
config.AcceptContentTypes = "application/vnd.kubernetes.protobuf,application/json"
@@ -329,53 +328,90 @@ func main() {
329328

330329
// network policies
331330
if networkpolicies {
332-
cfg := networkpolicy.Config{
333-
FailOpen: true,
334-
QueueID: 102,
335-
NodeName: nodeName,
336-
NFTableName: "kindnet-network-policies",
337-
NetfilterBug1766Fix: true,
338-
AdminNetworkPolicy: adminNetworkPolicy,
339-
BaselineAdminNetworkPolicy: baselineAdminNetworkPolicy,
331+
dpConfig := dataplane.Config{
332+
FailOpen: true,
333+
QueueID: 102,
334+
NFTableName: "kindnet-network-policies",
335+
NetfilterBug1766Fix: true,
340336
}
341337

342-
var npaClient *npaclient.Clientset
343-
var npaInformerFactory npainformers.SharedInformerFactory
344-
var nodeInformer v1.NodeInformer
345-
if adminNetworkPolicy || baselineAdminNetworkPolicy {
346-
nodeInformer = informersFactory.Core().V1().Nodes()
347-
npaClient, err = npaclient.NewForConfig(npaConfig)
348-
if err != nil {
349-
klog.Fatalf("Failed to create Network client: %v", err)
338+
nsInformer := informersFactory.Core().V1().Namespaces()
339+
networkPolicyInfomer := informersFactory.Networking().V1().NetworkPolicies()
340+
podInformer := informersFactory.Core().V1().Pods()
341+
// Set the memory-saving transform function on the pod informer.
342+
err = podInformer.Informer().SetTransform(func(obj interface{}) (interface{}, error) {
343+
if accessor, err := meta.Accessor(obj); err == nil {
344+
accessor.SetManagedFields(nil)
350345
}
351-
npaInformerFactory = npainformers.NewSharedInformerFactory(npaClient, 0)
346+
return obj, nil
347+
})
348+
if err != nil {
349+
klog.Fatalf("Failed to set pod informer transform: %v", err)
350+
}
351+
// Create the Pod IP resolvers.
352+
// First, given an IP address they return the Pod name/namespace.
353+
informerResolver, err := podinfo.NewInformerResolver(podInformer.Informer())
354+
if err != nil {
355+
klog.Fatalf("Failed to create informer resolver: %v", err)
352356
}
353-
var anpInformer v1alpha1.AdminNetworkPolicyInformer
354-
if adminNetworkPolicy {
355-
anpInformer = npaInformerFactory.Policy().V1alpha1().AdminNetworkPolicies()
357+
resolvers := []podinfo.IPResolver{informerResolver}
358+
359+
// Create an NRI Pod IP resolver if enabled, since NRI connects to the container runtime
360+
// the Pod and IP information is provided at the time the Pod Sandbox is created and before
361+
// the containers start running, so policies can be enforced without race conditions.
362+
if !disableNRI {
363+
nriIPResolver, err := podinfo.NewNRIResolver(ctx, nodeName, nil)
364+
if err != nil {
365+
klog.Infof("failed to create NRI plugin, using apiserver information only: %v", err)
366+
}
367+
resolvers = append(resolvers, nriIPResolver)
356368
}
357-
var banpInformer v1alpha1.BaselineAdminNetworkPolicyInformer
358-
if baselineAdminNetworkPolicy {
359-
banpInformer = npaInformerFactory.Policy().V1alpha1().BaselineAdminNetworkPolicies()
369+
370+
// Create the pod info provider to obtain the Pod information
371+
// necessary for the network policy evaluation, it uses the resolvers
372+
// to obtain the key (Pod name and namespace) and use the informers to obtain
373+
// the labels that are necessary to match the network policies.
374+
podInfoProvider := podinfo.NewInformerProvider(
375+
podInformer,
376+
nsInformer,
377+
nil,
378+
resolvers)
379+
380+
// Create the evaluators for the Pipeline to process the packets
381+
// and take a network policy action. The evaluators are processed
382+
// by the order in the array.
383+
evaluators := []api.PolicyEvaluator{}
384+
385+
// Logging evaluator must go first if enabled.
386+
if klog.V(2).Enabled() {
387+
evaluators = append(evaluators, networkpolicy.NewLoggingPolicy())
360388
}
361389

362-
networkPolicyController, err := networkpolicy.NewController(
363-
clientset,
364-
informersFactory.Networking().V1().NetworkPolicies(),
365-
informersFactory.Core().V1().Namespaces(),
366-
informersFactory.Core().V1().Pods(),
367-
nodeInformer,
368-
npaClient,
369-
anpInformer,
370-
banpInformer,
371-
cfg)
390+
// Standard Network Policy goes after AdminNetworkPolicy and before BaselineAdminNetworkPolicy
391+
evaluators = append(evaluators, networkpolicy.NewStandardNetworkPolicy(
392+
nodeName,
393+
nsInformer,
394+
podInformer,
395+
networkPolicyInfomer,
396+
))
397+
398+
policyEngine := networkpolicy.NewPolicyEngine(podInfoProvider, evaluators)
399+
400+
// Start dataplane controller
401+
networkPolicyController, err := dataplane.NewController(
402+
policyEngine,
403+
dpConfig,
404+
)
372405
if err != nil {
373-
klog.Infof("Error creating network policy controller: %v, skipping network policies", err)
374-
} else {
375-
go func() {
376-
_ = networkPolicyController.Run(ctx)
377-
}()
406+
klog.ErrorS(err, "failed to create dataplane controller")
407+
// It's better to crash loud
408+
panic(err)
378409
}
410+
go func() {
411+
if err := networkPolicyController.Run(ctx); err != nil {
412+
utilruntime.HandleError(fmt.Errorf("dataplane controller failed: %w", err))
413+
}
414+
}()
379415
}
380416

381417
// start conntrack metrics agent

go.mod

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,38 @@
11
module sigs.k8s.io/kindnet
22

3-
go 1.24.0
3+
go 1.24.3
4+
5+
toolchain go1.24.7
46

57
require (
68
github.com/aws/aws-sdk-go-v2 v1.36.3
79
github.com/aws/aws-sdk-go-v2/config v1.29.14
810
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30
911
github.com/aws/aws-sdk-go-v2/service/ec2 v1.217.0
10-
github.com/containerd/nri v0.9.0
12+
github.com/containerd/nri v0.10.0
1113
github.com/florianl/go-nflog/v2 v2.1.0
1214
github.com/florianl/go-nfqueue v1.3.2
1315
github.com/google/go-cmp v0.7.0
1416
github.com/google/nftables v0.3.0
15-
github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42
16-
github.com/prometheus/client_golang v1.23.0
17+
github.com/mdlayher/netlink v1.8.0
18+
github.com/prometheus/client_golang v1.23.2
1719
github.com/ti-mo/conntrack v0.5.2
1820
github.com/ti-mo/netfilter v0.5.3
1921
github.com/vishvananda/netlink v1.3.1
20-
k8s.io/api v0.33.3
21-
k8s.io/apimachinery v0.33.3
22-
k8s.io/client-go v0.33.3
23-
k8s.io/component-base v0.33.3
24-
k8s.io/component-helpers v0.33.3
25-
k8s.io/cri-api v0.33.0
26-
k8s.io/cri-client v0.33.0
22+
k8s.io/api v0.34.1
23+
k8s.io/apimachinery v0.34.1
24+
k8s.io/client-go v0.34.1
25+
k8s.io/component-base v0.34.1
26+
k8s.io/component-helpers v0.34.1
27+
k8s.io/cri-api v0.34.1
28+
k8s.io/cri-client v0.34.1
2729
k8s.io/klog/v2 v2.130.1
28-
k8s.io/kubelet v0.33.0
29-
sigs.k8s.io/kube-network-policies v0.8.1
30-
sigs.k8s.io/network-policy-api v0.1.6-0.20250401132235-45061d10895e
30+
k8s.io/kubelet v0.34.1
31+
sigs.k8s.io/kube-network-policies v0.9.2
3132
)
3233

3334
require (
3435
github.com/Microsoft/go-winio v0.6.2 // indirect
35-
github.com/armon/go-radix v1.0.0 // indirect
3636
github.com/aws/aws-sdk-go-v2/credentials v1.17.67 // indirect
3737
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect
3838
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect
@@ -51,18 +51,19 @@ require (
5151
github.com/containerd/ttrpc v1.2.7 // indirect
5252
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
5353
github.com/felixge/httpsnoop v1.0.4 // indirect
54-
github.com/fxamacker/cbor/v2 v2.8.0 // indirect
54+
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
5555
github.com/go-logr/stdr v1.2.2 // indirect
56-
github.com/google/gnostic-models v0.6.9 // indirect
56+
github.com/google/gnostic-models v0.7.0 // indirect
5757
github.com/google/uuid v1.6.0 // indirect
5858
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
5959
github.com/inconshreveable/mousetrap v1.1.0 // indirect
6060
github.com/knqyf263/go-plugin v0.9.0 // indirect
6161
github.com/mdlayher/socket v0.5.1 // indirect
6262
github.com/opencontainers/runtime-spec v1.2.1 // indirect
6363
github.com/pkg/errors v0.9.1 // indirect
64+
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
6465
github.com/prometheus/client_model v0.6.2 // indirect
65-
github.com/prometheus/common v0.65.0 // indirect
66+
github.com/prometheus/common v0.66.1 // indirect
6667
github.com/prometheus/procfs v0.16.1 // indirect
6768
github.com/sirupsen/logrus v1.9.3 // indirect
6869
github.com/spf13/cobra v1.9.1 // indirect
@@ -79,12 +80,15 @@ require (
7980
go.opentelemetry.io/otel/sdk v1.35.0 // indirect
8081
go.opentelemetry.io/otel/trace v1.35.0 // indirect
8182
go.opentelemetry.io/proto/otlp v1.6.0 // indirect
82-
golang.org/x/sync v0.16.0 // indirect
83+
go.yaml.in/yaml/v2 v2.4.2 // indirect
84+
go.yaml.in/yaml/v3 v3.0.4 // indirect
85+
golang.org/x/sync v0.17.0 // indirect
8386
google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 // indirect
8487
google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2 // indirect
85-
google.golang.org/grpc v1.72.0 // indirect
88+
google.golang.org/grpc v1.72.1 // indirect
8689
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
8790
sigs.k8s.io/randfill v1.0.0 // indirect
91+
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect
8892
)
8993

9094
require (
@@ -98,22 +102,21 @@ require (
98102
github.com/json-iterator/go v1.1.12 // indirect
99103
github.com/mailru/easyjson v0.9.0 // indirect
100104
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
101-
github.com/modern-go/reflect2 v1.0.2 // indirect
105+
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
102106
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
103107
github.com/vishvananda/netns v0.0.5
104-
golang.org/x/net v0.42.0
108+
golang.org/x/net v0.46.0
105109
golang.org/x/oauth2 v0.30.0 // indirect
106-
golang.org/x/sys v0.34.0
107-
golang.org/x/term v0.33.0 // indirect
108-
golang.org/x/text v0.27.0 // indirect
109-
golang.org/x/time v0.11.0
110-
google.golang.org/protobuf v1.36.6 // indirect
110+
golang.org/x/sys v0.37.0
111+
golang.org/x/term v0.36.0 // indirect
112+
golang.org/x/text v0.30.0 // indirect
113+
golang.org/x/time v0.13.0
114+
google.golang.org/protobuf v1.36.9 // indirect
111115
gopkg.in/inf.v0 v0.9.1 // indirect
112116
// indirect dep
113117
gopkg.in/yaml.v3 v3.0.1 // indirect
114-
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect
118+
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect
115119
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397
116120
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
117-
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 // indirect
118-
sigs.k8s.io/yaml v1.4.0 // indirect
121+
sigs.k8s.io/yaml v1.6.0 // indirect
119122
)

0 commit comments

Comments
 (0)