{"record":{"id":"7e785594250e40c6","repo":"openimsdk/open-im-server","slug":"service-s-has-no-ports-defined","errorCode":null,"errorMessage":"service %s has no ports defined","messagePattern":"service (.+?) has no ports defined","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/common/discovery/kubernetes/kubernetes.go","lineNumber":225,"sourceCode":"func (k *KubernetesConnManager) UnRegister() error {\n\treturn nil\n}\n\nfunc (k *KubernetesConnManager) GetUserIdHashGatewayHost(ctx context.Context, userId string) (string, error) {\n\treturn \"\", nil\n}\n\nfunc (k *KubernetesConnManager) getServicePort(serviceName string) (int32, error) {\n\tvar svcPort int32\n\n\tsvc, err := k.clientset.CoreV1().Services(k.namespace).Get(context.Background(), serviceName, metav1.GetOptions{})\n\tif err != nil {\n\t\tfmt.Print(\"namespace:\", k.namespace)\n\t\treturn 0, fmt.Errorf(\"failed to get service %s: %v\", serviceName, err)\n\t}\n\n\tif len(svc.Spec.Ports) == 0 {\n\t\treturn 0, fmt.Errorf(\"service %s has no ports defined\", serviceName)\n\t}\n\n\tfor _, port := range svc.Spec.Ports {\n\t\t// fmt.Println(serviceName, \" Now Get Port:\", port.Port)\n\t\tif port.Port != 10001 {\n\t\t\tsvcPort = port.Port\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn svcPort, nil\n}\n\n// watchEndpoints listens for changes in Pod resources.\nfunc (k *KubernetesConnManager) watchEndpoints() {\n\tinformerFactory := informers.NewSharedInformerFactory(k.clientset, time.Minute*10)\n\tinformer := informerFactory.Core().V1().Pods().Informer()\n","sourceCodeStart":207,"sourceCodeEnd":243,"githubUrl":"https://github.com/openimsdk/open-im-server/blob/175a7bb0673eca18e9d1b10bff4f728da6b1b513/pkg/common/discovery/kubernetes/kubernetes.go#L207-L243","documentation":"After fetching the Service, getServicePort requires at least one port in svc.Spec.Ports. A Service with no ports cannot expose gRPC endpoints, so the lookup fails with this message. This is a Service manifest problem, not an API problem.","triggerScenarios":"getServicePort reads a Service whose Spec.Ports is empty — the Service object exists but defines no port mappings.","commonSituations":"Hand-written or templated Service manifest missing the ports section; ExternalName/headless services created without ports; applying a stripped-down Service for metric-only exposure.","solutions":["Add a ports section to the Service manifest mapping the gRPC container port (e.g. port 10001 or the app port).","Redeploy/patch: kubectl patch svc <name> -p '{\"spec\":{\"ports\":[{\"port\":10001,\"targetPort\":10001}]}}'.","Confirm the right Service is selected — a similarly named placeholder Service may be shadowing the real one."],"exampleFix":"// before (Service yaml)\nspec:\n  selector:\n    app: my-rpc\n// after\nspec:\n  selector:\n    app: my-rpc\n  ports:\n    - port: 10001\n      targetPort: 10001","handlingStrategy":"validation","validationCode":"svc, _ := clientset.CoreV1().Services(ns).Get(ctx, svcName, metav1.GetOptions{})\nif len(svc.Spec.Ports) == 0 {\n    return errors.New(\"service manifest has no ports\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Lint Service manifests for a non-empty spec.ports before deploy","Add a CI check that every gRPC service exposes its port mapping","Avoid creating placeholder Services without ports"],"tags":["kubernetes","configuration","manifest"],"backgroundTag":"service-port-not-defined","analyzedSha":"175a7bb0673eca18e9d1b10bff4f728da6b1b513","analyzedAt":"2026-09-04T16:52:56.821Z","contentChangedAt":"2026-09-04T16:52:56.821Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}