我正在尝试在AWS上安装一个kubernetes集群,但在验证时一直失败。使用以下命令更新集群kops update cluster cluster.foo.com --yes
并发布运行此kops validate cluster
Using cluster from kubectl context: cluster.foo.com
Validating cluster cluster.api.com
INSTANCE GROUPS
NAME ROLE MACHINETYPE MIN MAX SUBNETS
master-eu-west-2a Master t2.medium 1 1 eu-west-2a
nodes Node t2.medium 2 2 eu-west-2a
NODE STATUS
NAME ROLE READY
VALIDATION ERRORS
KIND NAME MESSAGE
dns apiserver Validation Failed
The dns-controller Kubernetes deployment has not updated the Kubernetes cluster's API DNS entry to the correct IP address. The API DNS IP address is the placeholder address that kops creates: 203.0.113.123. Please wait about 5-10 minutes for a master to start, dns-controller to launch, and DNS to propagate. The protokube container and dns-controller deployment logs may contain more diagnostic information. Etcd and the API DNS entries must be updated for a kops Kubernetes cluster to start.
Validation Failed
字符串
请帮助我们找到根本原因。
1.我试过多次删除和重新创建,但这对我没有帮助。
2.还试图手动将主公共和私有IP放置到路由53,但它打破了一切。
4条答案
按热度按时间kadbb4591#
由于EC2使用弹性IP地址作为公网IP,所以每次重启主节点都会收到一个新的公网IP。KOPS会自动为Kube API取不到新的IP。例如,如果您的集群名是
kube.mydomain.com
,那么API DNS将是:api.kube.mydomain.com
,正如您在Route53中看到的那样。当你尝试访问你的集群时,你会看到超时错误:
字符串
**修复方法:**每次EC2主节点接收到新的公网IP时,都必须针对Route53中
api.kube.mydomain.com
的DNS手动更新公网IP。还要确保master的私有IP是针对
api.internal.kube.mydomain.com
的DNS更新的。否则,节点将进入网络不可用状态。vlurs2pr2#
根据我的经验,如果你在kops和kubectl和kubernetes平面版本的版本上有差异,那么Kops将永远不会更新Route53条目,你必须在我的情况下为所有条目提供相同的版本。
字符串
8qgya5xd3#
当我将自定义instance_policies应用到我的示例组时,就发生了这种情况。
原因是Kops控制器没有权限在您的区域中更改您的Route 53
kops-controller.internal.
dns条目。要解决此问题,请将此更改应用于主IAM角色。
字符串
x7yiwoj44#
我遇到了这个问题,对我来说,问题是我试图将
t2.micro
用于节点和控制平面(主节点)。通过将节点切换到
t3.small
,将控制平面切换到t3.medium
,解决了该问题。