mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 09:22:44 +00:00
Add IP look up if the Cloud Provider is not null
Add Instance info to the Cloud Provider interface
This commit is contained in:
parent
c0d8636f40
commit
57869958bc
@ -16,10 +16,16 @@ limitations under the License.
|
|||||||
|
|
||||||
package cloudprovider
|
package cloudprovider
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
// CloudInterface is an abstract, pluggable interface for cloud providers
|
// CloudInterface is an abstract, pluggable interface for cloud providers
|
||||||
type Interface interface {
|
type Interface interface {
|
||||||
// TCPLoadBalancer returns a balancer interface, or nil if none is supported. Returns an error if one occurs.
|
// TCPLoadBalancer returns a balancer interface, or nil if none is supported. Returns an error if one occurs.
|
||||||
TCPLoadBalancer() (TCPLoadBalancer, error)
|
TCPLoadBalancer() (TCPLoadBalancer, error)
|
||||||
|
// Instances returns an instances interface, or nil if none is supported. Returns an error if one occurs.
|
||||||
|
Instances() (Instances, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type TCPLoadBalancer interface {
|
type TCPLoadBalancer interface {
|
||||||
@ -29,3 +35,7 @@ type TCPLoadBalancer interface {
|
|||||||
UpdateTCPLoadBalancer(name, region string, hosts []string) error
|
UpdateTCPLoadBalancer(name, region string, hosts []string) error
|
||||||
DeleteTCPLoadBalancer(name, region string) error
|
DeleteTCPLoadBalancer(name, region string) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Instances interface {
|
||||||
|
IPAddress(name string) (net.IP, error)
|
||||||
|
}
|
||||||
|
@ -19,6 +19,7 @@ package cloudprovider
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -82,6 +83,10 @@ func (gce *GCECloud) TCPLoadBalancer() (TCPLoadBalancer, error) {
|
|||||||
return gce, nil
|
return gce, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (gce *GCECloud) Instances() (Instances, error) {
|
||||||
|
return gce, nil
|
||||||
|
}
|
||||||
|
|
||||||
func makeHostLink(projectID, zone, host string) string {
|
func makeHostLink(projectID, zone, host string) string {
|
||||||
ix := strings.Index(host, ".")
|
ix := strings.Index(host, ".")
|
||||||
if ix != -1 {
|
if ix != -1 {
|
||||||
@ -162,3 +167,15 @@ func (gce *GCECloud) DeleteTCPLoadBalancer(name, region string) error {
|
|||||||
_, err = gce.service.TargetPools.Delete(gce.projectID, region, name).Do()
|
_, err = gce.service.TargetPools.Delete(gce.projectID, region, name).Do()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (gce *GCECloud) IPAddress(instance string) (net.IP, error) {
|
||||||
|
res, err := gce.service.Instances.Get(gce.projectID, gce.zone, instance).Do()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
ip := net.ParseIP(res.NetworkInterfaces[0].AccessConfigs[0].NatIP)
|
||||||
|
if ip == nil {
|
||||||
|
return nil, fmt.Errorf("Invalid network IP: %s", res.NetworkInterfaces[0].AccessConfigs[0].NatIP)
|
||||||
|
}
|
||||||
|
return ip, nil
|
||||||
|
}
|
||||||
|
@ -18,10 +18,14 @@ package registry
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
|
||||||
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/cloudprovider"
|
||||||
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/labels"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -30,13 +34,15 @@ type PodRegistryStorage struct {
|
|||||||
registry PodRegistry
|
registry PodRegistry
|
||||||
containerInfo client.ContainerInfo
|
containerInfo client.ContainerInfo
|
||||||
scheduler Scheduler
|
scheduler Scheduler
|
||||||
|
cloud cloudprovider.Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
func MakePodRegistryStorage(registry PodRegistry, containerInfo client.ContainerInfo, scheduler Scheduler) apiserver.RESTStorage {
|
func MakePodRegistryStorage(registry PodRegistry, containerInfo client.ContainerInfo, scheduler Scheduler, cloud cloudprovider.Interface) apiserver.RESTStorage {
|
||||||
return &PodRegistryStorage{
|
return &PodRegistryStorage{
|
||||||
registry: registry,
|
registry: registry,
|
||||||
containerInfo: containerInfo,
|
containerInfo: containerInfo,
|
||||||
scheduler: scheduler,
|
scheduler: scheduler,
|
||||||
|
cloud: cloud,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,6 +69,31 @@ func makePodStatus(info interface{}) string {
|
|||||||
return "Pending"
|
return "Pending"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getInstanceIP(cloud cloudprovider.Interface, host string) string {
|
||||||
|
if cloud == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
instances, err := cloud.Instances()
|
||||||
|
if instances == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error getting instances: %#v", err)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
ix := strings.Index(host, ".")
|
||||||
|
if ix != -1 {
|
||||||
|
host = host[:ix]
|
||||||
|
}
|
||||||
|
var addr net.IP
|
||||||
|
addr, err = instances.IPAddress(host)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error getting instance IP: %#v", err)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return addr.String()
|
||||||
|
}
|
||||||
|
|
||||||
func (storage *PodRegistryStorage) Get(id string) (interface{}, error) {
|
func (storage *PodRegistryStorage) Get(id string) (interface{}, error) {
|
||||||
pod, err := storage.registry.GetPod(id)
|
pod, err := storage.registry.GetPod(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -74,6 +105,8 @@ func (storage *PodRegistryStorage) Get(id string) (interface{}, error) {
|
|||||||
}
|
}
|
||||||
pod.CurrentState.Info = info
|
pod.CurrentState.Info = info
|
||||||
pod.CurrentState.Status = makePodStatus(info)
|
pod.CurrentState.Status = makePodStatus(info)
|
||||||
|
pod.CurrentState.HostIP = getInstanceIP(storage.cloud, pod.CurrentState.Host)
|
||||||
|
|
||||||
pod.Kind = "cluster#pod"
|
pod.Kind = "cluster#pod"
|
||||||
return pod, err
|
return pod, err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user