kubernetes - 使用 aws elb 作为控制平面端点时,kubeadm init 失败
问题描述
我正在尝试在 AWS 中配置一个 HA kubernetes 集群,并且我一直没有运气使用 ELB 作为控制平面(现在是一个带有 TLS 侦听器的 NLB,但也尝试过使用 ALB 和 HTTPS)。无论我做什么,它总是在等待控制平面步骤上失败。如果我提高输出的详细程度,我可以看到它在此步骤中每秒卷曲我的负载均衡器端点,4 分钟后它失败了。没有任何迹象表明负载均衡器的响应是什么,这是我看到的输出示例:
curl -k -v -XGET -H "Accept: application/json, */*" -H "User-Agent: kubeadm/v1.17.3 (linux/amd64) kubernetes/06ad960" 'https://<load-balancer-dns>:443/healthz?timeout=10s'
I0408 13:51:07.899477 27075 round_trippers.go:443] GET https://<load-balancer-dns>:443/healthz?timeout=10s in 4 milliseconds
I0408 13:51:07.899497 27075 round_trippers.go:449] Response Headers:
(响应标头之后没有任何内容)。
奇怪的是,当 init 运行时,我可以在浏览器中拉起 /healthz 端点,这只会导致页面显示“ok”。我也可以从另一个终端窗口卷曲它,我得到一个 HTTP 200,一切看起来都很好。
更多细节 - 在 init 失败后,没有崩溃的 docker 容器。Kubeadm 建议检查 kubelet 服务状态和日志,我看到这样的行:
E0408 14:50:36.738997 11649 reflector.go:153] k8s.io/client-go/informers/factory.go:135: Failed to list *v1beta1.CSIDriver: Get https://<load-balancer-dns>:443/apis/storage.k8s.io/v1beta1/csidrivers?limit=500&resourceVersion=0: x509: certificate signed by unknown authority
卷曲该地址不会给我任何证书错误,尽管它确实给了我 403。证书应该被信任,因为它的链(我相信)正确导入。所以我不确定为什么 kubelet 会抱怨它。
这个问题似乎与我正在使用的 --control-plane-endpoint 标志有关。如果我只是让它默认为单个实例的 IP,kubeadm init
将成功完成并且集群已初始化,我可以将工作人员加入其中,等等。
FWIW,我的 init 命令如下所示:
kubeadm init --control-plane-endpoint "<load-balancer-dns>:<port>" --ignore-preflight-errors=ImagePull --apiserver-bind-port=30400 --v=10
我可以检查什么来尝试准确地确定问题所在?
解决方案
我在这里回答了一个类似的问题:https ://stackoverflow.com/a/70799078/9284676
在 HA 主场景中为您使用 ELB 时--control-plane-endpoint
,您需要创建Target Group
using 类型IP addresses
而不是Instances
. 该文本在创建目标组时很有帮助:
“促进路由到同一实例上的多个 IP 地址和网络接口。”
然后我能够使用此设置成功地初始化我的集群:
kubeadm init --control-plane-endpoint "<myELBname>:6443" --upload-certs
推荐阅读
- python - 如何将模型从 H2O Web UI Flow 加载到 python?
- c - macOS 上的 C 程序无法打开其输入文件
- mysql - 连接到远程 MySQL 的 Excel VBA 中的错误处理
- php - 有没有办法只显示总和的一行,目前它显示两行作为输出
- python - 在实数数组中找到最近元素的最快方法
- html - 包装时如何制作不同大小的弹性项目以填充父项
- android - 仅点击一个通知时删除了所有通知
- sql - 选择查询中的重复行
- azure-active-directory - 通过 Microsoft graph SDK\API 将用户添加到 Azure Active Directory 中的目录角色
- ubuntu - 无法创建主目录。这很可能是权限问题