Add falg to report node internal IP address in ingress status
This commit is contained in:
parent
4479b54953
commit
284448f8d9
5 changed files with 34 additions and 20 deletions
|
@ -135,8 +135,10 @@ type Configuration struct {
|
||||||
Backend ingress.Controller
|
Backend ingress.Controller
|
||||||
|
|
||||||
UpdateStatus bool
|
UpdateStatus bool
|
||||||
|
UseNodeInternalIP bool
|
||||||
ElectionID string
|
ElectionID string
|
||||||
UpdateStatusOnShutdown bool
|
UpdateStatusOnShutdown bool
|
||||||
|
|
||||||
SortBackends bool
|
SortBackends bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,6 +176,7 @@ func newIngressController(config *Configuration) *GenericController {
|
||||||
DefaultIngressClass: config.DefaultIngressClass,
|
DefaultIngressClass: config.DefaultIngressClass,
|
||||||
UpdateStatusOnShutdown: config.UpdateStatusOnShutdown,
|
UpdateStatusOnShutdown: config.UpdateStatusOnShutdown,
|
||||||
CustomIngressStatus: ic.cfg.Backend.UpdateIngressStatus,
|
CustomIngressStatus: ic.cfg.Backend.UpdateIngressStatus,
|
||||||
|
UseNodeInternalIP: ic.cfg.UseNodeInternalIP,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
glog.Warning("Update of ingress status is disabled (flag --update-status=false was specified)")
|
glog.Warning("Update of ingress status is disabled (flag --update-status=false was specified)")
|
||||||
|
|
|
@ -101,6 +101,9 @@ func NewIngressController(backend ingress.Controller) *GenericController {
|
||||||
|
|
||||||
sortBackends = flags.Bool("sort-backends", false,
|
sortBackends = flags.Bool("sort-backends", false,
|
||||||
`Defines if backends and it's endpoints should be sorted`)
|
`Defines if backends and it's endpoints should be sorted`)
|
||||||
|
|
||||||
|
useNodeInternalIP = flags.Bool("report-node-internal-ip-address", false,
|
||||||
|
`Defines if the nodes IP address to be returned in the ingress status should be the internal instead of the external IP address`)
|
||||||
)
|
)
|
||||||
|
|
||||||
flags.AddGoFlagSet(flag.CommandLine)
|
flags.AddGoFlagSet(flag.CommandLine)
|
||||||
|
@ -198,6 +201,7 @@ func NewIngressController(backend ingress.Controller) *GenericController {
|
||||||
DisableNodeList: *disableNodeList,
|
DisableNodeList: *disableNodeList,
|
||||||
UpdateStatusOnShutdown: *updateStatusOnShutdown,
|
UpdateStatusOnShutdown: *updateStatusOnShutdown,
|
||||||
SortBackends: *sortBackends,
|
SortBackends: *sortBackends,
|
||||||
|
UseNodeInternalIP: *useNodeInternalIP,
|
||||||
}
|
}
|
||||||
|
|
||||||
ic := newIngressController(config)
|
ic := newIngressController(config)
|
||||||
|
|
|
@ -66,6 +66,8 @@ type Config struct {
|
||||||
|
|
||||||
UpdateStatusOnShutdown bool
|
UpdateStatusOnShutdown bool
|
||||||
|
|
||||||
|
UseNodeInternalIP bool
|
||||||
|
|
||||||
IngressLister store.IngressLister
|
IngressLister store.IngressLister
|
||||||
|
|
||||||
DefaultIngressClass string
|
DefaultIngressClass string
|
||||||
|
@ -267,7 +269,7 @@ func (s *statusSync) runningAddresses() ([]string, error) {
|
||||||
|
|
||||||
addrs := []string{}
|
addrs := []string{}
|
||||||
for _, pod := range pods.Items {
|
for _, pod := range pods.Items {
|
||||||
name := k8s.GetNodeIP(s.Client, pod.Spec.NodeName)
|
name := k8s.GetNodeIP(s.Client, pod.Spec.NodeName, s.UseNodeInternalIP)
|
||||||
if !sliceutils.StringInSlice(name, addrs) {
|
if !sliceutils.StringInSlice(name, addrs) {
|
||||||
addrs = append(addrs, name)
|
addrs = append(addrs, name)
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,26 +37,30 @@ func ParseNameNS(input string) (string, string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetNodeIP returns the IP address of a node in the cluster
|
// GetNodeIP returns the IP address of a node in the cluster
|
||||||
func GetNodeIP(kubeClient clientset.Interface, name string) string {
|
func GetNodeIP(kubeClient clientset.Interface, name string, useInternalIP bool) string {
|
||||||
var externalIP string
|
|
||||||
node, err := kubeClient.Core().Nodes().Get(name, metav1.GetOptions{})
|
node, err := kubeClient.Core().Nodes().Get(name, metav1.GetOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return externalIP
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, address := range node.Status.Addresses {
|
for _, address := range node.Status.Addresses {
|
||||||
|
if useInternalIP {
|
||||||
|
if address.Type == apiv1.NodeInternalIP {
|
||||||
|
if address.Address != "" {
|
||||||
|
return address.Address
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if address.Type == apiv1.NodeExternalIP {
|
if address.Type == apiv1.NodeExternalIP {
|
||||||
if address.Address != "" {
|
if address.Address != "" {
|
||||||
externalIP = address.Address
|
return address.Address
|
||||||
break
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if externalIP == "" && address.Type == apiv1.NodeInternalIP {
|
return ""
|
||||||
externalIP = address.Address
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return externalIP
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// PodInfo contains runtime information about the pod running the Ingres controller
|
// PodInfo contains runtime information about the pod running the Ingres controller
|
||||||
|
@ -87,7 +91,7 @@ func GetPodDetails(kubeClient clientset.Interface) (*PodInfo, error) {
|
||||||
return &PodInfo{
|
return &PodInfo{
|
||||||
Name: podName,
|
Name: podName,
|
||||||
Namespace: podNs,
|
Namespace: podNs,
|
||||||
NodeIP: GetNodeIP(kubeClient, pod.Spec.NodeName),
|
NodeIP: GetNodeIP(kubeClient, pod.Spec.NodeName, true),
|
||||||
Labels: pod.GetLabels(),
|
Labels: pod.GetLabels(),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,9 +61,10 @@ func TestGetNodeIP(t *testing.T) {
|
||||||
cs *testclient.Clientset
|
cs *testclient.Clientset
|
||||||
n string
|
n string
|
||||||
ea string
|
ea string
|
||||||
|
i bool
|
||||||
}{
|
}{
|
||||||
// empty node list
|
// empty node list
|
||||||
{testclient.NewSimpleClientset(), "demo", ""},
|
{testclient.NewSimpleClientset(), "demo", "", true},
|
||||||
|
|
||||||
// node not exist
|
// node not exist
|
||||||
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
||||||
|
@ -78,7 +79,7 @@ func TestGetNodeIP(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}}}), "notexistnode", ""},
|
}}}), "notexistnode", "", true},
|
||||||
|
|
||||||
// node exist
|
// node exist
|
||||||
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
||||||
|
@ -93,7 +94,7 @@ func TestGetNodeIP(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}}}), "demo", "10.0.0.1"},
|
}}}), "demo", "10.0.0.1", true},
|
||||||
|
|
||||||
// search the correct node
|
// search the correct node
|
||||||
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{
|
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{
|
||||||
|
@ -123,7 +124,7 @@ func TestGetNodeIP(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}}), "demo2", "10.0.0.2"},
|
}}), "demo2", "10.0.0.2", true},
|
||||||
|
|
||||||
// get NodeExternalIP
|
// get NodeExternalIP
|
||||||
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
||||||
|
@ -141,7 +142,7 @@ func TestGetNodeIP(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}}}), "demo", "10.0.0.2"},
|
}}}), "demo", "10.0.0.2", false},
|
||||||
|
|
||||||
// get NodeInternalIP
|
// get NodeInternalIP
|
||||||
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
||||||
|
@ -159,11 +160,11 @@ func TestGetNodeIP(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}}}), "demo", "10.0.0.2"},
|
}}}), "demo", "10.0.0.2", true},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, fk := range fKNodes {
|
for _, fk := range fKNodes {
|
||||||
address := GetNodeIP(fk.cs, fk.n)
|
address := GetNodeIP(fk.cs, fk.n, fk.i)
|
||||||
if address != fk.ea {
|
if address != fk.ea {
|
||||||
t.Errorf("expected %s, but returned %s", fk.ea, address)
|
t.Errorf("expected %s, but returned %s", fk.ea, address)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue