mirror of
https://github.com/storytold/irsa-manager.git
synced 2026-10-09 00:09:43 +00:00
84 lines
2.0 KiB
Go
84 lines
2.0 KiB
Go
package webhook
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/kkb0318/irsa-manager/internal/manifests"
|
|
corev1 "k8s.io/api/core/v1"
|
|
"k8s.io/apimachinery/pkg/types"
|
|
"sigs.k8s.io/controller-runtime/pkg/client"
|
|
)
|
|
|
|
type WebhookSetup struct {
|
|
resources []client.Object
|
|
}
|
|
|
|
func secretNamespacedName() types.NamespacedName {
|
|
return types.NamespacedName{
|
|
Name: "pod-identity-webhook",
|
|
Namespace: WEBHOOK_NAMESPACE,
|
|
}
|
|
}
|
|
|
|
func (w *WebhookSetup) Resources() []client.Object {
|
|
return w.resources
|
|
}
|
|
|
|
func NewWebHookSetup() (*WebhookSetup, error) {
|
|
factory := newBaseManifestFactory()
|
|
resources, err := myCertificate(factory)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &WebhookSetup{resources}, nil
|
|
}
|
|
|
|
func myCertificate(base *baseManifestFactory) ([]client.Object, error) {
|
|
tlsCredential, err := CreateTlsCredential(serviceNamespacedName())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resources := []client.Object{}
|
|
secretNamespacedName := secretNamespacedName()
|
|
secret, err := manifests.NewSecretBuilder().
|
|
WithCertificate(tlsCredential).
|
|
Build(secretNamespacedName)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
deploy := base.deployment()
|
|
deploy.Spec.Template.Spec.Containers[0].Command = []string{
|
|
"/webhook",
|
|
"--in-cluster=false",
|
|
fmt.Sprintf("--namespace=%s", WEBHOOK_NAMESPACE),
|
|
fmt.Sprintf("--service-name=%s", base.serviceMeta.Name),
|
|
fmt.Sprintf("--tls-secret=%s", secretNamespacedName.Name),
|
|
"--annotation-prefix=eks.amazonaws.com",
|
|
"--token-audience=sts.amazonaws.com",
|
|
"--logtostderr",
|
|
}
|
|
deploy.Spec.Template.Spec.Volumes = []corev1.Volume{
|
|
{
|
|
Name: "cert",
|
|
VolumeSource: corev1.VolumeSource{
|
|
Secret: &corev1.SecretVolumeSource{
|
|
SecretName: secretNamespacedName.Name,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
mutate := base.mutatingWebhookConfiguration()
|
|
mutate.Webhooks[0].ClientConfig.CABundle = tlsCredential.Certificate()
|
|
resources = append(resources,
|
|
secret,
|
|
deploy,
|
|
mutate,
|
|
base.clusterRole(),
|
|
base.clusterRoleBinding(),
|
|
base.serviceAccount(),
|
|
base.service(),
|
|
)
|
|
return resources, nil
|
|
}
|