Kubernetes Router (#2036)
This commit is contained in:
113
router/kubernetes/kubernetes.go
Normal file
113
router/kubernetes/kubernetes.go
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
// Package kubernetes is a kubernetes router which uses the service name and network to route
|
||||||
|
package kubernetes
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/micro/go-micro/v3/router"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewRouter returns an initialized kubernetes router
|
||||||
|
func NewRouter(opts ...router.Option) router.Router {
|
||||||
|
options := router.DefaultOptions()
|
||||||
|
for _, o := range opts {
|
||||||
|
o(&options)
|
||||||
|
}
|
||||||
|
return &kubernetes{options}
|
||||||
|
}
|
||||||
|
|
||||||
|
type kubernetes struct {
|
||||||
|
options router.Options
|
||||||
|
}
|
||||||
|
|
||||||
|
func (k *kubernetes) Init(opts ...router.Option) error {
|
||||||
|
for _, o := range opts {
|
||||||
|
o(&k.options)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (k *kubernetes) Options() router.Options {
|
||||||
|
return k.options
|
||||||
|
}
|
||||||
|
|
||||||
|
func (k *kubernetes) Table() router.Table {
|
||||||
|
return new(table)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (k *kubernetes) Lookup(service string, opts ...router.LookupOption) ([]router.Route, error) {
|
||||||
|
options := router.NewLookup(opts...)
|
||||||
|
if len(options.Network) == 0 {
|
||||||
|
options.Network = "micro"
|
||||||
|
}
|
||||||
|
|
||||||
|
address := fmt.Sprintf("%v.%v.svc.cluster.local:8080", service, options.Network)
|
||||||
|
|
||||||
|
return []router.Route{
|
||||||
|
router.Route{
|
||||||
|
Service: service,
|
||||||
|
Address: address,
|
||||||
|
Gateway: options.Gateway,
|
||||||
|
Network: options.Network,
|
||||||
|
Router: options.Router,
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Watch will return a noop watcher
|
||||||
|
func (k *kubernetes) Watch(opts ...router.WatchOption) (router.Watcher, error) {
|
||||||
|
return &watcher{
|
||||||
|
events: make(chan *router.Event),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (k *kubernetes) Close() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (k *kubernetes) String() string {
|
||||||
|
return "kubernetes"
|
||||||
|
}
|
||||||
|
|
||||||
|
// watcher is a noop implementation
|
||||||
|
type watcher struct {
|
||||||
|
events chan *router.Event
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next is a blocking call that returns watch result
|
||||||
|
func (w *watcher) Next() (*router.Event, error) {
|
||||||
|
e := <-w.events
|
||||||
|
return e, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Chan returns event channel
|
||||||
|
func (w *watcher) Chan() (<-chan *router.Event, error) {
|
||||||
|
return w.events, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stop stops watcher
|
||||||
|
func (w *watcher) Stop() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
type table struct{}
|
||||||
|
|
||||||
|
// Create new route in the routing table
|
||||||
|
func (t *table) Create(router.Route) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete existing route from the routing table
|
||||||
|
func (t *table) Delete(router.Route) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update route in the routing table
|
||||||
|
func (t *table) Update(router.Route) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read is for querying the table
|
||||||
|
func (t *table) Read(...router.ReadOption) ([]router.Route, error) {
|
||||||
|
return []router.Route{}, nil
|
||||||
|
}
|
Reference in New Issue
Block a user