in iotdb-operator/internal/controller/datanode_controller.go [243:359]
func (r *DataNodeReconciler) constructServiceForDataNode(dataNode *iotdbv1.DataNode) ([]corev1.Service, error) {
headlessService := &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: DataNodeName + "-headless",
Namespace: dataNode.Namespace,
Labels: map[string]string{"app": DataNodeName},
},
Spec: corev1.ServiceSpec{
ClusterIP: "None",
Ports: []corev1.ServicePort{
{
Name: "dn-internal-port",
Port: 10730,
TargetPort: intstr.FromInt32(10730),
},
{
Name: "dn-mpp-data-exchange-port",
Port: 10740,
TargetPort: intstr.FromInt32(10750),
},
{
Name: "dn-data-region-consensus-port",
Port: 10760,
TargetPort: intstr.FromInt32(10760),
},
{
Name: "dn-schema-region-consensus-port",
Port: 10750,
TargetPort: intstr.FromInt32(10750),
},
{
Name: "dn-rpc-port",
Port: 6667,
TargetPort: intstr.FromInt32(6667),
},
{
Name: "rest-service-port",
Port: 18080,
TargetPort: intstr.FromInt32(18080),
},
{
Name: "dn-metric-prometheus-reporter-port",
Port: 9092,
TargetPort: intstr.FromInt32(9092),
},
},
Selector: map[string]string{
"app": DataNodeName,
},
},
}
err := SetControllerReference(dataNode, headlessService, r.Scheme)
if err != nil {
return nil, err
}
services := []corev1.Service{*headlessService}
if dataNode.Spec.Service != nil && len(dataNode.Spec.Service.Ports) > 0 {
ports := make([]corev1.ServicePort, len(dataNode.Spec.Service.Ports))
i := 0
for key, value := range dataNode.Spec.Service.Ports {
port := value
if key == "dn_metric_prometheus_reporter_port" {
port = 9092
ports[i] = corev1.ServicePort{
Name: strutil.ToKebabCase(key),
Port: port,
NodePort: value,
TargetPort: intstr.FromInt32(port),
}
i++
} else if key == "rest_service_port" {
port = 18080
ports[i] = corev1.ServicePort{
Name: strutil.ToKebabCase(key),
Port: port,
NodePort: value,
TargetPort: intstr.FromInt32(port),
}
i++
} else if key == "dn_rpc_port" {
port = 6667
ports[i] = corev1.ServicePort{
Name: strutil.ToKebabCase(key),
Port: port,
NodePort: value,
TargetPort: intstr.FromInt32(port),
}
i++
}
}
if i > 0 {
nodePorts := ports[0:i]
nodePortService := &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: DataNodeName,
Namespace: dataNode.Namespace,
Labels: map[string]string{"app": DataNodeName},
},
Spec: corev1.ServiceSpec{
Type: corev1.ServiceType(dataNode.Spec.Service.Type),
Ports: nodePorts,
Selector: map[string]string{
"app": DataNodeName,
},
},
}
err := SetControllerReference(dataNode, nodePortService, r.Scheme)
if err != nil {
return nil, err
}
services = append(services, *nodePortService)
}
}
return services, nil
}