-
-
Notifications
You must be signed in to change notification settings - Fork 10
/
handler_k8s_gateway.go
48 lines (41 loc) · 1.08 KB
/
handler_k8s_gateway.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package dns
import (
"context"
"beryju.io/gravity/pkg/roles/dns/utils"
"github.com/miekg/dns"
k8s_gateway "github.com/ori-edge/k8s_gateway"
"go.uber.org/zap"
)
const K8sGatewayType = "k8s_gateway"
type K8sGateway struct {
c map[string]string
log *zap.Logger
gw k8s_gateway.Gateway
}
func NewK8sGateway(z *Zone, rawConfig map[string]string) *K8sGateway {
k8gw := &K8sGateway{
c: rawConfig,
gw: k8s_gateway.Gateway{
Zones: []string{z.Name},
},
}
k8gw.log = z.log.With(zap.String("handler", k8gw.Identifier()))
k8gw.gw.RunKubeController(context.Background())
k8gw.gw.ExternalAddrFunc = k8gw.gw.SelfAddress
return k8gw
}
func (k8gw *K8sGateway) Identifier() string {
return K8sGatewayType
}
func (k8gw *K8sGateway) Handle(w *utils.FakeDNSWriter, r *utils.DNSRequest) *dns.Msg {
if !k8gw.gw.Controller.HasSynced() {
k8gw.log.Info("K8s Gateway not synced yet, falling through to next handler")
return nil
}
k8gw.gw.ServeDNS(r.Context(), w, r.Msg)
// fall to next handler when no record is found
if w.Msg().Rcode == dns.RcodeNameError {
return nil
}
return w.Msg()
}