in pkg/authority/k8s/client.go [300:374]
func (c *ClientImpl) UpdateWebhookConfig(options *config.Options, storage cert.Storage) {
path := "/mutating-services"
failurePolicy := admissionregistrationV1.Ignore
sideEffects := admissionregistrationV1.SideEffectClassNone
bundle := storage.GetAuthorityCert().CertPem
mwConfig, err := c.kubeClient.AdmissionregistrationV1().MutatingWebhookConfigurations().Get(context.TODO(), "dubbo-ca", metav1.GetOptions{})
if err != nil {
logger.Sugar().Warnf("Unable to find dubbo-ca webhook config. Will create. " + err.Error())
mwConfig = &admissionregistrationV1.MutatingWebhookConfiguration{
ObjectMeta: metav1.ObjectMeta{
Name: "dubbo-ca",
},
Webhooks: []admissionregistrationV1.MutatingWebhook{
{
Name: "dubbo-ca" + ".k8s.io",
ClientConfig: admissionregistrationV1.WebhookClientConfig{
Service: &admissionregistrationV1.ServiceReference{
Name: options.ServiceName,
Namespace: options.Namespace,
Port: &options.WebhookPort,
Path: &path,
},
CABundle: []byte(bundle),
},
FailurePolicy: &failurePolicy,
Rules: []admissionregistrationV1.RuleWithOperations{
{
Operations: []admissionregistrationV1.OperationType{
admissionregistrationV1.Create,
},
Rule: admissionregistrationV1.Rule{
APIGroups: []string{""},
APIVersions: []string{"v1"},
Resources: []string{"pods"},
},
},
},
//NamespaceSelector: &metav1.LabelSelector{
// MatchLabels: map[string]string{
// "dubbo-injection": "enabled",
// },
//},
//ObjectSelector: &metav1.LabelSelector{
// MatchLabels: map[string]string{
// "dubbo-injection": "enabled",
// },
//},
SideEffects: &sideEffects,
AdmissionReviewVersions: []string{"v1"},
},
},
}
_, err := c.kubeClient.AdmissionregistrationV1().MutatingWebhookConfigurations().Create(context.TODO(), mwConfig, metav1.CreateOptions{})
if err != nil {
logger.Sugar().Warnf("Failed to create webhook config. " + err.Error())
} else {
logger.Sugar().Info("Create webhook config success.")
}
return
}
if reflect.DeepEqual(mwConfig.Webhooks[0].ClientConfig.CABundle, []byte(bundle)) {
logger.Sugar().Info("Ignore override webhook config. Cause: Already exist.")
return
}
mwConfig.Webhooks[0].ClientConfig.CABundle = []byte(bundle)
_, err = c.kubeClient.AdmissionregistrationV1().MutatingWebhookConfigurations().Update(context.TODO(), mwConfig, metav1.UpdateOptions{})
if err != nil {
logger.Sugar().Warnf("Failed to update webhook config. " + err.Error())
} else {
logger.Sugar().Info("Update webhook config success.")
}
}