Skip to content

Commit

Permalink
#45 support service name as dns address
Browse files Browse the repository at this point in the history
  • Loading branch information
yunlzheng committed Dec 5, 2019
1 parent f59d5cc commit c9f6230
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 35 deletions.
4 changes: 4 additions & 0 deletions bin/build-shadow
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
TAG=$(echo $TRAVIS_BRANCH | sed "s/\//-/")
TAG=${TAG:-latest}
docker build -t registry.cn-hangzhou.aliyuncs.com/rdc-incubator/kt-connect-shadow:$TAG -f docker/shadow/Dockerfile .
docker push registry.cn-hangzhou.aliyuncs.com/rdc-incubator/kt-connect-shadow:$TAG
7 changes: 5 additions & 2 deletions cmd/proxy/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package main
import (
"os"

"github.com/alibaba/kt-connect/pkg/proxy/server"
"github.com/alibaba/kt-connect/pkg/proxy/daemon"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
Expand All @@ -14,8 +14,11 @@ func init() {
}

func main() {
err := server.Run()
log.Info().Msg("Start kt connect proxy")
srv := daemon.NewDNSServerDefault()
err := srv.ListenAndServe()
if err != nil {
panic(err.Error())
}
log.Info().Msgf("DNS Server Start At 53...\n")
}
1 change: 1 addition & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0
golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
Expand Down
52 changes: 39 additions & 13 deletions pkg/proxy/daemon/dnsserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,12 @@ func getDomain(origin string) string {
namespace = "default"
}

index := strings.Index(domain, ".")

if index+1 == len(domain) {
if !strings.Contains(domain, ".svc.cluster.local.") {
domain = domain + namespace + ".svc.cluster.local."
log.Info().Msgf("*** Use in cluster dns address %s\n", domain)
}
log.Info().Msgf("Format domain %s to %s\n", origin, domain)

log.Info().Msgf("Format domain %s to %s\n", origin, domain)
return domain
}

Expand All @@ -68,18 +66,16 @@ func query(w dns.ResponseWriter, req *dns.Msg) (rr []dns.RR) {
return
}

msg := new(dns.Msg)
msg.RecursionDesired = true

qtype := req.Question[0].Qtype
name := req.Question[0].Name

domain := getDomain(name)

log.Info().Msgf("Received DNS query for %s: \n", domain)

msg := new(dns.Msg)
log.Info().Msgf("Received DNS query for %s: \n", domain)
msg.SetQuestion(domain, qtype)
msg.RecursionDesired = true

rr = exchange(domain, qtype, msg)
rr = exchange(domain, qtype, msg, name)
return
}

Expand All @@ -98,7 +94,7 @@ func getResolvServer() (address string, err error) {
return
}

func exchange(domain string, Qtype uint16, m *dns.Msg) (rr []dns.RR) {
func exchange(domain string, Qtype uint16, m *dns.Msg, name string) (rr []dns.RR) {
address, err := getResolvServer()
if err != nil {
log.Error().Msgf(err.Error())
Expand All @@ -119,6 +115,36 @@ func exchange(domain string, Qtype uint16, m *dns.Msg) (rr []dns.RR) {
return
}

rr = res.Answer
for _, item := range res.Answer {
log.Info().Msgf("response: %s", item.String())
r, err := getAnswer(name, domain, item)
if err != nil {
return
}
rr = append(rr, r)
}

return
}

func getAnswer(name string, inClusterName string, acutal dns.RR) (tmp dns.RR, err error) {
var parts []string
if name != inClusterName {
log.Info().Msgf("origin %s query name is not same %s", inClusterName, name)
parts = append(parts, name)

log.Info().Msgf("origin answer rr to %s", acutal.String())
answer := strings.Split(acutal.String(), "\t")

parts = append(parts, answer[1:]...)
rrStr := strings.Join(parts, " ")
log.Info().Msgf("rewrite rr to %s", rrStr)
tmp, err = dns.NewRR(rrStr)
if err != nil {
return
}
} else {
tmp = acutal
}
return
}
18 changes: 18 additions & 0 deletions pkg/proxy/daemon/dnsserver_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package daemon

import (
"testing"
"github.com/miekg/dns"
)

func TestAnswerRewrite(t *testing.T) {
acutal, _ := dns.NewRR("tomcat.default.svc.cluster.local. 5 IN A 172.21.4.129")
r, err := getAnswer("tomcat.", "tomcat.default.svc.cluster.local.", acutal)
if err != nil {
t.Errorf("error")
return
}
if r.String() != "tomcat. 5 IN A 172.21.4.129" {
t.Errorf("error")
}
}
20 changes: 0 additions & 20 deletions pkg/proxy/server/server.go

This file was deleted.

0 comments on commit c9f6230

Please sign in to comment.