-
Notifications
You must be signed in to change notification settings - Fork 58
Description
We currently need multiple services for the router, one ClusterIP service for the ingress, and one headless service for DNS based service discovery. Although the CRD accepts multiple services, we encountered the following problems:
- if there is no
ObjectMeta.namespecified then we default tonodeSpecUniqueStr. This means even if we have multiple services specified we only create one service withnodeSpecUniqueStr. - To get around the problem in (1), we tried creating each service with its own unique name. This fails because
getServiceNameexpects a template and not the actual service names.
Example Error from Sprintf:
DEBUG events Error creating object [druid-staging-aep-druid-router%!(EXTRA string=druid-staging-aep-druid-router)] in namespace [*v1.Service:druid-clusters] due to [Service "druid-staging-aep-druid-router%!(EXTRA string=druid-staging-aep-druid-router)" is invalid: [metadata.name: Invalid value: "druid-staging-aep-druid-router%!(EXTRA string=druid-staging-aep-druid-router)": must be no more than 63 characters, metadata.name: Invalid value: "druid-staging-aep-druid-router%!(EXTRA string=druid-staging-aep-druid-router)": a DNS-1035 label must consist of lower case alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character (e.g. 'my-name', or 'abc-123', regex used for validation is '[a-z]([-a-z0-9]*[a-z0-9])?')]] {"type": "Warning", "object": {"kind":"Druid","namespace":"druid-clusters","name":"staging-aep-druid","uid":"2ea6e0e2-bbc0-413c-9a0f-db77e04bd372","apiVersion":"druid.apache.org/v1alpha1","resourceVersion":"7937315961"}, "reason": "DruidOperatorCreateFail"}
Ideal behaviour in my opinion is:
- if no
ObjectMeta.nameis not specified, then the operator should create unique names for the services, maybe start withserviceNameof the statefulset and for each subsequent service doserviceName + <ordinal> - If the
ObjectMeta.nameis specified then we should check for uniqueness and create the services with the names specified
Ref: