@@ -80,7 +80,7 @@ func (m *Manager) configureKubernetesEndpoint(ctx context.Context, name string,
8080 state .KubernetesLastError = err .Error ()
8181 return state
8282 }
83- pid , err := startKubernetesRelay (ctx , name , vmDir , metadata , state )
83+ pid , err := startKubernetesRelay (ctx , name , vmDir , metadata , state , kindMetadata )
8484 if err != nil {
8585 state .KubernetesLastError = err .Error ()
8686 return state
@@ -119,39 +119,18 @@ func allocateKubernetesPort(preferred int) (int, error) {
119119 return listener .Addr ().(* net.TCPAddr ).Port , nil
120120}
121121
122- func startKubernetesRelay (ctx context.Context , name string , vmDir string , metadata spindvm.Metadata , state spindvm.State ) (int , error ) {
123- return startTCPRelay (ctx , name , vmDir , metadata , state , state .KubernetesRelayLogPath , state .KubernetesAPIServerPort , state .KubernetesAPIServerTargetPort , "Kubernetes" )
122+ func startKubernetesRelay (ctx context.Context , name string , vmDir string , metadata spindvm.Metadata , state spindvm.State , kindMetadata spindkind. Metadata ) (int , error ) {
123+ return startTCPRelay (ctx , name , vmDir , metadata , state , state .KubernetesRelayLogPath , state .KubernetesAPIServerPort , state .KubernetesAPIServerTargetPort , "Kubernetes" , kindMetadata . Distribution == spindkind . DistributionK3d )
124124}
125125
126126func startRegistryRelay (ctx context.Context , name string , vmDir string , metadata spindvm.Metadata , state spindvm.State ) (int , error ) {
127- return startTCPRelay (ctx , name , vmDir , metadata , state , state .RegistryRelayLogPath , state .RegistryPort , state .RegistryTargetPort , "registry" )
127+ return startTCPRelay (ctx , name , vmDir , metadata , state , state .RegistryRelayLogPath , state .RegistryPort , state .RegistryTargetPort , "registry" , true )
128128}
129129
130- func startTCPRelay (ctx context.Context , name string , vmDir string , metadata spindvm.Metadata , state spindvm.State , logPath string , listenPort int , targetPort int , service string ) (int , error ) {
131- args := []string {
132- "kubernetes-relay" ,
133- name ,
134- "--listen-port" , strconv .Itoa (listenPort ),
135- "--target-port" , strconv .Itoa (targetPort ),
136- "--guest-port" , fmt .Sprintf ("%d" , state .DockerTCPForwardGuestPort ),
137- }
138- switch metadata .Backend {
139- case BackendVirtualizationFramework :
140- if state .ExecSocketPath == "" {
141- return 0 , errors .New ("exec socket path is missing" )
142- }
143- args = append (args ,
144- "--ssh-socket" , state .ExecSocketPath ,
145- "--ssh-key" , filepath .Join (vmDir , vmSSHPrivateKeyName ),
146- "--ssh-user" , metadata .ExecUser ,
147- )
148- case BackendCloudHypervisor :
149- if state .CloudHypervisorVsockSocketPath == "" {
150- return 0 , errors .New ("Cloud Hypervisor vsock socket path is missing" )
151- }
152- args = append (args , "--vsock" , state .CloudHypervisorVsockSocketPath )
153- default :
154- return 0 , fmt .Errorf ("unsupported backend %q" , metadata .Backend )
130+ func startTCPRelay (ctx context.Context , name string , vmDir string , metadata spindvm.Metadata , state spindvm.State , logPath string , listenPort int , targetPort int , service string , preferGuestIP bool ) (int , error ) {
131+ args , err := tcpRelayArgs (name , vmDir , metadata , state , listenPort , targetPort , preferGuestIP )
132+ if err != nil {
133+ return 0 , err
155134 }
156135 executable , err := os .Executable ()
157136 if err != nil {
@@ -177,6 +156,38 @@ func startTCPRelay(ctx context.Context, name string, vmDir string, metadata spin
177156 return pid , nil
178157}
179158
159+ func tcpRelayArgs (name string , vmDir string , metadata spindvm.Metadata , state spindvm.State , listenPort int , targetPort int , preferGuestIP bool ) ([]string , error ) {
160+ args := []string {
161+ "kubernetes-relay" ,
162+ name ,
163+ "--listen-port" , strconv .Itoa (listenPort ),
164+ "--target-port" , strconv .Itoa (targetPort ),
165+ "--guest-port" , fmt .Sprintf ("%d" , state .DockerTCPForwardGuestPort ),
166+ }
167+ switch metadata .Backend {
168+ case BackendVirtualizationFramework :
169+ if preferGuestIP && state .DockerGuestIPAddress != "" {
170+ return append (args , "--guest-ip" , state .DockerGuestIPAddress ), nil
171+ }
172+ if state .ExecSocketPath == "" {
173+ return nil , errors .New ("exec socket path is missing" )
174+ }
175+ args = append (args ,
176+ "--ssh-socket" , state .ExecSocketPath ,
177+ "--ssh-key" , filepath .Join (vmDir , vmSSHPrivateKeyName ),
178+ "--ssh-user" , metadata .ExecUser ,
179+ )
180+ case BackendCloudHypervisor :
181+ if state .CloudHypervisorVsockSocketPath == "" {
182+ return nil , errors .New ("Cloud Hypervisor vsock socket path is missing" )
183+ }
184+ args = append (args , "--vsock" , state .CloudHypervisorVsockSocketPath )
185+ default :
186+ return nil , fmt .Errorf ("unsupported backend %q" , metadata .Backend )
187+ }
188+ return args , nil
189+ }
190+
180191func kubectlCheckGeneratedKubeconfig (ctx context.Context , kubeconfigPath string ) error {
181192 cmd := exec .CommandContext (ctx , "kubectl" , "--kubeconfig" , kubeconfigPath , "get" , "nodes" )
182193 output , err := cmd .CombinedOutput ()
0 commit comments