Skip to content

link-duan/kubedialer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

KubeDialer

Connect to service in K8s directly without port-forward

Usage

// 1. init client, this function reads credentials from your ~/.kube/config
dialer, _ := kubedialer.New()
// 2. just dial any service
conn, _ := dialer.DialService(ctx, "svc-xx.default")
// ...

Example

gRPC Client

package main

import (
	"context"
	"net"

	"github.com/link-duan/kubedialer"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
)

func main() {
	dialer, err := kubedialer.New()
	if err != nil {
		panic(err)
	}
	_, err = grpc.NewClient(
		"passthrough:svc-user:8000",
		grpc.WithContextDialer(dialer.DialService),
		grpc.WithTransportCredentials(insecure.NewCredentials()),
	)
	if err != nil {
		panic(err)
	}
}

HTTP Client

package main

import (
	"context"
	"fmt"
	"io"
	"net"
	"net/http"

	"github.com/link-duan/kubedialer"
)

func main() {
	dialer, err := kubedialer.New()
	if err != nil {
		panic(err)
	}
	client := http.Client{
		Transport: &http.Transport{
			DialContext: func(ctx context.Context, network string, addr string) (net.Conn, error) {
				return dialer.DialService(ctx, addr)
			}},
	}
	req, _ := http.NewRequest("GET", "http://svc-user", nil)
	res, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	content, err := io.ReadAll(res.Body)
	if err != nil {
		panic(err)
	}
	fmt.Printf("%s\n", string(content))
}

About

Connect to service in K8S directly from local without port-forward

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages