ssl - 隔离 Azure Kubernetes 服务 (AKS) SSL 错误
问题描述
我将一个舵图部署到一个隔离的服务器上,并在它对 kube-api 执行的自签名证书 HTTPS 发布中失败,并出现以下错误:
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL 连接到 kubernetes.default.svc:443
以前有人见过吗?这是“POST”:
echo "Creating a secret for the certificate and keys"
STATUS=$(curl -ik \
-o ${TMP_DIR}/output \
-w "%{http_code}" \
-X POST \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"kind": "Secret",
"apiVersion": "v1",
"metadata": {
"name": "spark-webhook-certs",
"namespace": "'"$NAMESPACE"'"
},
"data": {
"ca-cert.pem": "'"$ca_cert"'",
"ca-key.pem": "'"$ca_key"'",
"server-cert.pem": "'"$server_cert"'",
"server-key.pem": "'"$server_key"'"
}
}' \
https://kubernetes.default.svc/api/v1/namespaces/${NAMESPACE}/secrets
由于自签名证书的 .sh 被此处的 docker image 命令调用,因此发生错误:https ://github.com/GoogleCloudPlatform/spark-on-k8s-operator/blob/master/hack/gencerts.sh
我知道它没有走到尽头,因为它没有泄露它试图发布的秘密。你们都认为我应该从哪里开始排除故障?我在这里发布了其他信息,包括屏幕截图:https ://github.com/GoogleCloudPlatform/spark-on-k8s-operator/issues/926
解决方案
我会尝试更新的内容gencerts.sh
以获取有关错误的更多上下文:
- 将
-v
or--verbose
选项添加到curl
命令中。 - 用于
strace
调用curl
命令
这两个选项都将发送更多输出,stderr
因此您应该能够在日志中检查并更好地了解故障模式。公平警告:strace
会产生大量输出。
另一个信息来源是 kube-apiserver 日志。您需要通过调整集群的配置来启用主日志收集。您应该期望每个 API 请求都由kube-apiserver
.
这里的第一个问题是控制平面是否收到了请求。为了解决这个问题,我会在集群内的容器上获得一个 shell,并尝试重新创建正在发出的curl
请求gencerts.sh
。kubernetes 文档中有一些关于在不使用 kubectl 的情况下访问集群 API的信息。
推荐阅读
- python - 防止aws lambda代码多次执行
- scala - 如何使用 spray-json 将 jsvalue 转换为 Map[string,Any]?
- java - 如何使用 Appium Java 在日历中滚动日期选择器?
- spring - Spring Boot:如何同时调度和执行任务?
- php - MySQL/PHP - 计算列中的特定值
- visual-studio - 如何防止 EF Core 添加迁移以使用生成的迁移代码打开文本编辑器选项卡?
- c# - 对于 C# 中的构造函数来说,多少输入是“太多”
- php - 如何在不丢失以前表的数据的情况下将新表添加到我的数据库
- c# - 使用 iTextSharp.text.pdf 带标题的表格旋转
- pytorch - Pytorch save_image 不保存指定数量的图像