Skip to content

Commit ead578f

Browse files
authored
Merge pull request kubernetes#15456 from hakman/node_exists_node_ready
kops-controller: Return `http.StatusConflict` only when node is ready
2 parents f4e7c51 + 1be5197 commit ead578f

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

cmd/kops-controller/pkg/server/server.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ import (
3030
"runtime/debug"
3131
"time"
3232

33+
corev1 "k8s.io/api/core/v1"
3334
"k8s.io/apimachinery/pkg/api/errors"
34-
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
3535
"k8s.io/apimachinery/pkg/types"
3636
"k8s.io/apimachinery/pkg/util/sets"
3737
"k8s.io/klog/v2"
@@ -175,15 +175,17 @@ func (s *Server) bootstrap(w http.ResponseWriter, r *http.Request) {
175175

176176
// Once the node is registered, we don't allow further registrations, this protects against a pod or escaped workload attempting to impersonate the node.
177177
{
178-
node := &unstructured.Unstructured{}
179-
node.SetAPIVersion("v1")
180-
node.SetKind("node")
178+
node := &corev1.Node{}
181179
err := s.uncachedClient.Get(ctx, types.NamespacedName{Name: id.NodeName}, node)
182180
if err == nil {
183-
klog.Infof("bootstrap %s node %q already exists; denying to avoid node-impersonation attacks", r.RemoteAddr, id.NodeName)
184-
w.WriteHeader(http.StatusForbidden)
185-
_, _ = w.Write([]byte("node already registered"))
186-
return
181+
for _, condition := range node.Status.Conditions {
182+
if condition.Type == corev1.NodeReady && condition.Status == corev1.ConditionTrue {
183+
klog.Infof("bootstrap %s node %q already exists; denying to avoid node-impersonation attacks", r.RemoteAddr, id.NodeName)
184+
w.WriteHeader(http.StatusConflict)
185+
_, _ = w.Write([]byte("node already registered"))
186+
return
187+
}
188+
}
187189
}
188190
if err != nil && !errors.IsNotFound(err) {
189191
klog.Infof("bootstrap %s error querying for node %q: %v", r.RemoteAddr, id.NodeName, err)

0 commit comments

Comments
 (0)