diff --git a/api/v1alpha1/typesensecluster_types.go b/api/v1alpha1/typesensecluster_types.go index e8a0a09..5441664 100644 --- a/api/v1alpha1/typesensecluster_types.go +++ b/api/v1alpha1/typesensecluster_types.go @@ -121,6 +121,8 @@ type TypesenseClusterSpec struct { Ingress *IngressSpec `json:"ingress,omitempty"` + Service *ServiceSpec `json:"service,omitempty"` + HttpRoutes []HttpRouteSpec `json:"httpRoutes,omitempty"` Scrapers []DocSearchScraperSpec `json:"scrapers,omitempty"` diff --git a/api/v1alpha1/typesensecluster_types_service.go b/api/v1alpha1/typesensecluster_types_service.go new file mode 100644 index 0000000..8751bfe --- /dev/null +++ b/api/v1alpha1/typesensecluster_types_service.go @@ -0,0 +1,17 @@ +package v1alpha1 + +import ( + corev1 "k8s.io/api/core/v1" +) + +type ServiceSpec struct { + // +optional + // +kubebuilder:default:="ClusterIP" + // +kubebuilder:validation:Enum=ClusterIP;LoadBalancer + Type corev1.ServiceType `json:"type"` + + // +optional + // +kubebuilder:default:="Cluster" + // +kubebuilder:validation:Enum=Cluster;Local + ExternalTrafficPolicy corev1.ServiceExternalTrafficPolicy `json:"externalTrafficPolicy,omitempty"` +} diff --git a/internal/controller/typesensecluster_services.go b/internal/controller/typesensecluster_services.go index effe309..0be83d0 100644 --- a/internal/controller/typesensecluster_services.go +++ b/internal/controller/typesensecluster_services.go @@ -163,6 +163,12 @@ func (r *TypesenseClusterReconciler) createService(ctx context.Context, key clie }, } + svcSpec := ts.Spec.Service + if svcSpec != nil { + svc.Spec.Type = svcSpec.Type + svc.Spec.ExternalTrafficPolicy = svcSpec.ExternalTrafficPolicy + } + err := ctrl.SetControllerReference(ts, svc, r.Scheme) if err != nil { return nil, err