mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
Merge pull request #39118 from bowei/cleanup-dns
Automatic merge from submit-queue (batch tested with PRs 39006, 39078, 37188, 39118) Cleanup dns * Remove hostname endpoints annotation (was beta feature) * Remove references to non-client-go API * Replaces references to internal kubernetes API with client-go.
This commit is contained in:
commit
ae4db79d1c
@ -13,15 +13,14 @@ go_library(
|
|||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
deps = [
|
||||||
"//cmd/kube-dns/app/options:go_default_library",
|
"//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:go_default_library",
|
||||||
"//pkg/dns/config:go_default_library",
|
"//pkg/dns/config:go_default_library",
|
||||||
"//pkg/runtime/schema:go_default_library",
|
|
||||||
"//vendor:github.com/golang/glog",
|
"//vendor:github.com/golang/glog",
|
||||||
"//vendor:github.com/skynetservices/skydns/metrics",
|
"//vendor:github.com/skynetservices/skydns/metrics",
|
||||||
"//vendor:github.com/skynetservices/skydns/server",
|
"//vendor:github.com/skynetservices/skydns/server",
|
||||||
"//vendor:github.com/spf13/pflag",
|
"//vendor:github.com/spf13/pflag",
|
||||||
|
"//vendor:k8s.io/client-go/kubernetes",
|
||||||
|
"//vendor:k8s.io/client-go/rest",
|
||||||
|
"//vendor:k8s.io/client-go/tools/clientcmd",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -29,12 +29,12 @@ import (
|
|||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
|
|
||||||
"k8s.io/kubernetes/cmd/kube-dns/app/options"
|
"k8s.io/kubernetes/cmd/kube-dns/app/options"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
|
"k8s.io/kubernetes/pkg/dns"
|
||||||
"k8s.io/kubernetes/pkg/client/restclient"
|
|
||||||
kclientcmd "k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
|
||||||
kdns "k8s.io/kubernetes/pkg/dns"
|
|
||||||
dnsconfig "k8s.io/kubernetes/pkg/dns/config"
|
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 {
|
type KubeDNSServer struct {
|
||||||
@ -43,7 +43,7 @@ type KubeDNSServer struct {
|
|||||||
healthzPort int
|
healthzPort int
|
||||||
dnsBindAddress string
|
dnsBindAddress string
|
||||||
dnsPort int
|
dnsPort int
|
||||||
kd *kdns.KubeDNS
|
kd *dns.KubeDNS
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewKubeDNSServerDefault(config *options.KubeDNSConfig) *KubeDNSServer {
|
func NewKubeDNSServerDefault(config *options.KubeDNSConfig) *KubeDNSServer {
|
||||||
@ -69,41 +69,28 @@ func NewKubeDNSServerDefault(config *options.KubeDNSConfig) *KubeDNSServer {
|
|||||||
healthzPort: config.HealthzPort,
|
healthzPort: config.HealthzPort,
|
||||||
dnsBindAddress: config.DNSBindAddress,
|
dnsBindAddress: config.DNSBindAddress,
|
||||||
dnsPort: config.DNSPort,
|
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) (kubernetes.Interface, error) {
|
||||||
func newKubeClient(dnsConfig *options.KubeDNSConfig) (clientset.Interface, error) {
|
var config *rest.Config
|
||||||
var (
|
var err error
|
||||||
config *restclient.Config
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
|
|
||||||
if dnsConfig.KubeMasterURL != "" && dnsConfig.KubeConfigFile == "" {
|
if dnsConfig.KubeConfigFile == "" {
|
||||||
// Only --kube-master-url was provided.
|
config, err = rest.InClusterConfig()
|
||||||
config = &restclient.Config{
|
if err != nil {
|
||||||
Host: dnsConfig.KubeMasterURL,
|
return nil, err
|
||||||
ContentConfig: restclient.ContentConfig{GroupVersion: &schema.GroupVersion{Version: "v1"}},
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// We either have:
|
config, err = clientcmd.BuildConfigFromFlags(
|
||||||
// 1) --kube-master-url and --kubecfg-file
|
dnsConfig.KubeMasterURL, dnsConfig.KubeConfigFile)
|
||||||
// 2) just --kubecfg-file
|
if err != nil {
|
||||||
// 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 {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
glog.V(0).Infof("Using %v for kubernetes master, kubernetes API: %v",
|
return kubernetes.NewForConfig(config)
|
||||||
config.Host, config.GroupVersion)
|
|
||||||
return clientset.NewForConfig(config)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (server *KubeDNSServer) Run() {
|
func (server *KubeDNSServer) Run() {
|
||||||
|
@ -19,14 +19,16 @@ package main
|
|||||||
import (
|
import (
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
|
|
||||||
"k8s.io/kubernetes/cmd/kube-dns/app"
|
"k8s.io/kubernetes/cmd/kube-dns/app"
|
||||||
"k8s.io/kubernetes/cmd/kube-dns/app/options"
|
"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/flag"
|
||||||
"k8s.io/kubernetes/pkg/util/logs"
|
"k8s.io/kubernetes/pkg/util/logs"
|
||||||
"k8s.io/kubernetes/pkg/version"
|
"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/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() {
|
func main() {
|
||||||
|
@ -16,22 +16,21 @@ go_library(
|
|||||||
],
|
],
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
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/config:go_default_library",
|
||||||
"//pkg/dns/treecache:go_default_library",
|
"//pkg/dns/treecache:go_default_library",
|
||||||
"//pkg/dns/util:go_default_library",
|
"//pkg/dns/util:go_default_library",
|
||||||
"//pkg/runtime:go_default_library",
|
|
||||||
"//pkg/util/validation:go_default_library",
|
"//pkg/util/validation:go_default_library",
|
||||||
"//pkg/util/wait:go_default_library",
|
"//pkg/util/wait:go_default_library",
|
||||||
"//pkg/watch:go_default_library",
|
|
||||||
"//vendor:github.com/coreos/etcd/client",
|
"//vendor:github.com/coreos/etcd/client",
|
||||||
"//vendor:github.com/golang/glog",
|
"//vendor:github.com/golang/glog",
|
||||||
"//vendor:github.com/miekg/dns",
|
"//vendor:github.com/miekg/dns",
|
||||||
"//vendor:github.com/skynetservices/skydns/msg",
|
"//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",
|
library = "go_default_library",
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
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/config:go_default_library",
|
||||||
"//pkg/dns/treecache:go_default_library",
|
"//pkg/dns/treecache:go_default_library",
|
||||||
"//pkg/dns/util:go_default_library",
|
"//pkg/dns/util:go_default_library",
|
||||||
@ -56,5 +50,9 @@ go_test(
|
|||||||
"//vendor:github.com/skynetservices/skydns/server",
|
"//vendor:github.com/skynetservices/skydns/server",
|
||||||
"//vendor:github.com/stretchr/testify/assert",
|
"//vendor:github.com/stretchr/testify/assert",
|
||||||
"//vendor:github.com/stretchr/testify/require",
|
"//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",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -18,16 +18,16 @@ go_library(
|
|||||||
],
|
],
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
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/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: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/util/wait",
|
||||||
|
"//vendor:k8s.io/client-go/pkg/watch",
|
||||||
|
"//vendor:k8s.io/client-go/tools/cache",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ limitations under the License.
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
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"
|
fed "k8s.io/kubernetes/pkg/dns/federation"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,15 +17,16 @@ limitations under the License.
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
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/client-go/pkg/util/wait"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/client-go/pkg/watch"
|
||||||
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
"k8s.io/client-go/tools/cache"
|
||||||
"k8s.io/kubernetes/pkg/client/cache"
|
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
|
|
||||||
fed "k8s.io/kubernetes/pkg/dns/federation"
|
fed "k8s.io/kubernetes/pkg/dns/federation"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
|
||||||
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -47,7 +48,7 @@ type Sync interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewSync for ConfigMap from namespace `ns` and `name`.
|
// 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{
|
sync := &kubeSync{
|
||||||
ns: ns,
|
ns: ns,
|
||||||
name: name,
|
name: name,
|
||||||
@ -87,7 +88,7 @@ type kubeSync struct {
|
|||||||
ns string
|
ns string
|
||||||
name string
|
name string
|
||||||
|
|
||||||
client clientset.Interface
|
client kubernetes.Interface
|
||||||
store cache.Store
|
store cache.Store
|
||||||
controller *cache.Controller
|
controller *cache.Controller
|
||||||
|
|
||||||
|
@ -17,25 +17,24 @@ limitations under the License.
|
|||||||
package dns
|
package dns
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/kubernetes/pkg/api/v1/endpoints"
|
"k8s.io/client-go/pkg/api/v1"
|
||||||
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
metav1 "k8s.io/client-go/pkg/apis/meta/v1"
|
||||||
kcache "k8s.io/kubernetes/pkg/client/cache"
|
"k8s.io/client-go/pkg/runtime"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
|
"k8s.io/client-go/pkg/watch"
|
||||||
|
kcache "k8s.io/client-go/tools/cache"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/dns/config"
|
"k8s.io/kubernetes/pkg/dns/config"
|
||||||
"k8s.io/kubernetes/pkg/dns/treecache"
|
"k8s.io/kubernetes/pkg/dns/treecache"
|
||||||
"k8s.io/kubernetes/pkg/dns/util"
|
"k8s.io/kubernetes/pkg/dns/util"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
|
||||||
"k8s.io/kubernetes/pkg/util/validation"
|
"k8s.io/kubernetes/pkg/util/validation"
|
||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
|
||||||
|
|
||||||
etcd "github.com/coreos/etcd/client"
|
etcd "github.com/coreos/etcd/client"
|
||||||
"github.com/golang/glog"
|
"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 {
|
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()
|
subCache := treecache.NewTreeCache()
|
||||||
glog.V(4).Infof("Endpoints Annotations: %v", e.Annotations)
|
glog.V(4).Infof("Endpoints Annotations: %v", e.Annotations)
|
||||||
for idx := range e.Subsets {
|
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]
|
address := &e.Subsets[idx].Addresses[subIdx]
|
||||||
endpointIP := address.IP
|
endpointIP := address.IP
|
||||||
recordValue, endpointName := util.GetSkyMsg(endpointIP, 0)
|
recordValue, endpointName := util.GetSkyMsg(endpointIP, 0)
|
||||||
if hostLabel, exists := getHostname(address, podHostnames); exists {
|
if hostLabel, exists := getHostname(address); exists {
|
||||||
endpointName = hostLabel
|
endpointName = hostLabel
|
||||||
}
|
}
|
||||||
subCache.SetEntry(endpointName, recordValue, kd.fqdn(svc, endpointName))
|
subCache.SetEntry(endpointName, recordValue, kd.fqdn(svc, endpointName))
|
||||||
@ -427,30 +421,13 @@ func (kd *KubeDNS) generateRecordsForHeadlessService(e *v1.Endpoints, svc *v1.Se
|
|||||||
return nil
|
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 {
|
if len(address.Hostname) > 0 {
|
||||||
return address.Hostname, true
|
return address.Hostname, true
|
||||||
}
|
}
|
||||||
if hostRecord, exists := podHostnames[address.IP]; exists && len(validation.IsDNS1123Label(hostRecord.HostName)) == 0 {
|
|
||||||
return hostRecord.HostName, true
|
|
||||||
}
|
|
||||||
return "", false
|
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 {
|
func (kd *KubeDNS) generateSRVRecordValue(svc *v1.Service, portNumber int, labels ...string) *skymsg.Service {
|
||||||
host := strings.Join([]string{svc.Name, svc.Namespace, serviceSubdomain, kd.domain}, ".")
|
host := strings.Join([]string{svc.Name, svc.Namespace, serviceSubdomain, kd.domain}, ".")
|
||||||
for _, cNameLabel := range labels {
|
for _, cNameLabel := range labels {
|
||||||
|
@ -17,7 +17,6 @@ limitations under the License.
|
|||||||
package dns
|
package dns
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
"reflect"
|
"reflect"
|
||||||
@ -32,11 +31,12 @@ import (
|
|||||||
skyserver "github.com/skynetservices/skydns/server"
|
skyserver "github.com/skynetservices/skydns/server"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
|
||||||
endpointsapi "k8s.io/kubernetes/pkg/api/v1/endpoints"
|
"k8s.io/client-go/kubernetes/fake"
|
||||||
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
|
"k8s.io/client-go/pkg/api/v1"
|
||||||
"k8s.io/kubernetes/pkg/client/cache"
|
metav1 "k8s.io/client-go/pkg/apis/meta/v1"
|
||||||
fake "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake"
|
"k8s.io/client-go/tools/cache"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/dns/config"
|
"k8s.io/kubernetes/pkg/dns/config"
|
||||||
"k8s.io/kubernetes/pkg/dns/treecache"
|
"k8s.io/kubernetes/pkg/dns/treecache"
|
||||||
"k8s.io/kubernetes/pkg/dns/util"
|
"k8s.io/kubernetes/pkg/dns/util"
|
||||||
@ -207,21 +207,9 @@ func TestSkyPodHostnameSRVLookup(t *testing.T) {
|
|||||||
|
|
||||||
service := newHeadlessService()
|
service := newHeadlessService()
|
||||||
endpointIPs := []string{"10.0.0.1", "10.0.0.2"}
|
endpointIPs := []string{"10.0.0.1", "10.0.0.2"}
|
||||||
endpoints := newEndpoints(service, newSubsetWithOnePort("", 80, endpointIPs...))
|
endpoints := newEndpoints(
|
||||||
|
service,
|
||||||
// The format of thes annotations is:
|
newSubsetWithOnePortWithHostname("", 80, true, endpointIPs...))
|
||||||
// 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),
|
|
||||||
}
|
|
||||||
assert.NoError(t, kd.endpointsStore.Add(endpoints))
|
assert.NoError(t, kd.endpointsStore.Add(endpoints))
|
||||||
kd.newService(service)
|
kd.newService(service)
|
||||||
name := strings.Join([]string{testService, testNamespace, "svc", testDomain}, ".")
|
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 {
|
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 := newSubset()
|
||||||
subset.Ports = append(subset.Ports, v1.EndpointPort{Port: port, Name: portName, Protocol: "TCP"})
|
subset.Ports = append(subset.Ports, v1.EndpointPort{Port: port, Name: portName, Protocol: "TCP"})
|
||||||
for _, ip := range ips {
|
for i, ip := range ips {
|
||||||
subset.Addresses = append(subset.Addresses, v1.EndpointAddress{IP: ip})
|
var hostname string
|
||||||
|
if addHostname {
|
||||||
|
hostname = fmt.Sprintf("ep-%d", i)
|
||||||
|
}
|
||||||
|
subset.Addresses = append(subset.Addresses, v1.EndpointAddress{IP: ip, Hostname: hostname})
|
||||||
}
|
}
|
||||||
return subset
|
return subset
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user