diff --git a/vertical-pod-autoscaler/pkg/admission-controller/config.go b/vertical-pod-autoscaler/pkg/admission-controller/config.go index 4207b94ab57d..2b535055a9a8 100644 --- a/vertical-pod-autoscaler/pkg/admission-controller/config.go +++ b/vertical-pod-autoscaler/pkg/admission-controller/config.go @@ -57,7 +57,7 @@ func configTLS(clientset *kubernetes.Clientset, serverCert, serverKey []byte) *t // register this webhook admission controller with the kube-apiserver // by creating MutatingWebhookConfiguration. -func selfRegistration(clientset *kubernetes.Clientset, caCert []byte, namespace *string) { +func selfRegistration(clientset *kubernetes.Clientset, caCert []byte, namespace *string, url string, registerByURL bool) { time.Sleep(10 * time.Second) client := clientset.AdmissionregistrationV1beta1().MutatingWebhookConfigurations() _, err := client.Get(webhookConfigName, metav1.GetOptions{}) @@ -66,6 +66,14 @@ func selfRegistration(clientset *kubernetes.Clientset, caCert []byte, namespace glog.Fatal(err2) } } + RegisterClientConfig := v1beta1.WebhookClientConfig{} + if !registerByURL { + RegisterClientConfig.Service.Name = *namespace + RegisterClientConfig.Service.Name = "vpa-webhook" + } else { + RegisterClientConfig.URL = &url + } + RegisterClientConfig.CABundle = caCert webhookConfig := &v1beta1.MutatingWebhookConfiguration{ ObjectMeta: metav1.ObjectMeta{ Name: webhookConfigName, @@ -90,13 +98,7 @@ func selfRegistration(clientset *kubernetes.Clientset, caCert []byte, namespace Resources: []string{"verticalpodautoscalers"}, }, }}, - ClientConfig: v1beta1.WebhookClientConfig{ - Service: &v1beta1.ServiceReference{ - Namespace: *namespace, - Name: "vpa-webhook", - }, - CABundle: caCert, - }, + ClientConfig: RegisterClientConfig, }, }, } diff --git a/vertical-pod-autoscaler/pkg/admission-controller/main.go b/vertical-pod-autoscaler/pkg/admission-controller/main.go index e2ea9ccbab66..30e4fd8270dc 100644 --- a/vertical-pod-autoscaler/pkg/admission-controller/main.go +++ b/vertical-pod-autoscaler/pkg/admission-controller/main.go @@ -48,9 +48,12 @@ var ( tlsPrivateKey: flag.String("tls-private-key", "/etc/tls-certs/serverKey.pem", "Path to server certificate key PEM file."), } - port = flag.Int("port", 8000, "The port to listen on.") - address = flag.String("address", ":8944", "The address to expose Prometheus metrics.") - namespace = os.Getenv("NAMESPACE") + port = flag.Int("port", 8000, "The port to listen on.") + address = flag.String("address", ":8944", "The address to expose Prometheus metrics.") + namespace = os.Getenv("NAMESPACE") + webhookAddress = flag.String("webhook-address", "", "Address under which webhook is registered. Used when registerByURL is set to true.") + webhookPort = flag.String("webhook-port", "", "Server Port for Webhook") + registerByURL = flag.Bool("register-by-url", false, "If set to true, admission webhook will be registered by URL (webhookAddress:webhookPort) instead of by service name") ) func main() { @@ -86,6 +89,7 @@ func main() { Addr: fmt.Sprintf(":%d", *port), TLSConfig: configTLS(clientset, certs.serverCert, certs.serverKey), } - go selfRegistration(clientset, certs.caCert, &namespace) + url := fmt.Sprintf("%v:%v", webhookAddress, webhookPort) + go selfRegistration(clientset, certs.caCert, &namespace, url, *registerByURL) server.ListenAndServeTLS("", "") }