Skip to content

Commit

Permalink
Merge pull request #14245 from te-simonren/pr-add-bind-address-for-tu…
Browse files Browse the repository at this point in the history
…nnel

add bind address option for cmd tunnel
  • Loading branch information
spowelljr authored Jun 3, 2022
2 parents 267f021 + 2813810 commit 5fb961c
Show file tree
Hide file tree
Showing 13 changed files with 39 additions and 12 deletions.
4 changes: 3 additions & 1 deletion cmd/minikube/cmd/tunnel.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import (
)

var cleanup bool
var bindAddress string

// tunnelCmd represents the tunnel command
var tunnelCmd = &cobra.Command{
Expand Down Expand Up @@ -93,7 +94,7 @@ var tunnelCmd = &cobra.Command{
sshKey := filepath.Join(localpath.MiniPath(), "machines", cname, "id_rsa")

outputTunnelStarted()
kicSSHTunnel := kic.NewSSHTunnel(ctx, sshPort, sshKey, clientset.CoreV1(), clientset.NetworkingV1())
kicSSHTunnel := kic.NewSSHTunnel(ctx, sshPort, sshKey, bindAddress, clientset.CoreV1(), clientset.NetworkingV1())
err = kicSSHTunnel.Start()
if err != nil {
exit.Error(reason.SvcTunnelStart, "error starting tunnel", err)
Expand All @@ -119,4 +120,5 @@ func outputTunnelStarted() {

func init() {
tunnelCmd.Flags().BoolVarP(&cleanup, "cleanup", "c", true, "call with cleanup=true to remove old tunnels")
tunnelCmd.Flags().StringVar(&bindAddress, "bind-address", "", "set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces")
}
27 changes: 20 additions & 7 deletions pkg/minikube/tunnel/kic/ssh_conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ type sshConn struct {
suppressStdOut bool
}

func createSSHConn(name, sshPort, sshKey string, resourcePorts []int32, resourceIP string, resourceName string) *sshConn {
func createSSHConn(name, sshPort, sshKey, bindAddress string, resourcePorts []int32, resourceIP string, resourceName string) *sshConn {
// extract sshArgs
sshArgs := []string{
// TODO: document the options here
Expand All @@ -53,12 +53,25 @@ func createSSHConn(name, sshPort, sshKey string, resourcePorts []int32, resource
askForSudo := false
var privilegedPorts []int32
for _, port := range resourcePorts {
arg := fmt.Sprintf(
"-L %d:%s:%d",
port,
resourceIP,
port,
)
var arg string
if bindAddress == "" || bindAddress == "*" {
// bind on all interfaces
arg = fmt.Sprintf(
"-L %d:%s:%d",
port,
resourceIP,
port,
)
} else {
// bind on specify address only
arg = fmt.Sprintf(
"-L %s:%d:%s:%d",
bindAddress,
port,
resourceIP,
port,
)
}

// check if any port is privileged
if port < 1024 {
Expand Down
8 changes: 5 additions & 3 deletions pkg/minikube/tunnel/kic/ssh_tunnel.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ type SSHTunnel struct {
ctx context.Context
sshPort string
sshKey string
bindAddress string
v1Core typed_core.CoreV1Interface
v1Networking typed_networking.NetworkingV1Interface
LoadBalancerEmulator tunnel.LoadBalancerEmulator
Expand All @@ -45,11 +46,12 @@ type SSHTunnel struct {
}

// NewSSHTunnel ...
func NewSSHTunnel(ctx context.Context, sshPort, sshKey string, v1Core typed_core.CoreV1Interface, v1Networking typed_networking.NetworkingV1Interface) *SSHTunnel {
func NewSSHTunnel(ctx context.Context, sshPort, sshKey, bindAddress string, v1Core typed_core.CoreV1Interface, v1Networking typed_networking.NetworkingV1Interface) *SSHTunnel {
return &SSHTunnel{
ctx: ctx,
sshPort: sshPort,
sshKey: sshKey,
bindAddress: bindAddress,
v1Core: v1Core,
LoadBalancerEmulator: tunnel.NewLoadBalancerEmulator(v1Core),
v1Networking: v1Networking,
Expand Down Expand Up @@ -124,7 +126,7 @@ func (t *SSHTunnel) startConnection(svc v1.Service) {
}

// create new ssh conn
newSSHConn := createSSHConn(uniqName, t.sshPort, t.sshKey, resourcePorts, svc.Spec.ClusterIP, svc.Name)
newSSHConn := createSSHConn(uniqName, t.sshPort, t.sshKey, t.bindAddress, resourcePorts, svc.Spec.ClusterIP, svc.Name)
t.conns[newSSHConn.name] = newSSHConn

go func() {
Expand Down Expand Up @@ -154,7 +156,7 @@ func (t *SSHTunnel) startConnectionIngress(ingress v1_networking.Ingress) {
resourceIP := "127.0.0.1"

// create new ssh conn
newSSHConn := createSSHConn(uniqName, t.sshPort, t.sshKey, resourcePorts, resourceIP, ingress.Name)
newSSHConn := createSSHConn(uniqName, t.sshPort, t.sshKey, t.bindAddress, resourcePorts, resourceIP, ingress.Name)
t.conns[newSSHConn.name] = newSSHConn

go func() {
Expand Down
3 changes: 2 additions & 1 deletion site/content/en/docs/commands/tunnel.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ minikube tunnel [flags]
### Options

```
-c, --cleanup call with cleanup=true to remove old tunnels (default true)
--bind-address string set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces
-c, --cleanup call with cleanup=true to remove old tunnels (default true)
```

### Options inherited from parent commands
Expand Down
1 change: 1 addition & 0 deletions translations/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -981,6 +981,7 @@
"retrieving node": "Ermittele Node",
"scheduled stop is not supported on the none driver, skipping scheduling": "Das geplante Stoppen wird von none Treiber nicht unterstützt, überspringe Planung",
"service {{.namespace_name}}/{{.service_name}} has no node port": "Service {{.namespace_name}}/{{.service_name}} hat keinen Node Port",
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
"stat failed": "state Fehler",
"status json failure": "Status json Fehler",
"status text failure": "Status text Fehler",
Expand Down
1 change: 1 addition & 0 deletions translations/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -977,6 +977,7 @@
"retrieving node": "",
"scheduled stop is not supported on the none driver, skipping scheduling": "",
"service {{.namespace_name}}/{{.service_name}} has no node port": "",
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
"stat failed": "",
"status json failure": "",
"status text failure": "",
Expand Down
1 change: 1 addition & 0 deletions translations/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -946,6 +946,7 @@
"retrieving node": "récupération du nœud",
"scheduled stop is not supported on the none driver, skipping scheduling": "l'arrêt programmé n'est pas pris en charge sur le pilote none, programmation non prise en compte",
"service {{.namespace_name}}/{{.service_name}} has no node port": "le service {{.namespace_name}}/{{.service_name}} n'a pas de port de nœud",
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
"stat failed": "stat en échec",
"status json failure": "état du JSON en échec",
"status text failure": "état du texte en échec",
Expand Down
1 change: 1 addition & 0 deletions translations/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -998,6 +998,7 @@
"saving node": "ノードを保存しています",
"scheduled stop is not supported on the none driver, skipping scheduling": "none ドライバーでは予定停止がサポートされていません (予約をスキップします)",
"service {{.namespace_name}}/{{.service_name}} has no node port": "サービス {{.namespace_name}}/{{.service_name}} は NodePort がありません",
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
"startup failed": "起動に失敗しました",
"stat failed": "stat に失敗しました",
"status json failure": "status json に失敗しました",
Expand Down
1 change: 1 addition & 0 deletions translations/ko.json
Original file line number Diff line number Diff line change
Expand Up @@ -987,6 +987,7 @@
"retrieving node": "",
"scheduled stop is not supported on the none driver, skipping scheduling": "",
"service {{.namespace_name}}/{{.service_name}} has no node port": "",
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
"stat failed": "",
"status json failure": "",
"status text failure": "",
Expand Down
1 change: 1 addition & 0 deletions translations/pl.json
Original file line number Diff line number Diff line change
Expand Up @@ -990,6 +990,7 @@
"retrieving node": "przywracanie węzła",
"scheduled stop is not supported on the none driver, skipping scheduling": "",
"service {{.namespace_name}}/{{.service_name}} has no node port": "",
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
"stat failed": "wykonanie komendy stat nie powiodło się",
"status json failure": "",
"status text failure": "",
Expand Down
1 change: 1 addition & 0 deletions translations/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -911,6 +911,7 @@
"retrieving node": "",
"scheduled stop is not supported on the none driver, skipping scheduling": "",
"service {{.namespace_name}}/{{.service_name}} has no node port": "",
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
"stat failed": "",
"status json failure": "",
"status text failure": "",
Expand Down
1 change: 1 addition & 0 deletions translations/strings.txt
Original file line number Diff line number Diff line change
Expand Up @@ -911,6 +911,7 @@
"retrieving node": "",
"scheduled stop is not supported on the none driver, skipping scheduling": "",
"service {{.namespace_name}}/{{.service_name}} has no node port": "",
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
"stat failed": "",
"status json failure": "",
"status text failure": "",
Expand Down
1 change: 1 addition & 0 deletions translations/zh-CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -1100,6 +1100,7 @@
"retrieving node": "",
"scheduled stop is not supported on the none driver, skipping scheduling": "",
"service {{.namespace_name}}/{{.service_name}} has no node port": "",
"set tunnel bind address, empty or '*' indicates the tunnel should be available for all interfaces": "",
"stat failed": "",
"status json failure": "",
"status text failure": "",
Expand Down

0 comments on commit 5fb961c

Please sign in to comment.