1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00
kyverno/main.go

100 lines
3.3 KiB
Go
Raw Normal View History

package main
import (
"flag"
2019-05-31 17:59:36 -07:00
"github.com/golang/glog"
"github.com/nirmata/kyverno/pkg/annotations"
2019-05-31 17:59:36 -07:00
"github.com/nirmata/kyverno/pkg/config"
2019-05-21 11:00:09 -07:00
controller "github.com/nirmata/kyverno/pkg/controller"
client "github.com/nirmata/kyverno/pkg/dclient"
2019-05-21 11:00:09 -07:00
event "github.com/nirmata/kyverno/pkg/event"
2019-07-03 10:25:00 -07:00
gencontroller "github.com/nirmata/kyverno/pkg/gencontroller"
2019-05-21 11:00:09 -07:00
"github.com/nirmata/kyverno/pkg/sharedinformer"
2019-07-03 10:25:00 -07:00
"github.com/nirmata/kyverno/pkg/utils"
2019-05-21 11:00:09 -07:00
"github.com/nirmata/kyverno/pkg/violation"
"github.com/nirmata/kyverno/pkg/webhooks"
2019-05-10 00:05:21 -07:00
"k8s.io/sample-controller/pkg/signals"
)
var (
2019-06-17 23:41:18 -07:00
kubeconfig string
serverIP string
2019-06-18 11:47:45 -07:00
filterK8Kinds webhooks.ArrayFlags
)
func main() {
2019-05-31 17:59:36 -07:00
defer glog.Flush()
printVersionInfo()
clientConfig, err := createClientConfig(kubeconfig)
if err != nil {
2019-05-31 17:59:36 -07:00
glog.Fatalf("Error building kubeconfig: %v\n", err)
}
2019-05-31 17:59:36 -07:00
client, err := client.NewClient(clientConfig)
if err != nil {
2019-05-31 17:59:36 -07:00
glog.Fatalf("Error creating client: %v\n", err)
}
2019-05-15 12:29:09 -07:00
policyInformerFactory, err := sharedinformer.NewSharedInformerFactory(clientConfig)
if err != nil {
2019-05-31 17:59:36 -07:00
glog.Fatalf("Error creating policy sharedinformer: %v\n", err)
}
2019-07-03 10:25:00 -07:00
kubeInformer := utils.NewKubeInformerFactory(clientConfig)
2019-05-31 17:59:36 -07:00
eventController := event.NewEventController(client, policyInformerFactory)
violationBuilder := violation.NewPolicyViolationBuilder(client, policyInformerFactory, eventController)
annotationsController := annotations.NewAnnotationControler(client)
2019-05-15 11:24:27 -07:00
policyController := controller.NewPolicyController(
client,
2019-05-15 12:29:09 -07:00
policyInformerFactory,
2019-05-10 00:05:21 -07:00
violationBuilder,
eventController,
annotationsController)
2019-07-03 10:25:00 -07:00
genControler := gencontroller.NewGenController(client, eventController, policyInformerFactory, violationBuilder, kubeInformer.Core().V1().Namespaces())
2019-06-05 17:43:59 -07:00
tlsPair, err := initTLSPemPair(clientConfig, client)
if err != nil {
2019-05-31 17:59:36 -07:00
glog.Fatalf("Failed to initialize TLS key/certificate pair: %v\n", err)
}
server, err := webhooks.NewWebhookServer(client, tlsPair, policyInformerFactory, eventController, violationBuilder, annotationsController, filterK8Kinds)
if err != nil {
2019-05-31 17:59:36 -07:00
glog.Fatalf("Unable to create webhook server: %v\n", err)
}
webhookRegistrationClient, err := webhooks.NewWebhookRegistrationClient(clientConfig, client, serverIP)
if err != nil {
2019-05-31 17:59:36 -07:00
glog.Fatalf("Unable to register admission webhooks on cluster: %v\n", err)
}
stopCh := signals.SetupSignalHandler()
2019-07-19 16:17:10 -07:00
if err = webhookRegistrationClient.Register(); err != nil {
glog.Fatalf("Failed registering Admission Webhooks: %v\n", err)
}
2019-05-15 12:29:09 -07:00
policyInformerFactory.Run(stopCh)
2019-07-03 10:25:00 -07:00
kubeInformer.Start(stopCh)
eventController.Run(stopCh)
2019-07-03 10:25:00 -07:00
genControler.Run(stopCh)
annotationsController.Run(stopCh)
2019-05-10 00:05:21 -07:00
if err = policyController.Run(stopCh); err != nil {
2019-05-31 17:59:36 -07:00
glog.Fatalf("Error running PolicyController: %v\n", err)
}
server.RunAsync()
<-stopCh
server.Stop()
2019-07-03 10:25:00 -07:00
genControler.Stop()
2019-06-20 16:50:54 -07:00
eventController.Stop()
annotationsController.Stop()
policyController.Stop()
}
func init() {
flag.StringVar(&kubeconfig, "kubeconfig", "", "Path to a kubeconfig. Only required if out-of-cluster.")
flag.StringVar(&serverIP, "serverIP", "", "IP address where Kyverno controller runs. Only required if out-of-cluster.")
2019-06-18 11:47:45 -07:00
flag.Var(&filterK8Kinds, "filterKind", "k8 kind where policy is not evaluated by the admission webhook. example --filterKind \"Event\" --filterKind \"TokenReview,ClusterRole\"")
2019-05-31 17:59:36 -07:00
config.LogDefaultFlags()
flag.Parse()
2019-06-05 17:43:59 -07:00
}