From a3fb9b4443ec48cfa9043ebd31cb0e2fa577321e Mon Sep 17 00:00:00 2001 From: test Date: Mon, 5 Feb 2018 13:26:23 -0800 Subject: [PATCH] kubeadm: use localhost for API server liveness probe --- cmd/kubeadm/app/util/staticpod/BUILD | 2 ++ cmd/kubeadm/app/util/staticpod/utils.go | 12 +++++++++++- cmd/kubeadm/app/util/staticpod/utils_test.go | 17 +++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/cmd/kubeadm/app/util/staticpod/BUILD b/cmd/kubeadm/app/util/staticpod/BUILD index d220eab9ac3..19256215f48 100644 --- a/cmd/kubeadm/app/util/staticpod/BUILD +++ b/cmd/kubeadm/app/util/staticpod/BUILD @@ -13,6 +13,7 @@ go_test( deps = [ "//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//cmd/kubeadm/app/constants:go_default_library", + "//cmd/kubeadm/app/features:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library", @@ -26,6 +27,7 @@ go_library( deps = [ "//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//cmd/kubeadm/app/constants:go_default_library", + "//cmd/kubeadm/app/features:go_default_library", "//cmd/kubeadm/app/util:go_default_library", "//pkg/kubelet/types:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", diff --git a/cmd/kubeadm/app/util/staticpod/utils.go b/cmd/kubeadm/app/util/staticpod/utils.go index 5db0556467e..1ea1b79ad19 100644 --- a/cmd/kubeadm/app/util/staticpod/utils.go +++ b/cmd/kubeadm/app/util/staticpod/utils.go @@ -29,6 +29,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/kubernetes/cmd/kubeadm/app/features" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" @@ -184,7 +185,16 @@ func WriteStaticPodToDisk(componentName, manifestDir string, pod v1.Pod) error { func GetProbeAddress(cfg *kubeadmapi.MasterConfiguration, componentName string) string { switch { case componentName == kubeadmconstants.KubeAPIServer: - if cfg.API.AdvertiseAddress != "" { + // In the case of a self-hosted deployment, the initial host on which kubeadm --init is run, + // will generate a DaemonSet with a nodeSelector such that all nodes with the label + // node-role.kubernetes.io/master='' will have the API server deployed to it. Since the init + // is run only once on an initial host, the API advertise address will be invalid for any + // future hosts that do not have the same address. Furthermore, since liveness and readiness + // probes do not support the Downward API we cannot dynamically set the advertise address to + // the node's IP. The only option then is to use localhost. + if features.Enabled(cfg.FeatureGates, features.SelfHosting) { + return "127.0.0.1" + } else if cfg.API.AdvertiseAddress != "" { return cfg.API.AdvertiseAddress } case componentName == kubeadmconstants.KubeControllerManager: diff --git a/cmd/kubeadm/app/util/staticpod/utils_test.go b/cmd/kubeadm/app/util/staticpod/utils_test.go index 5b681335841..10a3f9ce5b4 100644 --- a/cmd/kubeadm/app/util/staticpod/utils_test.go +++ b/cmd/kubeadm/app/util/staticpod/utils_test.go @@ -24,6 +24,7 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/kubernetes/cmd/kubeadm/app/features" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" @@ -61,6 +62,22 @@ func TestComponentProbe(t *testing.T) { scheme: v1.URISchemeHTTP, expected: "127.0.0.1", }, + { + name: "default apiserver advertise address with http", + cfg: &kubeadmapi.MasterConfiguration{ + API: kubeadmapi.API{ + AdvertiseAddress: "1.2.3.4", + }, + FeatureGates: map[string]bool{ + features.SelfHosting: true, + }, + }, + component: kubeadmconstants.KubeAPIServer, + port: 1, + path: "foo", + scheme: v1.URISchemeHTTP, + expected: "127.0.0.1", + }, { name: "default apiserver advertise address with https", cfg: &kubeadmapi.MasterConfiguration{