Skip to content

A forwarder for forwarding kubernetes cluster service and pod programmatically.

License

Notifications You must be signed in to change notification settings

mhkarimi1383/forwarder

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Forwarder

Go Reference Go module Version GoReportCard GitHub tag

A forwarder for forwarding kubernetes cluster service and pod programmatically.

Installation

go get github.com/mhkarimi1383/forwarder

Usage

forwarding by kubeconfig path

package main

import (
    "github.com/mhkarimi1383/forwarder"
)

options := []*forwarder.Option{
    {
        // the local port for forwarding
        LocalPort: 	8080,
        // the k8s pod port
        RemotePort: 80,
        // the forwarding service name
        ServiceName: "my-nginx-svc",
        // the k8s source string, eg: svc/my-nginx-svc po/my-nginx-666
        // the Source field will be parsed and override ServiceName or RemotePort field
        Source: "svc/my-nginx-66b6c48dd5-ttdb2",
        // namespace default is "default"
        Namespace: "default"
    },
    {	
        // if local port isn't provided, forwarder will generate a random port number
        // LocalPort: 8081,
        // 
        // if target port isn't provided, forwarder find the first container port of the pod or service
        // RemotePort: 80,
        Source: "po/my-nginx-66b6c48dd5-ttdb2",
    },
}

// it's to create a forwarder, and you need provide a path of kubeconfig
// the path of kubeconfig, default is "~/.kube/config"
ret, err := forwarder.WithForwarders(context.Background(), options, "./kubecfg")
if err != nil {
    panic(err)
}
// remember to close the forwarding
defer ret.Close()
// wait forwarding ready
// the remote and local ports are listed
ports, err := ret.Ready()
if err != nil {
    panic(err)
}
// ...

// if you want to block the goroutine and listen IOStreams close signal, you can do as following:
ret.Wait()

forwarding embed kubeconfig

//go:embed kubeconfig
var kubeconfigBytes []byte

func main() {
	options := []*forwarder.Option{
		{
			// LocalPort: 8080,
			// RemotePort:  80,
			ServiceName: "my-nginx-svc",
		},
	}
	// use kubeconfig bytes to config forward
	ret, err := forwarder.WithForwardersEmbedConfig(context.Background(), options, kubeconfigBytes)
	if err != nil {
		panic(err)
	}
	// remember to close the forwarding
	defer ret.Close()
	// wait forwarding ready
	// the remote and local ports are listed
	ports, err := ret.Ready()
	if err != nil {
		panic(err)
	}
	fmt.Printf("ports: %+v\n", ports)
	// ...

	// if you want to block the goroutine and listen IOStreams close signal, you can do as following:
	ret.Wait()
}

If you want to learn more about forwarder, you can read example, test cases and source code.

About

A forwarder for forwarding kubernetes cluster service and pod programmatically.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 100.0%