Skip to content

Commit

Permalink
The default port is used when there is no port number for k8s (#2598)
Browse files Browse the repository at this point in the history
* k8s 没有端口号时使用默认端口

* Modify the not port test
  • Loading branch information
bigrocs committed Nov 27, 2022
1 parent b1c3c21 commit 90828a0
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 17 deletions.
27 changes: 15 additions & 12 deletions zrpc/resolver/internal/kube/targetparser.go
Expand Up @@ -32,18 +32,21 @@ func ParseTarget(target resolver.Target) (Service, error) {
}

endpoints := targets.GetEndpoints(target)
segs := strings.SplitN(endpoints, colon, 2)
if len(segs) < 2 {
return emptyService, fmt.Errorf("bad endpoint: %s", endpoints)
if strings.Contains(endpoints, colon) {
segs := strings.SplitN(endpoints, colon, 2)
if len(segs) < 2 {
return emptyService, fmt.Errorf("bad endpoint: %s", endpoints)
}

service.Name = segs[0]
port, err := strconv.Atoi(segs[1])
if err != nil {
return emptyService, err
}

service.Port = port
} else {
service.Name = endpoints
}

service.Name = segs[0]
port, err := strconv.Atoi(segs[1])
if err != nil {
return emptyService, err
}

service.Port = port

return service, nil
}
9 changes: 6 additions & 3 deletions zrpc/resolver/internal/kube/targetparser_test.go
Expand Up @@ -39,9 +39,12 @@ func TestParseTarget(t *testing.T) {
hasErr: true,
},
{
name: "no port, no colon",
input: "k8s://ns1/my-svc",
hasErr: true,
name: "no port, no colon",
input: "k8s://ns1/my-svc",
expect: Service{
Namespace: "ns1",
Name: "my-svc",
},
},
{
name: "bad port",
Expand Down
10 changes: 8 additions & 2 deletions zrpc/resolver/internal/kubebuilder.go
Expand Up @@ -40,6 +40,14 @@ func (b *kubeBuilder) Build(target resolver.Target, cc resolver.ClientConn,
return nil, err
}

if svc.Port == 0 {
endpoints, err := cs.CoreV1().Endpoints(svc.Namespace).Get(context.Background(), svc.Name, v1.GetOptions{})
if err != nil {
return nil, err
}
svc.Port = int(endpoints.Subsets[0].Ports[0].Port)
}

handler := kube.NewEventHandler(func(endpoints []string) {
var addrs []resolver.Address
for _, val := range subset(endpoints, subsetSize) {
Expand All @@ -64,12 +72,10 @@ func (b *kubeBuilder) Build(target resolver.Target, cc resolver.ClientConn,
threading.GoSafe(func() {
inf.Start(proc.Done())
})

endpoints, err := cs.CoreV1().Endpoints(svc.Namespace).Get(context.Background(), svc.Name, v1.GetOptions{})
if err != nil {
return nil, err
}

handler.Update(endpoints)

return &nopResolver{cc: cc}, nil
Expand Down

0 comments on commit 90828a0

Please sign in to comment.