func registerWebhookConfig()

in cmd/webhook-manager/app/util.go [38:101]


func registerWebhookConfig(kubeClient *kubernetes.Clientset, config *options.Config, service *router.AdmissionService, caBundle []byte) {
	sideEffect := v1.SideEffectClassNoneOnDryRun
	reviewVersions := []string{"v1"}
	clientConfig := v1.WebhookClientConfig{
		CABundle: caBundle,
	}
	if config.WebhookURL != "" {
		url := config.WebhookURL + service.Path
		clientConfig.URL = &url
		klog.Infof("The URL of webhook manager is <%s>.", url)
	}
	if config.WebhookName != "" && config.WebhookNamespace != "" {
		clientConfig.Service = &v1.ServiceReference{
			Name:      config.WebhookName,
			Namespace: config.WebhookNamespace,
			Path:      &service.Path,
		}
		klog.Infof("The service of webhook manager is <%s/%s/%s>.",
			config.WebhookName, config.WebhookNamespace, service.Path)
	}
	namespaceSelector := &metav1.LabelSelector{
		MatchExpressions: []metav1.LabelSelectorRequirement{
			{
				Key:      "kubernetes.io/metadata.name",
				Operator: metav1.LabelSelectorOpNotIn,
				Values:   []string{config.WebhookNamespace},
			},
		},
	}
	if service.MutatingConfig != nil {
		for i := range service.MutatingConfig.Webhooks {
			service.MutatingConfig.Webhooks[i].SideEffects = &sideEffect
			service.MutatingConfig.Webhooks[i].AdmissionReviewVersions = reviewVersions
			service.MutatingConfig.Webhooks[i].ClientConfig = clientConfig
			service.MutatingConfig.Webhooks[i].NamespaceSelector = namespaceSelector
		}

		service.MutatingConfig.ObjectMeta.Name = webhookConfigName(config.WebhookName, service.Path)

		if err := registerMutateWebhook(kubeClient, service.MutatingConfig); err != nil {
			klog.Errorf("Failed to register mutating admission webhook (%s): %v",
				service.Path, err)
		} else {
			klog.V(3).Infof("Registered mutating webhook for path <%s>.", service.Path)
		}
	}
	if service.ValidatingConfig != nil {
		for i := range service.ValidatingConfig.Webhooks {
			service.ValidatingConfig.Webhooks[i].SideEffects = &sideEffect
			service.ValidatingConfig.Webhooks[i].AdmissionReviewVersions = reviewVersions
			service.ValidatingConfig.Webhooks[i].ClientConfig = clientConfig
			service.ValidatingConfig.Webhooks[i].NamespaceSelector = namespaceSelector
		}

		service.ValidatingConfig.ObjectMeta.Name = webhookConfigName(config.WebhookName, service.Path)

		if err := registerValidateWebhook(kubeClient, service.ValidatingConfig); err != nil {
			klog.Errorf("Failed to register validating admission webhook (%s): %v",
				service.Path, err)
		} else {
			klog.V(3).Infof("Registered validating webhook for path <%s>.", service.Path)
		}
	}
}