Skip to content

Commit 1dc5a98

Browse files
authored
Merge pull request #93 from ferryproxy/fix/get-tunnel-address
Fix get tunnel address
2 parents d923f85 + 0b0b03b commit 1dc5a98

2 files changed

Lines changed: 52 additions & 14 deletions

File tree

pkg/ferryctl/cmd/ferryctl/control_plane/init/init.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,21 @@ func NewCommand(logger log.Logger) *cobra.Command {
4848
}
4949

5050
kctl := kubectl.NewKubectl()
51-
var err error
52-
if controlPlaneTunnelAddress == vars.AutoPlaceholders {
53-
controlPlaneTunnelAddress, err = kctl.GetTunnelAddress(cmd.Context())
54-
if err != nil {
55-
return err
56-
}
57-
}
58-
59-
err = data_plane.ClusterInit(cmd.Context(), data_plane.ClusterInitConfig{
51+
err := data_plane.ClusterInit(cmd.Context(), data_plane.ClusterInitConfig{
6052
FerryTunnelImage: vars.FerryTunnelImage,
6153
TunnelServiceType: tunnelServiceType,
6254
})
6355
if err != nil {
6456
return err
6557
}
6658

59+
if controlPlaneTunnelAddress == vars.AutoPlaceholders {
60+
controlPlaneTunnelAddress, err = kctl.GetTunnelAddress(cmd.Context())
61+
if err != nil {
62+
return err
63+
}
64+
}
65+
6766
err = control_plane.ClusterInit(cmd.Context(), control_plane.ClusterInitConfig{
6867
ControlPlaneName: vars.ControlPlaneName,
6968
ControlPlaneReachable: controlPlaneReachable,

pkg/ferryctl/kubectl/kubectl.go

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434

3535
"github.com/ferryproxy/ferry/pkg/consts"
3636
"github.com/ferryproxy/ferry/pkg/ferryctl/vars"
37+
corev1 "k8s.io/api/core/v1"
3738
apimachineryversion "k8s.io/apimachinery/pkg/version"
3839
"sigs.k8s.io/yaml"
3940
)
@@ -202,17 +203,55 @@ func (c *Kubectl) GetApiserverAddress(ctx context.Context) (string, error) {
202203
}
203204

204205
func (c *Kubectl) GetTunnelAddress(ctx context.Context) (string, error) {
205-
address, err := c.GetApiserverAddress(ctx)
206+
out, err := commandRun(ctx, "kubectl", "--kubeconfig="+vars.KubeconfigPath, "get", "svc", "-n", consts.FerryTunnelNamespace, "gateway-ferry-tunnel", "-o", "yaml")
206207
if err != nil {
207208
return "", err
208209
}
209-
210-
host, _, err := net.SplitHostPort(address)
210+
take := corev1.Service{}
211+
err = yaml.Unmarshal(out, &take)
211212
if err != nil {
212-
log.Printf("Failed to parse host: %v", err)
213213
return "", err
214214
}
215-
return host + ":31087", nil
215+
216+
address := ""
217+
port := ""
218+
219+
if take.Spec.Type == corev1.ServiceTypeLoadBalancer {
220+
ingress := take.Status.LoadBalancer.Ingress
221+
if len(ingress) != 0 {
222+
if address == "" && ingress[0].IP != "" {
223+
address = ingress[0].IP
224+
}
225+
if address == "" && ingress[0].Hostname != "" {
226+
address = ingress[0].Hostname
227+
}
228+
if port == "" && len(ingress[0].Ports) != 0 {
229+
port = strconv.FormatInt(int64(ingress[0].Ports[0].Port), 10)
230+
}
231+
}
232+
}
233+
234+
if port == "" && len(take.Spec.Ports) != 0 {
235+
port = strconv.FormatInt(int64(take.Spec.Ports[0].Port), 10)
236+
}
237+
238+
if port == "" {
239+
port = "31087"
240+
}
241+
242+
if address == "" {
243+
host, err := c.GetApiserverAddress(ctx)
244+
if err != nil {
245+
return "", err
246+
}
247+
address, _, err = net.SplitHostPort(host)
248+
if err != nil {
249+
log.Printf("Failed to parse host: %v", err)
250+
return "", err
251+
}
252+
}
253+
254+
return address + ":" + port, nil
216255
}
217256

218257
func (c *Kubectl) GetUnusedPort(ctx context.Context) (string, error) {

0 commit comments

Comments
 (0)