From 8d7a36cc0cc22cb26cb3bbbe656a3ec5e33b87fb Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Tue, 16 Feb 2021 16:02:22 +0300 Subject: [PATCH] fix: find master node IPs correctly in health checks Health checks verify node list in Kubernetes to match expectations, but initial set of nodes for server-side health checks was driven by `MasterIPs` functions which returns list of master endpoints which is not exactly same as master nodes: endpoints also include some healthchecks. Signed-off-by: Andrey Smirnov --- .../server/v1alpha1/v1alpha1_cluster.go | 4 ++-- pkg/kubernetes/kubernetes.go | 21 ++++++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/internal/app/machined/internal/server/v1alpha1/v1alpha1_cluster.go b/internal/app/machined/internal/server/v1alpha1/v1alpha1_cluster.go index d1194e938..0e5b612f7 100644 --- a/internal/app/machined/internal/server/v1alpha1/v1alpha1_cluster.go +++ b/internal/app/machined/internal/server/v1alpha1/v1alpha1_cluster.go @@ -106,11 +106,11 @@ func (cluster *clusterState) resolve(ctx context.Context, k8sProvider *cluster.K return err } - if cluster.controlPlaneNodes, err = k8sProvider.KubeHelper.MasterIPs(ctx); err != nil { + if cluster.controlPlaneNodes, err = k8sProvider.KubeHelper.NodeIPs(ctx, machine.TypeControlPlane); err != nil { return err } - if cluster.workerNodes, err = k8sProvider.KubeHelper.WorkerIPs(ctx); err != nil { + if cluster.workerNodes, err = k8sProvider.KubeHelper.NodeIPs(ctx, machine.TypeJoin); err != nil { return err } } diff --git a/pkg/kubernetes/kubernetes.go b/pkg/kubernetes/kubernetes.go index 0f55ac94a..cac4576c0 100644 --- a/pkg/kubernetes/kubernetes.go +++ b/pkg/kubernetes/kubernetes.go @@ -27,6 +27,7 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" + "github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1/machine" "github.com/talos-systems/talos/pkg/machinery/constants" ) @@ -142,8 +143,8 @@ func (h *Client) MasterIPs(ctx context.Context) (addrs []string, err error) { return addrs, nil } -// WorkerIPs returns list of worker nodes IP addresses. -func (h *Client) WorkerIPs(ctx context.Context) (addrs []string, err error) { +// NodeIPs returns list of node IP addresses by machine type. +func (h *Client) NodeIPs(ctx context.Context, machineType machine.Type) (addrs []string, err error) { resp, err := h.CoreV1().Nodes().List(ctx, metav1.ListOptions{}) if err != nil { return nil, err @@ -152,13 +153,27 @@ func (h *Client) WorkerIPs(ctx context.Context) (addrs []string, err error) { addrs = []string{} for _, node := range resp.Items { - if _, ok := node.Labels[constants.LabelNodeRoleMaster]; ok { + _, labelMaster := node.Labels[constants.LabelNodeRoleMaster] + _, labelControlPlane := node.Labels[constants.LabelNodeRoleControlPlane] + + skip := true + + switch machineType { //nolint: exhaustive + case machine.TypeInit, machine.TypeControlPlane: + skip = !(labelMaster || labelControlPlane) + case machine.TypeJoin: + skip = labelMaster || labelControlPlane + } + + if skip { continue } for _, nodeAddress := range node.Status.Addresses { if nodeAddress.Type == corev1.NodeInternalIP { addrs = append(addrs, nodeAddress.Address) + + break } } }