首页 > 解决方案 > 隔离 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

标签: sslcurlkuberneteskubernetes-helmazure-aks

解决方案


我会尝试更新的内容gencerts.sh以获取有关错误的更多上下文:

  1. -vor--verbose选项添加到curl命令中。
  2. 用于strace调用curl命令

这两个选项都将发送更多输出,stderr因此您应该能够在日志中检查并更好地了解故障模式。公平警告:strace会产生大量输出。

另一个信息来源是 kube-apiserver 日志。您需要通过调整集群的配置来启用主日志收集。您应该期望每个 API 请求都由kube-apiserver.

这里的第一个问题是控制平面是否收到了请求。为了解决这个问题,我会在集群内的容器上获得一个 shell,并尝试重新创建正在发出的curl请求gencerts.sh。kubernetes 文档中有一些关于在不使用 kubectl 的情况下访问集群 API的信息。


推荐阅读