in cmd/webhook/server/server.go [265:308]
func Setup(c *Config) (*Server, error) {
s := &Server{
secureServing: c.SecureServing,
insecureServing: c.InsecureServing,
}
if s.secureServing == nil && s.insecureServing == nil {
return nil, errors.New("no serving info configured")
}
client, err := clientset.NewForConfig(c.KubeConfig)
if err != nil {
return nil, err
}
s.informerFactory = kubeinformers.NewSharedInformerFactory(client, 0 /* no resync */)
namespaceInformer := s.informerFactory.Core().V1().Namespaces()
namespaceLister := namespaceInformer.Lister()
evaluator, err := policy.NewEvaluator(policy.DefaultChecks())
if err != nil {
return nil, fmt.Errorf("could not create PodSecurityRegistry: %w", err)
}
metrics := metrics.NewPrometheusRecorder(api.GetAPIVersion())
s.metricsRegistry = compbasemetrics.NewKubeRegistry()
metrics.MustRegister(s.metricsRegistry.MustRegister)
s.delegate = &admission.Admission{
Configuration: c.PodSecurityConfig,
Evaluator: evaluator,
Metrics: metrics,
PodSpecExtractor: admission.DefaultPodSpecExtractor{},
PodLister: admission.PodListerFromClient(client),
NamespaceGetter: admission.NamespaceGetterFromListerAndClient(namespaceLister, client),
}
if err := s.delegate.CompleteConfiguration(); err != nil {
return nil, fmt.Errorf("configuration error: %w", err)
}
if err := s.delegate.ValidateConfiguration(); err != nil {
return nil, fmt.Errorf("invalid configuration: %w", err)
}
return s, nil
}