mirror of
https://github.com/kubernetes-sigs/external-dns.git
synced 2025-08-06 17:46:57 +02:00
Add support for multiple gloo namespaces in one External DNS instance
This commit is contained in:
parent
dd61d0f5d8
commit
3d48d66c91
@ -25,7 +25,7 @@ spec:
|
||||
image: registry.k8s.io/external-dns/external-dns:v0.13.2
|
||||
args:
|
||||
- --source=gloo-proxy
|
||||
- --gloo-namespace=custom-gloo-system # gloo system namespace. Omit to use the default (gloo-system)
|
||||
- --gloo-namespaces=custom-gloo-system # comma separated gloo system namespace list. Omit to use the default (gloo-system)
|
||||
- --provider=aws
|
||||
- --registry=txt
|
||||
- --txt-owner-id=my-identifier
|
||||
@ -93,7 +93,7 @@ spec:
|
||||
image: registry.k8s.io/external-dns/external-dns:v0.13.2
|
||||
args:
|
||||
- --source=gloo-proxy
|
||||
- --gloo-namespace=custom-gloo-system # gloo system namespace. Omit to use the default (gloo-system)
|
||||
- --gloo-namespaces=custom-gloo-system # comma separated gloo system namespace list. Omit to use the default (gloo-system)
|
||||
- --provider=aws
|
||||
- --registry=txt
|
||||
- --txt-owner-id=my-identifier
|
||||
|
2
main.go
2
main.go
@ -134,7 +134,7 @@ func main() {
|
||||
CFUsername: cfg.CFUsername,
|
||||
CFPassword: cfg.CFPassword,
|
||||
ContourLoadBalancerService: cfg.ContourLoadBalancerService,
|
||||
GlooNamespace: cfg.GlooNamespace,
|
||||
GlooNamespaces: cfg.GlooNamespaces,
|
||||
SkipperRouteGroupVersion: cfg.SkipperRouteGroupVersion,
|
||||
RequestTimeout: cfg.RequestTimeout,
|
||||
DefaultTargets: cfg.DefaultTargets,
|
||||
|
@ -48,7 +48,7 @@ type Config struct {
|
||||
RequestTimeout time.Duration
|
||||
DefaultTargets []string
|
||||
ContourLoadBalancerService string
|
||||
GlooNamespace string
|
||||
GlooNamespaces string
|
||||
SkipperRouteGroupVersion string
|
||||
Sources []string
|
||||
Namespace string
|
||||
@ -207,7 +207,7 @@ var defaultConfig = &Config{
|
||||
RequestTimeout: time.Second * 30,
|
||||
DefaultTargets: []string{},
|
||||
ContourLoadBalancerService: "heptio-contour/contour",
|
||||
GlooNamespace: "gloo-system",
|
||||
GlooNamespaces: "gloo-system",
|
||||
SkipperRouteGroupVersion: "zalando.org/v1",
|
||||
Sources: nil,
|
||||
Namespace: "",
|
||||
@ -398,7 +398,7 @@ func (cfg *Config) ParseFlags(args []string) error {
|
||||
app.Flag("contour-load-balancer", "The fully-qualified name of the Contour load balancer service. (default: heptio-contour/contour)").Default("heptio-contour/contour").StringVar(&cfg.ContourLoadBalancerService)
|
||||
|
||||
// Flags related to Gloo
|
||||
app.Flag("gloo-namespace", "Gloo namespace. (default: gloo-system)").Default("gloo-system").StringVar(&cfg.GlooNamespace)
|
||||
app.Flag("gloo-namespaces", "Coma separated list of gloo namespaces. (default: gloo-system)").Default("gloo-system").StringVar(&cfg.GlooNamespaces)
|
||||
|
||||
// Flags related to Skipper RouteGroup
|
||||
app.Flag("skipper-routegroup-groupversion", "The resource version for skipper routegroup").Default(source.DefaultRoutegroupVersion).StringVar(&cfg.SkipperRouteGroupVersion)
|
||||
|
@ -36,7 +36,7 @@ var (
|
||||
KubeConfig: "",
|
||||
RequestTimeout: time.Second * 30,
|
||||
ContourLoadBalancerService: "heptio-contour/contour",
|
||||
GlooNamespace: "gloo-system",
|
||||
GlooNamespaces: "gloo-system",
|
||||
SkipperRouteGroupVersion: "zalando.org/v1",
|
||||
Sources: []string{"service"},
|
||||
Namespace: "",
|
||||
@ -136,7 +136,7 @@ var (
|
||||
KubeConfig: "/some/path",
|
||||
RequestTimeout: time.Second * 77,
|
||||
ContourLoadBalancerService: "heptio-contour-other/contour-other",
|
||||
GlooNamespace: "gloo-not-system",
|
||||
GlooNamespaces: "gloo-not-system,gloo-second-system",
|
||||
SkipperRouteGroupVersion: "zalando.org/v2",
|
||||
Sources: []string{"service", "ingress", "connector"},
|
||||
Namespace: "namespace",
|
||||
@ -266,7 +266,7 @@ func TestParseFlags(t *testing.T) {
|
||||
"--kubeconfig=/some/path",
|
||||
"--request-timeout=77s",
|
||||
"--contour-load-balancer=heptio-contour-other/contour-other",
|
||||
"--gloo-namespace=gloo-not-system",
|
||||
"--gloo-namespaces=gloo-not-system,gloo-second-system",
|
||||
"--skipper-routegroup-groupversion=zalando.org/v2",
|
||||
"--source=service",
|
||||
"--source=ingress",
|
||||
@ -391,7 +391,7 @@ func TestParseFlags(t *testing.T) {
|
||||
"EXTERNAL_DNS_KUBECONFIG": "/some/path",
|
||||
"EXTERNAL_DNS_REQUEST_TIMEOUT": "77s",
|
||||
"EXTERNAL_DNS_CONTOUR_LOAD_BALANCER": "heptio-contour-other/contour-other",
|
||||
"EXTERNAL_DNS_GLOO_NAMESPACE": "gloo-not-system",
|
||||
"EXTERNAL_DNS_GLOO_NAMESPACES": "gloo-not-system,gloo-second-system",
|
||||
"EXTERNAL_DNS_SKIPPER_ROUTEGROUP_GROUPVERSION": "zalando.org/v2",
|
||||
"EXTERNAL_DNS_SOURCE": "service\ningress\nconnector",
|
||||
"EXTERNAL_DNS_NAMESPACE": "namespace",
|
||||
|
@ -81,15 +81,16 @@ type proxyVirtualHostMetadataSource struct {
|
||||
type glooSource struct {
|
||||
dynamicKubeClient dynamic.Interface
|
||||
kubeClient kubernetes.Interface
|
||||
glooNamespace string
|
||||
glooNamespaces []string
|
||||
}
|
||||
|
||||
// NewGlooSource creates a new glooSource with the given config
|
||||
func NewGlooSource(dynamicKubeClient dynamic.Interface, kubeClient kubernetes.Interface, glooNamespace string) (Source, error) {
|
||||
func NewGlooSource(dynamicKubeClient dynamic.Interface, kubeClient kubernetes.Interface, glooNamespaces string) (Source, error) {
|
||||
|
||||
return &glooSource{
|
||||
dynamicKubeClient,
|
||||
kubeClient,
|
||||
glooNamespace,
|
||||
strings.Split(glooNamespaces, ","),
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -100,7 +101,8 @@ func (gs *glooSource) AddEventHandler(ctx context.Context, handler func()) {
|
||||
func (gs *glooSource) Endpoints(ctx context.Context) ([]*endpoint.Endpoint, error) {
|
||||
endpoints := []*endpoint.Endpoint{}
|
||||
|
||||
proxies, err := gs.dynamicKubeClient.Resource(proxyGVR).Namespace(gs.glooNamespace).List(ctx, metav1.ListOptions{})
|
||||
for _, ns := range gs.glooNamespaces {
|
||||
proxies, err := gs.dynamicKubeClient.Resource(proxyGVR).Namespace(ns).List(ctx, metav1.ListOptions{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -115,7 +117,7 @@ func (gs *glooSource) Endpoints(ctx context.Context) ([]*endpoint.Endpoint, erro
|
||||
return nil, err
|
||||
}
|
||||
log.Debugf("Gloo: Find %s proxy", proxy.Metadata.Name)
|
||||
proxyTargets, err := gs.proxyTargets(ctx, proxy.Metadata.Name)
|
||||
proxyTargets, err := gs.proxyTargets(ctx, proxy.Metadata.Name, ns)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -127,6 +129,8 @@ func (gs *glooSource) Endpoints(ctx context.Context) ([]*endpoint.Endpoint, erro
|
||||
log.Debugf("Gloo[%s]: Generate %d endpoint(s)", proxy.Metadata.Name, len(proxyEndpoints))
|
||||
endpoints = append(endpoints, proxyEndpoints...)
|
||||
}
|
||||
}
|
||||
|
||||
return endpoints, nil
|
||||
}
|
||||
|
||||
@ -168,8 +172,8 @@ func (gs *glooSource) annotationsFromProxySource(ctx context.Context, virtualHos
|
||||
return annotations, nil
|
||||
}
|
||||
|
||||
func (gs *glooSource) proxyTargets(ctx context.Context, name string) (endpoint.Targets, error) {
|
||||
svc, err := gs.kubeClient.CoreV1().Services(gs.glooNamespace).Get(ctx, name, metav1.GetOptions{})
|
||||
func (gs *glooSource) proxyTargets(ctx context.Context, name string, namespace string) (endpoint.Targets, error) {
|
||||
svc, err := gs.kubeClient.CoreV1().Services(namespace).Get(ctx, name, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ type Config struct {
|
||||
CFUsername string
|
||||
CFPassword string
|
||||
ContourLoadBalancerService string
|
||||
GlooNamespace string
|
||||
GlooNamespaces string
|
||||
SkipperRouteGroupVersion string
|
||||
RequestTimeout time.Duration
|
||||
DefaultTargets []string
|
||||
@ -288,7 +288,7 @@ func BuildWithConfig(ctx context.Context, source string, p ClientGenerator, cfg
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return NewGlooSource(dynamicClient, kubernetesClient, cfg.GlooNamespace)
|
||||
return NewGlooSource(dynamicClient, kubernetesClient, cfg.GlooNamespaces)
|
||||
case "openshift-route":
|
||||
ocpClient, err := p.OpenShiftClient()
|
||||
if err != nil {
|
||||
|
Loading…
Reference in New Issue
Block a user