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