@@ -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
204205func (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
218257func (c * Kubectl ) GetUnusedPort (ctx context.Context ) (string , error ) {
0 commit comments