The default port is used when there is no port number for k8s (#2598)
* k8s 没有端口号时使用默认端口 * Modify the not port test
This commit is contained in:
@@ -32,18 +32,21 @@ func ParseTarget(target resolver.Target) (Service, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
endpoints := targets.GetEndpoints(target)
|
endpoints := targets.GetEndpoints(target)
|
||||||
segs := strings.SplitN(endpoints, colon, 2)
|
if strings.Contains(endpoints, colon) {
|
||||||
if len(segs) < 2 {
|
segs := strings.SplitN(endpoints, colon, 2)
|
||||||
return emptyService, fmt.Errorf("bad endpoint: %s", endpoints)
|
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
|
return service, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,9 +39,12 @@ func TestParseTarget(t *testing.T) {
|
|||||||
hasErr: true,
|
hasErr: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "no port, no colon",
|
name: "no port, no colon",
|
||||||
input: "k8s://ns1/my-svc",
|
input: "k8s://ns1/my-svc",
|
||||||
hasErr: true,
|
expect: Service{
|
||||||
|
Namespace: "ns1",
|
||||||
|
Name: "my-svc",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "bad port",
|
name: "bad port",
|
||||||
|
|||||||
@@ -40,6 +40,14 @@ func (b *kubeBuilder) Build(target resolver.Target, cc resolver.ClientConn,
|
|||||||
return nil, err
|
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) {
|
handler := kube.NewEventHandler(func(endpoints []string) {
|
||||||
var addrs []resolver.Address
|
var addrs []resolver.Address
|
||||||
for _, val := range subset(endpoints, subsetSize) {
|
for _, val := range subset(endpoints, subsetSize) {
|
||||||
@@ -64,12 +72,10 @@ func (b *kubeBuilder) Build(target resolver.Target, cc resolver.ClientConn,
|
|||||||
threading.GoSafe(func() {
|
threading.GoSafe(func() {
|
||||||
inf.Start(proc.Done())
|
inf.Start(proc.Done())
|
||||||
})
|
})
|
||||||
|
|
||||||
endpoints, err := cs.CoreV1().Endpoints(svc.Namespace).Get(context.Background(), svc.Name, v1.GetOptions{})
|
endpoints, err := cs.CoreV1().Endpoints(svc.Namespace).Get(context.Background(), svc.Name, v1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
handler.Update(endpoints)
|
handler.Update(endpoints)
|
||||||
|
|
||||||
return &nopResolver{cc: cc}, nil
|
return &nopResolver{cc: cc}, nil
|
||||||
|
|||||||
Reference in New Issue
Block a user