@@ -17,9 +17,12 @@ import (
17
17
"sigs.k8s.io/kube-network-policies/pkg/dns"
18
18
"sigs.k8s.io/kube-network-policies/pkg/networkpolicy"
19
19
"sigs.k8s.io/kube-network-policies/pkg/podinfo"
20
+
21
+ npav1alpha2 "sigs.k8s.io/network-policy-api/apis/v1alpha2"
20
22
npaclient "sigs.k8s.io/network-policy-api/pkg/client/clientset/versioned"
21
23
npainformers "sigs.k8s.io/network-policy-api/pkg/client/informers/externalversions"
22
- "sigs.k8s.io/network-policy-api/pkg/client/informers/externalversions/apis/v1alpha1"
24
+ npainformersv1alpha1 "sigs.k8s.io/network-policy-api/pkg/client/informers/externalversions/apis/v1alpha1"
25
+ npainformersv1alpha2 "sigs.k8s.io/network-policy-api/pkg/client/informers/externalversions/apis/v1alpha2"
23
26
24
27
"k8s.io/apimachinery/pkg/api/meta"
25
28
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
39
42
failOpen bool
40
43
adminNetworkPolicy bool // AdminNetworkPolicy is alpha so keep it feature gated behind a flag
41
44
baselineAdminNetworkPolicy bool // BaselineAdminNetworkPolicy is alpha so keep it feature gated behind a flag
45
+ clusterNetworkPolicy bool // ClusterNetworkPolicy is alpha so keep it feature gated behind a flag
42
46
queueID int
43
47
metricsBindAddress string
44
48
hostnameOverride string
@@ -50,6 +54,7 @@ func init() {
50
54
flag .BoolVar (& failOpen , "fail-open" , false , "If set, don't drop packets if the controller is not running" )
51
55
flag .BoolVar (& adminNetworkPolicy , "admin-network-policy" , false , "If set, enable Admin Network Policy API" )
52
56
flag .BoolVar (& baselineAdminNetworkPolicy , "baseline-admin-network-policy" , false , "If set, enable Baseline Admin Network Policy API" )
57
+ flag .BoolVar (& clusterNetworkPolicy , "cluster-network-policy" , false , "If set, enable Cluster-network-policy" )
53
58
flag .IntVar (& queueID , "nfqueue-id" , 100 , "Number of the nfqueue used" )
54
59
flag .StringVar (& metricsBindAddress , "metrics-bind-address" , ":9080" , "The IP address and port for the metrics server to serve on" )
55
60
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." )
@@ -91,6 +96,10 @@ func run() int {
91
96
logger .Info ("flag" , "name" , flag .Name , "value" , flag .Value )
92
97
})
93
98
99
+ if clusterNetworkPolicy && (adminNetworkPolicy || baselineAdminNetworkPolicy ) {
100
+ klog .Fatal ("clusterNetworkPolicy cannot be enabled with adminNetworkPolicy or baselineAdminNetworkPolicy" )
101
+ }
102
+
94
103
if _ , _ , err := net .SplitHostPort (metricsBindAddress ); err != nil {
95
104
logger .Error (err , "parsing metrics bind address" , "address" , metricsBindAddress )
96
105
return 1
@@ -129,7 +138,8 @@ func run() int {
129
138
var npaClient * npaclient.Clientset
130
139
var npaInformerFactory npainformers.SharedInformerFactory
131
140
var nodeInformer coreinformers.NodeInformer
132
- if adminNetworkPolicy || baselineAdminNetworkPolicy {
141
+
142
+ if adminNetworkPolicy || baselineAdminNetworkPolicy || clusterNetworkPolicy {
133
143
nodeInformer = informersFactory .Core ().V1 ().Nodes ()
134
144
npaClient , err = npaclient .NewForConfig (npaConfig )
135
145
if err != nil {
@@ -138,14 +148,18 @@ func run() int {
138
148
npaInformerFactory = npainformers .NewSharedInformerFactory (npaClient , 0 )
139
149
}
140
150
141
- var anpInformer v1alpha1 .AdminNetworkPolicyInformer
151
+ var anpInformer npainformersv1alpha1 .AdminNetworkPolicyInformer
142
152
if adminNetworkPolicy {
143
153
anpInformer = npaInformerFactory .Policy ().V1alpha1 ().AdminNetworkPolicies ()
144
154
}
145
- var banpInformer v1alpha1 .BaselineAdminNetworkPolicyInformer
155
+ var banpInformer npainformersv1alpha1 .BaselineAdminNetworkPolicyInformer
146
156
if baselineAdminNetworkPolicy {
147
157
banpInformer = npaInformerFactory .Policy ().V1alpha1 ().BaselineAdminNetworkPolicies ()
148
158
}
159
+ var cnpInformer npainformersv1alpha2.ClusterNetworkPolicyInformer
160
+ if clusterNetworkPolicy {
161
+ cnpInformer = npaInformerFactory .Policy ().V1alpha2 ().ClusterNetworkPolicies ()
162
+ }
149
163
150
164
nsInformer := informersFactory .Core ().V1 ().Namespaces ()
151
165
networkPolicyInfomer := informersFactory .Networking ().V1 ().NetworkPolicies ()
@@ -201,25 +215,40 @@ func run() int {
201
215
evaluators = append (evaluators , networkpolicy .NewLoggingPolicy ())
202
216
}
203
217
204
- if adminNetworkPolicy {
218
+ var domainResolver api.DomainResolver
219
+ // If AdminNetworkPolicy or ClusterNetworkPolicy are enabled, we need a domain resolver.
220
+ if adminNetworkPolicy || clusterNetworkPolicy {
221
+ klog .Infof ("AdminNetworkPolicy or ClusterNetworkPolicy enabled, starting domain cache" )
205
222
// Admin Network Policy need to associate IP addresses to Domains
206
223
// NewDomainCache implements the interface DomainResolver using
207
224
// nftables to create a cache with the resolved IP addresses from the
208
225
// Pod domain queries.
209
- domainResolver := dns .NewDomainCache (queueID + 1 )
226
+ domainCache := dns .NewDomainCache (queueID + 1 )
210
227
go func () {
211
- err := domainResolver .Run (ctx )
228
+ err := domainCache .Run (ctx )
212
229
if err != nil {
213
230
klog .Infof ("domain cache controller exited: %v" , err )
214
231
}
215
232
}()
233
+ domainResolver = domainCache
234
+
235
+ }
216
236
237
+ if adminNetworkPolicy {
217
238
evaluators = append (evaluators , networkpolicy .NewAdminNetworkPolicy (
218
239
anpInformer ,
219
240
domainResolver ,
220
241
))
221
242
}
222
243
244
+ if clusterNetworkPolicy {
245
+ evaluators = append (evaluators , networkpolicy .NewClusterNetworkPolicy (
246
+ npav1alpha2 .AdminTier ,
247
+ cnpInformer ,
248
+ domainResolver ,
249
+ ))
250
+ }
251
+
223
252
// Standard Network Policy goes after AdminNetworkPolicy and before BaselineAdminNetworkPolicy
224
253
evaluators = append (evaluators , networkpolicy .NewStandardNetworkPolicy (
225
254
nodeName ,
@@ -234,6 +263,14 @@ func run() int {
234
263
))
235
264
}
236
265
266
+ if clusterNetworkPolicy {
267
+ evaluators = append (evaluators , networkpolicy .NewClusterNetworkPolicy (
268
+ npav1alpha2 .BaselineTier ,
269
+ cnpInformer ,
270
+ domainResolver ,
271
+ ))
272
+ }
273
+
237
274
http .Handle ("/metrics" , promhttp .Handler ())
238
275
go func () {
239
276
err := http .ListenAndServe (metricsBindAddress , nil )
0 commit comments