Giter VIP home page Giter VIP logo

route53-kubernetes's Introduction

DEPRECATED

This repo has been officially deprecated in favor of the https://github.com/kubernetes-incubator/external-dns addon. That addon offers a lot more features, better performance, and a compatibility mode for current users of route53-kubernetes. See compatibility mode docs here.

Kubernetes => Route53 Mapping Service

This is a Kubernetes service that polls services (in all namespaces) that are configured with the label dns=route53 and adds the appropriate alias to the domain specified by the annotation domainName=sub.mydomain.io. Multiple domains and top level domains are also supported: domainName=.mydomain.io,sub1.mydomain.io,sub2.mydomain.io

Usage

route53-kubernetes ReplicationController

The following is an example ReplicationController definition for route53-kubernetes:

Create the ReplicationController via kubectl create -f <name_of_route53-kubernetes-rc.yaml>

Note: We don't currently sign our docker images. So, please use our images at your own risk.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: route53-kubernetes
  namespace: kube-system
  labels:
    app: route53-kubernetes
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: route53-kubernetes
    spec:
      containers:
        - image: quay.io/molecule/route53-kubernetes:v1.3.0
          name: route53-kubernetes

This service expects that it's running on a Kubernetes node on AWS and that the IAM profile for that node is set up to allow the following, along with the default permissions needed by Kubernetes:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "route53:ListHostedZonesByName",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "elasticloadbalancing:DescribeLoadBalancers",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "route53:ChangeResourceRecordSets",
            "Resource": "*"
        }
    ]
}

Service Configuration

Given the following Kubernetes service definition:

apiVersion: v1
kind: Service
metadata:
  name: my-app
  labels:
    app: my-app
    role: web
    dns: route53
  annotations:
    domainName: "test.mydomain.com"
spec:
  selector:
    app: my-app
    role: web
  ports:
  - name: web
    port: 80
    protocol: TCP
    targetPort: web
  - name: web-ssl
    port: 443
    protocol: TCP
    targetPort: web-ssl
  type: LoadBalancer

An "A" record for test.mydomain.com will be created as an alias to the ELB that is configured by kubernetes. This assumes that a hosted zone exists in Route53 for mydomain.com. Any record that previously existed for that dns record will be updated.

Alternative setup

This setup shows some alternative ways to configure route53-kubernetes. First, you can specify kubernetes certs manually if you do not have service accounts enabled. Second, access to AWS can be configured through a Shared Credentials File.

apiVersion: v1
kind: ReplicationController
metadata:
  name: route53-kubernetes
  namespace: kube-system
  labels:
    app: route53-kubernetes
spec:
  replicas: 1
  selector:
    app: route53-kubernetes
  template:
    metadata:
      labels:
        app: route53-kubernetes
    spec:
      volumes:
        - name: ssl-cert
          secret:
            secretName: kube-ssl
        - name: aws-creds
          secret:
            secretName: aws-creds
      containers:
        - image: quay.io/molecule/route53-kubernetes:v1.3.0
          name: route53-kubernetes
          volumeMounts:
            - name: ssl-cert
              mountPath: /opt/certs
              readOnly: true
            - name: aws-creds
              mountPath: /opt/creds
              readOnly: true
          env:
            - name: "CA_FILE_PATH"
              value: "/opt/certs/ca.pem"
            - name: "CERT_FILE_PATH"
              value: "/opt/certs/cert.pem"
            - name: "KEY_FILE_PATH"
              value: "/opt/certs/key.pem"
            - name: "AWS_SHARED_CREDENTIALS_FILE"
              value: "/opt/creds/credentials"

Building locally

Install dependencies

We use glide to manage dependencies. To fetch the dependencies to your local vendor/ folder please run:

glide install -v

Build the Image

You may choose to use Docker images for route53-kubernetes on our Quay namespace or to build the binary, docker image, and push the docker image from scratch. See the Makefile for more information on doing this process manually.

route53-kubernetes's People

Contributors

alexdej avatar andromedarabbit avatar hsingh6764 avatar itajaja avatar iterion avatar kichik avatar osxi avatar pastjean avatar timbunce avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

route53-kubernetes's Issues

Add support for Ingress

Would it be within scope of this project to support Ingress resources?

I'd love to use this project but in my setup I have a single LoadBalancer service that needs multiple declared DNS entries pointing to it for use with Ingress -- each of these would be bound to an Ingress resource. Ideally, I'd just annotate the Ingress resource with a targeted LoadBalancer service or something along those lines.

IAM permission troubles

I created an IAM policy like so:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "route53:ListHostedZonesByName",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "elasticloadbalancing:DescribeLoadBalancers",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "route53:ChangeResourceRecordSets",
            "Resource": "*"
        }
    ]
}

and associated it with the same use that was used to create my kubernetes cluster.

However, when starting up the deployment of this application I get errors about IAM permissions:

service_listener.go:145] Couldn't get zone ID: Could not describe load balancer: AccessDenied: User: arn:aws:sts::201248577332:assumed-role/kubernetes-minion/i-704a92de is not authorized to perform: elasticloadbalancing:DescribeLoadBalancers

ca.pem: no such file or directory

Hi,

Following the setup instructions i seem to be stuck with

2016-08-29T11:21:23.334391202Z I0829 11:21:23.334221       1 service_listener.go:28] Route53 Update Service
2016-08-29T11:21:23.334509248Z F0829 11:21:23.334311       1 service_listener.go:54] Couldn't set up tls transport: open /etc/kubernetes/ssl/ca.pem: no such file or directory

Where do i get the cert files from? What are they meant to be for? They don't exist on my master or minion servers?

Use only hostname of FQDN

I just found your project and was very excited to try it out, unfortunately it seems to always use just the domain as its base zone, instead of only using the hostname from the FQDN and using the rest as the zone.
So in my example i have traefik.k8s.int.example.com, the hosted zone being k8s.int.example.com, but it tries to use the zone example.com.

I guess only using the hostname is a safe bet. Otherwise maybe get the hosted zones from Route53 and try to match the record to the zone that contains "the longest part" of the FQDN?

Support TLD

It would be useful to allow TLD assignment so a service can, for example, support github.com and not just www.github.com.

Make project work from outside of AWS

I would like to throw out the idea of making things work from a cluster that resides outside of AWS. This would be useful for organizations that have a multi-cloud setup where all DNS is in Route53.

The technical solution could involve having the AWS credentials as a secret. Load balancers in other services, like Azure, have a fixed IP address rather than a DNS name like AWS, so they would need the appropriate record type in Route53.

Thoughts ?

Optionally include the namespace in the hostname, perhaps via template

Having a single hardcoded hostname causes problems for us.
We want to be able to reuse a single service definition in different namespaces and clusters.
The kubernetes/kubernetes#21397 issue suggests a format for dynamically defining route53 hostnames using the format [service-name]-[namespace]-[hosted-zone].[zone]. That would work for us but is very rigid.

If the domainName annotation supported template fields then we'd be able to express our needs as something like: domainName: "{{.service}}-{{.namespace}}.mydomain.com".

(I think that would be simple to implement using text/template. I'd offer a PR but I've not done any Go programming yet.)

unable to contact the API server

I've been trying to run the service on a kubernetes cluster (v1.2.4) but it seems to be failing:

Looking in the logs I get the following:

I0601 13:37:39.698519       1 service_listener.go:26] Route53 Update Service
I0601 13:37:39.699695       1 service_listener.go:64] Connected to kubernetes @ https://10.0.0.1:443
I0601 13:37:39.699822       1 service_listener.go:93] Starting Service Polling every 30s
F0601 13:37:39.721357       1 service_listener.go:97] Failed to list pods: the server has asked for the client to provide credentials (get services)

So it seems that the service is unable to contact the k8s API server.

Using the same credentials I am able to contact the API server from an external node.

Option to provide only hostname part of FQDN

It would be great to keep the metadata simple and not tied to specific cluster/DNS zone if we could provide only the hostname part of the FQDN, ie for FQDN myapp.k8s-1.5.example.com the hostname part is myapp.

Avoiding details specific to deployment are a good practice which motivated Persistent Volumes and Storage Classes that are considered infrastructure part in Kubernetes where the Persistent Volume Claims are closer to the application.

In a scenario where this would be useful for me is during blue/green upgrades of Kubernetes itself. Let's say if I have a cluster (created using kops) using domain k8s-1.5.example.com and I want to move all my deployments and services over to new cluster under k8s-1.6.example.com. With this feature I wouldn't have to update all service yaml definitions.

invalid memory address or nil pointer dereference

I've been trying to run this as a Kubernetes service for a while now and it keeps failing with the following exception. This happens with both v1.1.0 and v1.1.1.

The node running the container has elasticloadbalancing:DescribeLoadBalancers so I don't think it's permissions related. I was able to run that command manually on the same node with Python.

I0519 01:14:48.143918       1 service_listener.go:26] Route53 Update Service
I0519 01:14:48.145060       1 service_listener.go:64] Connected to kubernetes @ https://10.3.0.1:443
I0519 01:14:48.145168       1 service_listener.go:93] Starting Service Polling every 30s
I0519 01:14:48.243432       1 service_listener.go:100] Found 1 DNS services in all namespaces with selector "dns=route53"
I0519 01:14:48.243521       1 service_listener.go:115] Creating DNS for nginx service: XXXXX-XXXX.us-XXX.elb.amazonaws.com -> XXXX.YYYY.com
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x708590]

goroutine 1 [running]:
github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata.(*EC2Metadata).GetMetadata(0x0, 0x14800c0, 0x19, 0x0, 0x0, 0x0, 0x0)
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go:18 +0x1b0
github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds.requestCredList(0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go:133 +0x74
github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds.(*EC2RoleProvider).Retrieve(0xc820212cc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go:89 +0x8b
github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/credentials.(*ChainProvider).Retrieve(0xc820212cf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go:75 +0x122
github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/credentials.(*Credentials).Get(0xc82020ecc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go:185 +0x121
github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/private/signer/v4.(*signer).sign(0xc820225118, 0x0, 0x0)
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/private/signer/v4/v4.go:182 +0x3c5
github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/private/signer/v4.Sign(0xc82000db80)
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/private/signer/v4/v4.go:155 +0x1fa
github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/request.(*HandlerList).Run(0xc82000dca8, 0xc82000db80)
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go:115 +0x9f
github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/request.(*Request).Sign(0xc82000db80, 0x0, 0x0)
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/request/request.go:212 +0xce
github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/request.(*Request).Send(0xc82000db80, 0x0, 0x0)
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/aws/request/request.go:222 +0x54
github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/service/elb.(*ELB).DescribeLoadBalancers(0xc820024270, 0xc8202e9170, 0xc8202e5400, 0x0, 0x0)
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/vendor/github.com/aws/aws-sdk-go/service/elb/api.go:608 +0x4f
main.hostedZoneId(0xc820024270, 0xc8202ddb80, 0x47, 0x0, 0x0, 0x0, 0x0)
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/service_listener.go:178 +0x1ab
main.main()
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/service_listener.go:121 +0x1f68

goroutine 5 [chan receive]:
github.com/wearemolecule/route53-kubernetes/vendor/github.com/golang/glog.(*loggingT).flushDaemon(0x1b2f360)
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/vendor/github.com/golang/glog/glog.go:879 +0x67
created by github.com/wearemolecule/route53-kubernetes/vendor/github.com/golang/glog.init.1
        /Users/iterion/Development/go/src/github.com/wearemolecule/route53-kubernetes/vendor/github.com/golang/glog/glog.go:410 +0x297

goroutine 17 [IO wait]:
net.runtime_pollWait(0x7f0c43192a28, 0x72, 0xc82000a130)
        /usr/local/Cellar/go/1.5/libexec/src/runtime/netpoll.go:157 +0x60
net.(*pollDesc).Wait(0xc82020b870, 0x72, 0x0, 0x0)
        /usr/local/Cellar/go/1.5/libexec/src/net/fd_poll_runtime.go:73 +0x3a
net.(*pollDesc).WaitRead(0xc82020b870, 0x0, 0x0)
        /usr/local/Cellar/go/1.5/libexec/src/net/fd_poll_runtime.go:78 +0x36
net.(*netFD).Read(0xc82020b810, 0xc8201e4c00, 0x400, 0x400, 0x0, 0x7f0c43186050, 0xc82000a130)
        /usr/local/Cellar/go/1.5/libexec/src/net/fd_unix.go:232 +0x23a
net.(*conn).Read(0xc8200242a0, 0xc8201e4c00, 0x400, 0x400, 0x0, 0x0, 0x0)
        /usr/local/Cellar/go/1.5/libexec/src/net/net.go:172 +0xe4
crypto/tls.(*block).readFromUntil(0xc820213650, 0x7f0c43192ae8, 0xc8200242a0, 0x5, 0x0, 0x0)
        /usr/local/Cellar/go/1.5/libexec/src/crypto/tls/conn.go:455 +0xcc
crypto/tls.(*Conn).readRecord(0xc82000d8c0, 0x15fe417, 0x0, 0x0)
        /usr/local/Cellar/go/1.5/libexec/src/crypto/tls/conn.go:540 +0x2d1
crypto/tls.(*Conn).Read(0xc82000d8c0, 0xc8201d7000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/Cellar/go/1.5/libexec/src/crypto/tls/conn.go:901 +0x167
net/http.noteEOFReader.Read(0x7f0c43192fd8, 0xc82000d8c0, 0xc8201f1918, 0xc8201d7000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        /usr/local/Cellar/go/1.5/libexec/src/net/http/transport.go:1370 +0x67
net/http.(*noteEOFReader).Read(0xc8202e6d20, 0xc8201d7000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
        <autogenerated>:126 +0xd0
bufio.(*Reader).fill(0xc8202e2720)
        /usr/local/Cellar/go/1.5/libexec/src/bufio/bufio.go:97 +0x1e9
bufio.(*Reader).Peek(0xc8202e2720, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0)
        /usr/local/Cellar/go/1.5/libexec/src/bufio/bufio.go:132 +0xcc
net/http.(*persistConn).readLoop(0xc8201f18c0)
        /usr/local/Cellar/go/1.5/libexec/src/net/http/transport.go:876 +0xf7
created by net/http.(*Transport).dialConn
        /usr/local/Cellar/go/1.5/libexec/src/net/http/transport.go:685 +0xc78

goroutine 18 [select]:
net/http.(*persistConn).writeLoop(0xc8201f18c0)
        /usr/local/Cellar/go/1.5/libexec/src/net/http/transport.go:1009 +0x40c
created by net/http.(*Transport).dialConn
        /usr/local/Cellar/go/1.5/libexec/src/net/http/transport.go:686 +0xc9d

As it seems to be related to the AWS SDK, I tried updating the dependencies and rebuilding, but that fails because of kubernetes/kubernetes#25823. Updating to latest Kubernetes errors when building on:

./service_listener.go:55: undefined: "route53-kubernetes/vendor/k8s.io/kubernetes/pkg/client/unversioned".Config

kubernetes documentation

Any chance we could get documentation regarding how to run the route53-kubernetes rc/service? on kubernetes, perhaps a .yml file? thanks

Fails on nested HostedZones

Hi in our organization we have setup different HostedZones for different nested levels of DNS. For example our HostedZones look like this:

HostedZone 1: example.com
HostedZone 2: stage.example.com

Unfortunately when I use route53 to create a DNS record for "kubernetes.stage.example.com" it wrongfully creates the record in the "example.com" HostedZone. As everything that ends with "stage.example.com" is handled by the "stage.example.com" HostedZone, this obviously doesn't work.

Would it be possible to make route53 choose the HostedZone that is most specific?

I suspect that my issue is also what is mentioned in this comment:

// The AWS API may return more than one zone, the first zone should be the relevant one

Support more than one level of DNS records

At my current job we setup route53 service names like this.

funservice.domainname.com -> (ALIAS/A) us-east-1-clustername-funservice.domainname.com
us-east-1-clustername-funservice.domainname.com -> (ALIAS/A)

So an service may have these names at a level up from each of the cluster specific ELB's.
funservice.domainname.com -> (ALIAS/A) us-east-1-a-funservice.domainname.com
funservice.domainname.com -> (ALIAS/A) us-east-1-b-funservice.domainname.com
funservice.domainname.com -> (ALIAS/A) us-west-2-a-funservice.domainname.com

I was thinking an optional annotation like 'domainNameParent' would allow us to have the cluster specific ELB get setup as well as the parent name that we expose to our users.

panic: ./route53-kubernetes flag redefined: log_dir

Caveat: I'm new to golang so entirely possible I've making a noob mistake here but two hours into a small patch and I still can't seem to be able to get a working binary for this project. Any help/guidance would be appreciated!

Build steps (ubuntu 14.04):

  1. glide install
  2. make build

Runtime error:

./route53-kubernetes flag redefined: log_dir
panic: ./route53-kubernetes flag redefined: log_dir

goroutine 1 [running]:
panic(0x141dd00, 0xc82000b750)
    /usr/lib/go/src/runtime/panic.go:464 +0x3e6
flag.(*FlagSet).Var(0xc8200160c0, 0x7f3538da56a0, 0xc82000b700, 0x19d0000, 0x7, 0x1b76fc0, 0x2f)
    /usr/lib/go/src/flag/flag.go:776 +0x454
flag.(*FlagSet).StringVar(0xc8200160c0, 0xc82000b700, 0x19d0000, 0x7, 0x0, 0x0, 0x1b76fc0, 0x2f)
    /usr/lib/go/src/flag/flag.go:679 +0xc7
flag.(*FlagSet).String(0xc8200160c0, 0x19d0000, 0x7, 0x0, 0x0, 0x1b76fc0, 0x2f, 0xc82000b6f0)
    /usr/lib/go/src/flag/flag.go:692 +0x83
flag.String(0x19d0000, 0x7, 0x0, 0x0, 0x1b76fc0, 0x2f, 0x7f3538da5918)
    /usr/lib/go/src/flag/flag.go:699 +0x5f
route53-kubernetes/vendor/k8s.io/kubernetes/vendor/github.com/golang/glog.init()
    /home/ubuntu/go/src/route53-kubernetes/vendor/k8s.io/kubernetes/vendor/github.com/golang/glog/glog_file.go:41 +0x13e
route53-kubernetes/vendor/k8s.io/kubernetes/pkg/labels.init()
    /home/ubuntu/go/src/route53-kubernetes/vendor/k8s.io/kubernetes/pkg/labels/selector.go:808 +0x5b
route53-kubernetes/vendor/k8s.io/kubernetes/pkg/api/unversioned.init()
    /home/ubuntu/go/src/route53-kubernetes/vendor/k8s.io/kubernetes/pkg/api/unversioned/well_known_labels.go:30 +0x6f
route53-kubernetes/vendor/k8s.io/kubernetes/pkg/api.init()
    /home/ubuntu/go/src/route53-kubernetes/vendor/k8s.io/kubernetes/pkg/api/types.go:2884 +0x64
main.init()
    /home/ubuntu/go/src/route53-kubernetes/service_listener.go:252 +0x80

Seems like a conflict with vendored deps, so I tried the following:

  1. glide install -v
  2. make build

This time I get a build error:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -o route53-kubernetes .
# route53-kubernetes/vendor/golang.org/x/oauth2/google
vendor/golang.org/x/oauth2/google/default.go:92: undefined: metadata.OnGCE
vendor/golang.org/x/oauth2/google/google.go:117: undefined: metadata.OnGCE
vendor/golang.org/x/oauth2/google/google.go:124: undefined: metadata.Get
make: *** [build] Error 2

Any ideas? (Working on a fix that would use the service account credential and eliminate the need to mount a volume/etc)

Cleanup of stale Route53 entries

Hi,

If a service gets deleted in Kubernetes, then does the plugin automatically detect it and delete the corresponding Route 53 entry?

Thanks,

doesn't work with internal ELB

internal ELBs' DNS is prepended by internal-, this line, that should retrieve the ELB name, doesn't work with that naming schema, because it returns internal as the dns name

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.