Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

K8s headless svc plugin #150

Open
wants to merge 15 commits into
base: main
Choose a base branch
from
Open

K8s headless svc plugin #150

wants to merge 15 commits into from

Conversation

gsmini
Copy link

@gsmini gsmini commented Nov 7, 2024

I am very honored to use go-micro and to be involved in this project.
when i study go-micro v4 and deploy it with k8s , i found the registry plugin kubernets plugin, it inspired me.

i found the kubernets plugin use client.go to call apiServer which make it not very friendly to use. Coincidentally, I've been studying kubenetes recently, and i found when the Service.ClusterIP is None we can take the Service as a DNS server, so i
try to make this happen in registry.

apiVersion: v1
kind: Service
metadata:
  name: user-svc
  namespace: default
spec:
  clusterIP: None #attention here
  ports:
    - port: 8080
  selector:
    app:  user

  sessionAffinity: ClientIP
  sessionAffinityConfig:
    clientIP:
        timeoutSeconds: 3600

so, this kubernetes-headless-svc is to resolve Service name to get the endpoints ip which are also podIP u call.

root@hecs-410147:~# kubectl get endpoints
NAME                  ENDPOINTS             AGE
frontend-svc          10.32.0.4:8080       100s
user-svc              10.32.0.9:8080        200s

the plugin return 10.32.0.9:8080 to fronted applition to call
it is so easy finish this work ,just use a net package like this:

package main
import (
	"fmt"
	"net"
)

func main() {
	//we just use net.LookupIP to get ip address of www.twitter.com
	ipRecords, err := net.LookupIP("www.twitter.com")
	if err != nil {
		panic(err)
	}
	for _, value := range ipRecords {
		fmt.Println(value.String())
	}
}

you can take a look of README.md to get the detail document about it(https://github.com/gsmini/plugins/tree/k8s-headless-svc/v4/registry/kubernetes-headless-svc) , and i give a example to use this plugin in examples folder.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants