diff --git a/cmd/kube-dns/app/BUILD b/cmd/kube-dns/app/BUILD index 3e449ed44f4..03da17ffbd3 100644 --- a/cmd/kube-dns/app/BUILD +++ b/cmd/kube-dns/app/BUILD @@ -13,15 +13,14 @@ go_library( tags = ["automanaged"], deps = [ "//cmd/kube-dns/app/options:go_default_library", - "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/restclient:go_default_library", - "//pkg/client/unversioned/clientcmd:go_default_library", "//pkg/dns:go_default_library", "//pkg/dns/config:go_default_library", - "//pkg/runtime/schema:go_default_library", "//vendor:github.com/golang/glog", "//vendor:github.com/skynetservices/skydns/metrics", "//vendor:github.com/skynetservices/skydns/server", "//vendor:github.com/spf13/pflag", + "//vendor:k8s.io/client-go/kubernetes", + "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/clientcmd", ], ) diff --git a/cmd/kube-dns/app/server.go b/cmd/kube-dns/app/server.go index f856897c590..be6ba3453fd 100644 --- a/cmd/kube-dns/app/server.go +++ b/cmd/kube-dns/app/server.go @@ -29,12 +29,12 @@ import ( "github.com/spf13/pflag" "k8s.io/kubernetes/cmd/kube-dns/app/options" - clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/restclient" - kclientcmd "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" - kdns "k8s.io/kubernetes/pkg/dns" + "k8s.io/kubernetes/pkg/dns" dnsconfig "k8s.io/kubernetes/pkg/dns/config" - "k8s.io/kubernetes/pkg/runtime/schema" + + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" ) type KubeDNSServer struct { @@ -43,7 +43,7 @@ type KubeDNSServer struct { healthzPort int dnsBindAddress string dnsPort int - kd *kdns.KubeDNS + kd *dns.KubeDNS } func NewKubeDNSServerDefault(config *options.KubeDNSConfig) *KubeDNSServer { @@ -69,41 +69,28 @@ func NewKubeDNSServerDefault(config *options.KubeDNSConfig) *KubeDNSServer { healthzPort: config.HealthzPort, dnsBindAddress: config.DNSBindAddress, dnsPort: config.DNSPort, - kd: kdns.NewKubeDNS(kubeClient, config.ClusterDomain, config.InitialSyncTimeout, configSync), + kd: dns.NewKubeDNS(kubeClient, config.ClusterDomain, config.InitialSyncTimeout, configSync), } } -// TODO: evaluate using pkg/client/clientcmd -func newKubeClient(dnsConfig *options.KubeDNSConfig) (clientset.Interface, error) { - var ( - config *restclient.Config - err error - ) +func newKubeClient(dnsConfig *options.KubeDNSConfig) (kubernetes.Interface, error) { + var config *rest.Config + var err error - if dnsConfig.KubeMasterURL != "" && dnsConfig.KubeConfigFile == "" { - // Only --kube-master-url was provided. - config = &restclient.Config{ - Host: dnsConfig.KubeMasterURL, - ContentConfig: restclient.ContentConfig{GroupVersion: &schema.GroupVersion{Version: "v1"}}, + if dnsConfig.KubeConfigFile == "" { + config, err = rest.InClusterConfig() + if err != nil { + return nil, err } } else { - // We either have: - // 1) --kube-master-url and --kubecfg-file - // 2) just --kubecfg-file - // 3) neither flag - // In any case, the logic is the same. If (3), this will automatically - // fall back on the service account token. - overrides := &kclientcmd.ConfigOverrides{} - overrides.ClusterInfo.Server = dnsConfig.KubeMasterURL // might be "", but that is OK - rules := &kclientcmd.ClientConfigLoadingRules{ExplicitPath: dnsConfig.KubeConfigFile} // might be "", but that is OK - if config, err = kclientcmd.NewNonInteractiveDeferredLoadingClientConfig(rules, overrides).ClientConfig(); err != nil { + config, err = clientcmd.BuildConfigFromFlags( + dnsConfig.KubeMasterURL, dnsConfig.KubeConfigFile) + if err != nil { return nil, err } } - glog.V(0).Infof("Using %v for kubernetes master, kubernetes API: %v", - config.Host, config.GroupVersion) - return clientset.NewForConfig(config) + return kubernetes.NewForConfig(config) } func (server *KubeDNSServer) Run() { diff --git a/cmd/kube-dns/dns.go b/cmd/kube-dns/dns.go index 845edebf329..273ca822d8a 100644 --- a/cmd/kube-dns/dns.go +++ b/cmd/kube-dns/dns.go @@ -19,14 +19,16 @@ package main import ( "github.com/golang/glog" "github.com/spf13/pflag" + "k8s.io/kubernetes/cmd/kube-dns/app" "k8s.io/kubernetes/cmd/kube-dns/app/options" - _ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration "k8s.io/kubernetes/pkg/util/flag" "k8s.io/kubernetes/pkg/util/logs" "k8s.io/kubernetes/pkg/version" - _ "k8s.io/kubernetes/pkg/version/prometheus" // for version metric registration "k8s.io/kubernetes/pkg/version/verflag" + + _ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration + _ "k8s.io/kubernetes/pkg/version/prometheus" // for version metric registration ) func main() { diff --git a/pkg/dns/BUILD b/pkg/dns/BUILD index 872ffe3c689..ca7d6866be8 100644 --- a/pkg/dns/BUILD +++ b/pkg/dns/BUILD @@ -16,22 +16,21 @@ go_library( ], tags = ["automanaged"], deps = [ - "//pkg/api/v1:go_default_library", - "//pkg/api/v1/endpoints:go_default_library", - "//pkg/apis/meta/v1:go_default_library", - "//pkg/client/cache:go_default_library", - "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/dns/config:go_default_library", "//pkg/dns/treecache:go_default_library", "//pkg/dns/util:go_default_library", - "//pkg/runtime:go_default_library", "//pkg/util/validation:go_default_library", "//pkg/util/wait:go_default_library", - "//pkg/watch:go_default_library", "//vendor:github.com/coreos/etcd/client", "//vendor:github.com/golang/glog", "//vendor:github.com/miekg/dns", "//vendor:github.com/skynetservices/skydns/msg", + "//vendor:k8s.io/client-go/kubernetes", + "//vendor:k8s.io/client-go/pkg/api/v1", + "//vendor:k8s.io/client-go/pkg/apis/meta/v1", + "//vendor:k8s.io/client-go/pkg/runtime", + "//vendor:k8s.io/client-go/pkg/watch", + "//vendor:k8s.io/client-go/tools/cache", ], ) @@ -41,11 +40,6 @@ go_test( library = "go_default_library", tags = ["automanaged"], deps = [ - "//pkg/api/v1:go_default_library", - "//pkg/api/v1/endpoints:go_default_library", - "//pkg/apis/meta/v1:go_default_library", - "//pkg/client/cache:go_default_library", - "//pkg/client/clientset_generated/clientset/fake:go_default_library", "//pkg/dns/config:go_default_library", "//pkg/dns/treecache:go_default_library", "//pkg/dns/util:go_default_library", @@ -56,5 +50,9 @@ go_test( "//vendor:github.com/skynetservices/skydns/server", "//vendor:github.com/stretchr/testify/assert", "//vendor:github.com/stretchr/testify/require", + "//vendor:k8s.io/client-go/kubernetes/fake", + "//vendor:k8s.io/client-go/pkg/api/v1", + "//vendor:k8s.io/client-go/pkg/apis/meta/v1", + "//vendor:k8s.io/client-go/tools/cache", ], ) diff --git a/pkg/dns/config/BUILD b/pkg/dns/config/BUILD index 2e4b2ef2c3e..7ff0f13d36e 100644 --- a/pkg/dns/config/BUILD +++ b/pkg/dns/config/BUILD @@ -18,16 +18,16 @@ go_library( ], tags = ["automanaged"], deps = [ - "//pkg/api/v1:go_default_library", - "//pkg/apis/meta/v1:go_default_library", - "//pkg/client/cache:go_default_library", - "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/dns/federation:go_default_library", - "//pkg/fields:go_default_library", - "//pkg/runtime:go_default_library", - "//pkg/watch:go_default_library", "//vendor:github.com/golang/glog", + "//vendor:k8s.io/client-go/kubernetes", + "//vendor:k8s.io/client-go/pkg/api/v1", + "//vendor:k8s.io/client-go/pkg/apis/meta/v1", + "//vendor:k8s.io/client-go/pkg/fields", + "//vendor:k8s.io/client-go/pkg/runtime", "//vendor:k8s.io/client-go/pkg/util/wait", + "//vendor:k8s.io/client-go/pkg/watch", + "//vendor:k8s.io/client-go/tools/cache", ], ) diff --git a/pkg/dns/config/config.go b/pkg/dns/config/config.go index ccea793e850..79256cdbed9 100644 --- a/pkg/dns/config/config.go +++ b/pkg/dns/config/config.go @@ -17,7 +17,7 @@ limitations under the License. package config import ( - types "k8s.io/kubernetes/pkg/apis/meta/v1" + types "k8s.io/client-go/pkg/apis/meta/v1" fed "k8s.io/kubernetes/pkg/dns/federation" ) diff --git a/pkg/dns/config/sync.go b/pkg/dns/config/sync.go index 21f5a9e8c2b..249225f63a6 100644 --- a/pkg/dns/config/sync.go +++ b/pkg/dns/config/sync.go @@ -17,15 +17,16 @@ limitations under the License. package config import ( + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/pkg/api/v1" + metav1 "k8s.io/client-go/pkg/apis/meta/v1" + "k8s.io/client-go/pkg/fields" + "k8s.io/client-go/pkg/runtime" "k8s.io/client-go/pkg/util/wait" - "k8s.io/kubernetes/pkg/api/v1" - metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/client/cache" - clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" + "k8s.io/client-go/pkg/watch" + "k8s.io/client-go/tools/cache" + fed "k8s.io/kubernetes/pkg/dns/federation" - "k8s.io/kubernetes/pkg/fields" - "k8s.io/kubernetes/pkg/runtime" - "k8s.io/kubernetes/pkg/watch" "time" @@ -47,7 +48,7 @@ type Sync interface { } // NewSync for ConfigMap from namespace `ns` and `name`. -func NewSync(client clientset.Interface, ns string, name string) Sync { +func NewSync(client kubernetes.Interface, ns string, name string) Sync { sync := &kubeSync{ ns: ns, name: name, @@ -87,7 +88,7 @@ type kubeSync struct { ns string name string - client clientset.Interface + client kubernetes.Interface store cache.Store controller *cache.Controller diff --git a/pkg/dns/dns.go b/pkg/dns/dns.go index 874f7b17900..250c9ba388d 100644 --- a/pkg/dns/dns.go +++ b/pkg/dns/dns.go @@ -17,25 +17,24 @@ limitations under the License. package dns import ( - "encoding/json" "fmt" "net" "strings" "sync" "time" - "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/api/v1/endpoints" - metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" - kcache "k8s.io/kubernetes/pkg/client/cache" - clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" + clientset "k8s.io/client-go/kubernetes" + "k8s.io/client-go/pkg/api/v1" + metav1 "k8s.io/client-go/pkg/apis/meta/v1" + "k8s.io/client-go/pkg/runtime" + "k8s.io/client-go/pkg/watch" + kcache "k8s.io/client-go/tools/cache" + "k8s.io/kubernetes/pkg/dns/config" "k8s.io/kubernetes/pkg/dns/treecache" "k8s.io/kubernetes/pkg/dns/util" - "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/validation" "k8s.io/kubernetes/pkg/util/wait" - "k8s.io/kubernetes/pkg/watch" etcd "github.com/coreos/etcd/client" "github.com/golang/glog" @@ -392,11 +391,6 @@ func (kd *KubeDNS) newPortalService(service *v1.Service) { } func (kd *KubeDNS) generateRecordsForHeadlessService(e *v1.Endpoints, svc *v1.Service) error { - // TODO: remove this after v1.4 is released and the old annotations are EOL - podHostnames, err := getPodHostnamesFromAnnotation(e.Annotations) - if err != nil { - return err - } subCache := treecache.NewTreeCache() glog.V(4).Infof("Endpoints Annotations: %v", e.Annotations) for idx := range e.Subsets { @@ -404,7 +398,7 @@ func (kd *KubeDNS) generateRecordsForHeadlessService(e *v1.Endpoints, svc *v1.Se address := &e.Subsets[idx].Addresses[subIdx] endpointIP := address.IP recordValue, endpointName := util.GetSkyMsg(endpointIP, 0) - if hostLabel, exists := getHostname(address, podHostnames); exists { + if hostLabel, exists := getHostname(address); exists { endpointName = hostLabel } subCache.SetEntry(endpointName, recordValue, kd.fqdn(svc, endpointName)) @@ -427,30 +421,13 @@ func (kd *KubeDNS) generateRecordsForHeadlessService(e *v1.Endpoints, svc *v1.Se return nil } -func getHostname(address *v1.EndpointAddress, podHostnames map[string]endpoints.HostRecord) (string, bool) { +func getHostname(address *v1.EndpointAddress) (string, bool) { if len(address.Hostname) > 0 { return address.Hostname, true } - if hostRecord, exists := podHostnames[address.IP]; exists && len(validation.IsDNS1123Label(hostRecord.HostName)) == 0 { - return hostRecord.HostName, true - } return "", false } -func getPodHostnamesFromAnnotation(annotations map[string]string) (map[string]endpoints.HostRecord, error) { - hostnames := map[string]endpoints.HostRecord{} - - if annotations != nil { - if serializedHostnames, exists := annotations[endpoints.PodHostnamesAnnotation]; exists && len(serializedHostnames) > 0 { - err := json.Unmarshal([]byte(serializedHostnames), &hostnames) - if err != nil { - return nil, err - } - } - } - return hostnames, nil -} - func (kd *KubeDNS) generateSRVRecordValue(svc *v1.Service, portNumber int, labels ...string) *skymsg.Service { host := strings.Join([]string{svc.Name, svc.Namespace, serviceSubdomain, kd.domain}, ".") for _, cNameLabel := range labels { diff --git a/pkg/dns/dns_test.go b/pkg/dns/dns_test.go index 49312b3c73a..31173c7955f 100644 --- a/pkg/dns/dns_test.go +++ b/pkg/dns/dns_test.go @@ -17,7 +17,6 @@ limitations under the License. package dns import ( - "encoding/json" "fmt" "net" "reflect" @@ -32,11 +31,12 @@ import ( skyserver "github.com/skynetservices/skydns/server" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "k8s.io/kubernetes/pkg/api/v1" - endpointsapi "k8s.io/kubernetes/pkg/api/v1/endpoints" - metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/client/cache" - fake "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" + + "k8s.io/client-go/kubernetes/fake" + "k8s.io/client-go/pkg/api/v1" + metav1 "k8s.io/client-go/pkg/apis/meta/v1" + "k8s.io/client-go/tools/cache" + "k8s.io/kubernetes/pkg/dns/config" "k8s.io/kubernetes/pkg/dns/treecache" "k8s.io/kubernetes/pkg/dns/util" @@ -207,21 +207,9 @@ func TestSkyPodHostnameSRVLookup(t *testing.T) { service := newHeadlessService() endpointIPs := []string{"10.0.0.1", "10.0.0.2"} - endpoints := newEndpoints(service, newSubsetWithOnePort("", 80, endpointIPs...)) - - // The format of thes annotations is: - // endpoints.beta.kubernetes.io/hostnames-map: '{"ep-ip":{"HostName":"pod request hostname"}}' - epRecords := map[string]endpointsapi.HostRecord{} - for i, ep := range endpointIPs { - epRecords[ep] = endpointsapi.HostRecord{HostName: fmt.Sprintf("ep-%d", i)} - } - b, err := json.Marshal(epRecords) - if err != nil { - t.Fatalf("%v", err) - } - endpoints.Annotations = map[string]string{ - endpointsapi.PodHostnamesAnnotation: string(b), - } + endpoints := newEndpoints( + service, + newSubsetWithOnePortWithHostname("", 80, true, endpointIPs...)) assert.NoError(t, kd.endpointsStore.Add(endpoints)) kd.newService(service) name := strings.Join([]string{testService, testNamespace, "svc", testDomain}, ".") @@ -676,10 +664,18 @@ func newEndpoints(service *v1.Service, subsets ...v1.EndpointSubset) *v1.Endpoin } func newSubsetWithOnePort(portName string, port int32, ips ...string) v1.EndpointSubset { + return newSubsetWithOnePortWithHostname(portName, port, false, ips...) +} + +func newSubsetWithOnePortWithHostname(portName string, port int32, addHostname bool, ips ...string) v1.EndpointSubset { subset := newSubset() subset.Ports = append(subset.Ports, v1.EndpointPort{Port: port, Name: portName, Protocol: "TCP"}) - for _, ip := range ips { - subset.Addresses = append(subset.Addresses, v1.EndpointAddress{IP: ip}) + for i, ip := range ips { + var hostname string + if addHostname { + hostname = fmt.Sprintf("ep-%d", i) + } + subset.Addresses = append(subset.Addresses, v1.EndpointAddress{IP: ip, Hostname: hostname}) } return subset }