mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-26 21:17:23 +00:00
master, genericapiserver, registry
This commit is contained in:
parent
4f3d0e3bde
commit
d0a725a522
@ -37,6 +37,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/admission"
|
"k8s.io/kubernetes/pkg/admission"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
apiserverfilters "k8s.io/kubernetes/pkg/apiserver/filters"
|
apiserverfilters "k8s.io/kubernetes/pkg/apiserver/filters"
|
||||||
apiserveropenapi "k8s.io/kubernetes/pkg/apiserver/openapi"
|
apiserveropenapi "k8s.io/kubernetes/pkg/apiserver/openapi"
|
||||||
"k8s.io/kubernetes/pkg/apiserver/request"
|
"k8s.io/kubernetes/pkg/apiserver/request"
|
||||||
@ -522,7 +523,7 @@ func DefaultAndValidateRunOptions(options *options.ServerRunOptions) {
|
|||||||
glog.Warningf("Unable to obtain external host address from cloud provider: %v", err)
|
glog.Warningf("Unable to obtain external host address from cloud provider: %v", err)
|
||||||
} else {
|
} else {
|
||||||
for _, addr := range addrs {
|
for _, addr := range addrs {
|
||||||
if addr.Type == api.NodeExternalIP {
|
if addr.Type == v1.NodeExternalIP {
|
||||||
options.ExternalHost = addr.Address
|
options.ExternalHost = addr.Address
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@ import (
|
|||||||
rbacapi "k8s.io/kubernetes/pkg/apis/rbac/v1alpha1"
|
rbacapi "k8s.io/kubernetes/pkg/apis/rbac/v1alpha1"
|
||||||
storageapiv1beta1 "k8s.io/kubernetes/pkg/apis/storage/v1beta1"
|
storageapiv1beta1 "k8s.io/kubernetes/pkg/apis/storage/v1beta1"
|
||||||
coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
|
coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
|
||||||
|
corev1client "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/typed/core/v1"
|
||||||
"k8s.io/kubernetes/pkg/genericapiserver"
|
"k8s.io/kubernetes/pkg/genericapiserver"
|
||||||
"k8s.io/kubernetes/pkg/genericapiserver/options"
|
"k8s.io/kubernetes/pkg/genericapiserver/options"
|
||||||
"k8s.io/kubernetes/pkg/healthz"
|
"k8s.io/kubernetes/pkg/healthz"
|
||||||
@ -258,7 +259,7 @@ func (c completedConfig) New() (*Master, error) {
|
|||||||
m.InstallAPIs(c.Config.GenericConfig.APIResourceConfigSource, restOptionsFactory.NewFor, restStorageProviders...)
|
m.InstallAPIs(c.Config.GenericConfig.APIResourceConfigSource, restOptionsFactory.NewFor, restStorageProviders...)
|
||||||
|
|
||||||
if c.Tunneler != nil {
|
if c.Tunneler != nil {
|
||||||
m.installTunneler(c.Tunneler, coreclient.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig).Nodes())
|
m.installTunneler(c.Tunneler, corev1client.NewForConfigOrDie(c.GenericConfig.LoopbackClientConfig).Nodes())
|
||||||
}
|
}
|
||||||
|
|
||||||
return m, nil
|
return m, nil
|
||||||
@ -283,7 +284,7 @@ func (m *Master) InstallLegacyAPI(c *Config, restOptionsGetter genericapiserver.
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Master) installTunneler(tunneler genericapiserver.Tunneler, nodeClient coreclient.NodeInterface) {
|
func (m *Master) installTunneler(tunneler genericapiserver.Tunneler, nodeClient corev1client.NodeInterface) {
|
||||||
tunneler.Run(nodeAddressProvider{nodeClient}.externalAddresses)
|
tunneler.Run(nodeAddressProvider{nodeClient}.externalAddresses)
|
||||||
m.GenericAPIServer.AddHealthzChecks(healthz.NamedCheck("SSH Tunnel Check", genericapiserver.TunnelSyncHealthChecker(tunneler)))
|
m.GenericAPIServer.AddHealthzChecks(healthz.NamedCheck("SSH Tunnel Check", genericapiserver.TunnelSyncHealthChecker(tunneler)))
|
||||||
prometheus.NewGaugeFunc(prometheus.GaugeOpts{
|
prometheus.NewGaugeFunc(prometheus.GaugeOpts{
|
||||||
@ -352,15 +353,15 @@ func (f restOptionsFactory) NewFor(resource unversioned.GroupResource) generic.R
|
|||||||
}
|
}
|
||||||
|
|
||||||
type nodeAddressProvider struct {
|
type nodeAddressProvider struct {
|
||||||
nodeClient coreclient.NodeInterface
|
nodeClient corev1client.NodeInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n nodeAddressProvider) externalAddresses() (addresses []string, err error) {
|
func (n nodeAddressProvider) externalAddresses() (addresses []string, err error) {
|
||||||
preferredAddressTypes := []api.NodeAddressType{
|
preferredAddressTypes := []apiv1.NodeAddressType{
|
||||||
api.NodeExternalIP,
|
apiv1.NodeExternalIP,
|
||||||
api.NodeLegacyHostIP,
|
apiv1.NodeLegacyHostIP,
|
||||||
}
|
}
|
||||||
nodes, err := n.nodeClient.List(api.ListOptions{})
|
nodes, err := n.nodeClient.List(apiv1.ListOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -42,12 +42,11 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
extensionsapiv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
|
extensionsapiv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
|
||||||
"k8s.io/kubernetes/pkg/apis/rbac"
|
"k8s.io/kubernetes/pkg/apis/rbac"
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
|
"k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/fake"
|
||||||
"k8s.io/kubernetes/pkg/client/restclient"
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
openapigen "k8s.io/kubernetes/pkg/generated/openapi"
|
openapigen "k8s.io/kubernetes/pkg/generated/openapi"
|
||||||
"k8s.io/kubernetes/pkg/genericapiserver"
|
"k8s.io/kubernetes/pkg/genericapiserver"
|
||||||
kubeletclient "k8s.io/kubernetes/pkg/kubelet/client"
|
kubeletclient "k8s.io/kubernetes/pkg/kubelet/client"
|
||||||
"k8s.io/kubernetes/pkg/registry/registrytest"
|
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing"
|
etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing"
|
||||||
utilnet "k8s.io/kubernetes/pkg/util/net"
|
utilnet "k8s.io/kubernetes/pkg/util/net"
|
||||||
@ -173,25 +172,36 @@ func (*fakeEndpointReconciler) ReconcileEndpoints(serviceName string, ip net.IP,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func makeNodeList(nodes []string, nodeResources apiv1.NodeResources) *apiv1.NodeList {
|
||||||
|
list := apiv1.NodeList{
|
||||||
|
Items: make([]apiv1.Node, len(nodes)),
|
||||||
|
}
|
||||||
|
for i := range nodes {
|
||||||
|
list.Items[i].Name = nodes[i]
|
||||||
|
list.Items[i].Status.Capacity = nodeResources.Capacity
|
||||||
|
}
|
||||||
|
return &list
|
||||||
|
}
|
||||||
|
|
||||||
// TestGetNodeAddresses verifies that proper results are returned
|
// TestGetNodeAddresses verifies that proper results are returned
|
||||||
// when requesting node addresses.
|
// when requesting node addresses.
|
||||||
func TestGetNodeAddresses(t *testing.T) {
|
func TestGetNodeAddresses(t *testing.T) {
|
||||||
assert := assert.New(t)
|
assert := assert.New(t)
|
||||||
|
|
||||||
fakeNodeClient := fake.NewSimpleClientset(registrytest.MakeNodeList([]string{"node1", "node2"}, api.NodeResources{})).Core().Nodes()
|
fakeNodeClient := fake.NewSimpleClientset(makeNodeList([]string{"node1", "node2"}, apiv1.NodeResources{})).Core().Nodes()
|
||||||
addressProvider := nodeAddressProvider{fakeNodeClient}
|
addressProvider := nodeAddressProvider{fakeNodeClient}
|
||||||
|
|
||||||
// Fail case (no addresses associated with nodes)
|
// Fail case (no addresses associated with nodes)
|
||||||
nodes, _ := fakeNodeClient.List(api.ListOptions{})
|
nodes, _ := fakeNodeClient.List(apiv1.ListOptions{})
|
||||||
addrs, err := addressProvider.externalAddresses()
|
addrs, err := addressProvider.externalAddresses()
|
||||||
|
|
||||||
assert.Error(err, "addresses should have caused an error as there are no addresses.")
|
assert.Error(err, "addresses should have caused an error as there are no addresses.")
|
||||||
assert.Equal([]string(nil), addrs)
|
assert.Equal([]string(nil), addrs)
|
||||||
|
|
||||||
// Pass case with External type IP
|
// Pass case with External type IP
|
||||||
nodes, _ = fakeNodeClient.List(api.ListOptions{})
|
nodes, _ = fakeNodeClient.List(apiv1.ListOptions{})
|
||||||
for index := range nodes.Items {
|
for index := range nodes.Items {
|
||||||
nodes.Items[index].Status.Addresses = []api.NodeAddress{{Type: api.NodeExternalIP, Address: "127.0.0.1"}}
|
nodes.Items[index].Status.Addresses = []apiv1.NodeAddress{{Type: apiv1.NodeExternalIP, Address: "127.0.0.1"}}
|
||||||
fakeNodeClient.Update(&nodes.Items[index])
|
fakeNodeClient.Update(&nodes.Items[index])
|
||||||
}
|
}
|
||||||
addrs, err = addressProvider.externalAddresses()
|
addrs, err = addressProvider.externalAddresses()
|
||||||
@ -199,9 +209,9 @@ func TestGetNodeAddresses(t *testing.T) {
|
|||||||
assert.Equal([]string{"127.0.0.1", "127.0.0.1"}, addrs)
|
assert.Equal([]string{"127.0.0.1", "127.0.0.1"}, addrs)
|
||||||
|
|
||||||
// Pass case with LegacyHost type IP
|
// Pass case with LegacyHost type IP
|
||||||
nodes, _ = fakeNodeClient.List(api.ListOptions{})
|
nodes, _ = fakeNodeClient.List(apiv1.ListOptions{})
|
||||||
for index := range nodes.Items {
|
for index := range nodes.Items {
|
||||||
nodes.Items[index].Status.Addresses = []api.NodeAddress{{Type: api.NodeLegacyHostIP, Address: "127.0.0.2"}}
|
nodes.Items[index].Status.Addresses = []apiv1.NodeAddress{{Type: apiv1.NodeLegacyHostIP, Address: "127.0.0.2"}}
|
||||||
fakeNodeClient.Update(&nodes.Items[index])
|
fakeNodeClient.Update(&nodes.Items[index])
|
||||||
}
|
}
|
||||||
addrs, err = addressProvider.externalAddresses()
|
addrs, err = addressProvider.externalAddresses()
|
||||||
|
@ -23,6 +23,7 @@ import (
|
|||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/rest"
|
"k8s.io/kubernetes/pkg/api/rest"
|
||||||
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/client"
|
"k8s.io/kubernetes/pkg/kubelet/client"
|
||||||
"k8s.io/kubernetes/pkg/registry/cachesize"
|
"k8s.io/kubernetes/pkg/registry/cachesize"
|
||||||
"k8s.io/kubernetes/pkg/registry/core/node"
|
"k8s.io/kubernetes/pkg/registry/core/node"
|
||||||
@ -115,7 +116,7 @@ func NewStorage(opts generic.RESTOptions, kubeletClientConfig client.KubeletClie
|
|||||||
proxyREST := &noderest.ProxyREST{Store: store, ProxyTransport: proxyTransport}
|
proxyREST := &noderest.ProxyREST{Store: store, ProxyTransport: proxyTransport}
|
||||||
|
|
||||||
// Build a NodeGetter that looks up nodes using the REST handler
|
// Build a NodeGetter that looks up nodes using the REST handler
|
||||||
nodeGetter := client.NodeGetterFunc(func(nodeName string) (*api.Node, error) {
|
nodeGetter := client.NodeGetterFunc(func(nodeName string) (*v1.Node, error) {
|
||||||
obj, err := nodeREST.Get(api.NewContext(), nodeName)
|
obj, err := nodeREST.Get(api.NewContext(), nodeName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -124,7 +125,13 @@ func NewStorage(opts generic.RESTOptions, kubeletClientConfig client.KubeletClie
|
|||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("unexpected type %T", obj)
|
return nil, fmt.Errorf("unexpected type %T", obj)
|
||||||
}
|
}
|
||||||
return node, nil
|
// TODO: Remove the conversion. Consider only return the NodeAddresses
|
||||||
|
externalNode := &v1.Node{}
|
||||||
|
err = v1.Convert_api_Node_To_v1_Node(node, externalNode, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to convert to v1.Node: %v", err)
|
||||||
|
}
|
||||||
|
return externalNode, nil
|
||||||
})
|
})
|
||||||
connectionInfoGetter, err := client.NewNodeConnectionInfoGetter(nodeGetter, kubeletClientConfig)
|
connectionInfoGetter, err := client.NewNodeConnectionInfoGetter(nodeGetter, kubeletClientConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -63,7 +63,7 @@ func validNewPod() *api.Pod {
|
|||||||
ImagePullPolicy: api.PullAlways,
|
ImagePullPolicy: api.PullAlways,
|
||||||
|
|
||||||
TerminationMessagePath: api.TerminationMessagePathDefault,
|
TerminationMessagePath: api.TerminationMessagePathDefault,
|
||||||
SecurityContext: securitycontext.ValidSecurityContextWithContainerDefaults(),
|
SecurityContext: securitycontext.ValidInternalSecurityContextWithContainerDefaults(),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
SecurityContext: &api.PodSecurityContext{},
|
SecurityContext: &api.PodSecurityContext{},
|
||||||
@ -658,7 +658,7 @@ func TestEtcdUpdateScheduled(t *testing.T) {
|
|||||||
{
|
{
|
||||||
Name: "foobar",
|
Name: "foobar",
|
||||||
Image: "foo:v1",
|
Image: "foo:v1",
|
||||||
SecurityContext: securitycontext.ValidSecurityContextWithContainerDefaults(),
|
SecurityContext: securitycontext.ValidInternalSecurityContextWithContainerDefaults(),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
SecurityContext: &api.PodSecurityContext{},
|
SecurityContext: &api.PodSecurityContext{},
|
||||||
@ -683,7 +683,7 @@ func TestEtcdUpdateScheduled(t *testing.T) {
|
|||||||
Image: "foo:v2",
|
Image: "foo:v2",
|
||||||
ImagePullPolicy: api.PullIfNotPresent,
|
ImagePullPolicy: api.PullIfNotPresent,
|
||||||
TerminationMessagePath: api.TerminationMessagePathDefault,
|
TerminationMessagePath: api.TerminationMessagePathDefault,
|
||||||
SecurityContext: securitycontext.ValidSecurityContextWithContainerDefaults(),
|
SecurityContext: securitycontext.ValidInternalSecurityContextWithContainerDefaults(),
|
||||||
}},
|
}},
|
||||||
RestartPolicy: api.RestartPolicyAlways,
|
RestartPolicy: api.RestartPolicyAlways,
|
||||||
DNSPolicy: api.DNSClusterFirst,
|
DNSPolicy: api.DNSClusterFirst,
|
||||||
@ -727,7 +727,7 @@ func TestEtcdUpdateStatus(t *testing.T) {
|
|||||||
Containers: []api.Container{
|
Containers: []api.Container{
|
||||||
{
|
{
|
||||||
Image: "foo:v1",
|
Image: "foo:v1",
|
||||||
SecurityContext: securitycontext.ValidSecurityContextWithContainerDefaults(),
|
SecurityContext: securitycontext.ValidInternalSecurityContextWithContainerDefaults(),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
SecurityContext: &api.PodSecurityContext{},
|
SecurityContext: &api.PodSecurityContext{},
|
||||||
|
Loading…
Reference in New Issue
Block a user