kOps 1.19 在与 AWS 集群交互时报告错误 "Unauthorized"

kOps 1.19 reports error "Unauthorized" when interfacing with AWS cluster

我正在按照 kOps 教程在 AWS 上设置集群。我可以用

创建集群
kops create cluster
kops update cluster --yes

但是,在验证我的集群是否正确设置时

kops validate cluster

我遇到错误:

unexpected error during validation: error listing nodes: Unauthorized

同样的错误发生在许多其他 kOps 操作中。

我检查了我的 kOps/K8s 版本,它是 1.19:

> kops version
Version 1.19.1 (git-8589b4d157a9cb05c54e320c77b0724c4dd094b2)

> kubectl version
Client Version: version.Info{Major:"1", Minor:"20" ...
Server Version: version.Info{Major:"1", Minor:"19" ...

我该如何解决这个问题?

Kubernetes v1.19 删除了基本的身份验证支持,顺便使默认的 kOps 凭据无法授权。为解决此问题,我们将更新集群以使用网络负载均衡器 (NLB) 而不是默认的经典负载均衡器 (CLB)。可以使用未弃用的 AuthZ 机制访问 NLB。

创建集群后,但在更新云资源之前(运行 --yes 之前),编辑其配置以使用 NLB:

kops edit cluster

然后将您的负载均衡器 class 更新为 Network:

spec:
  api:
    loadBalancer:
      class: Network

现在用

更新云资源
kops update cluster --yes

并且您将能够在集群上使用 kOps 通过 AuthZ。

请注意,使用 NLB 还有其他几个优点,check the AWS docs for a comparison

如果您有想要更新为 NLB 的预先存在的集群,则需要执行更多步骤以确保客户端不会开始使 AuthZ 失败、删除旧资源等。您会找到更好的kOps v1.19 release notes.

中的指南

从 kOps 1.19 开始,您会突然收到此错误的原因有两个:

  1. 如果您删除集群并重新配置它,您的旧管理员不会从 kubeconfig 中删除并且 kOps/kubectl 会尝试重新使用它。
  2. 默认情况下,新证书的 TTL 为 18 小时,因此您需要大约每天重新配置一次。

以上两个问题已由 运行 kops export kubecfg --admin 解决。

请注意,不鼓励使用默认的 TLS 凭据。考虑改用 OIDC 提供商之类的事情。