Docker 无法从pod容器内访问kubernetes api

Docker 无法从pod容器内访问kubernetes api,docker,kubernetes,docker-for-windows,hashicorp-vault,kubernetes-pod,Docker,Kubernetes,Docker For Windows,Hashicorp Vault,Kubernetes Pod,我已经创建了hashicorp vault部署并配置了kubernetes auth。vault容器从pod内部调用kubernetes api进行k8s身份验证,该调用失败,错误代码为500(连接被拒绝)。我正在使用docker for windows kubernetes 我为kubernetes身份验证机制向vault添加了以下配置 payload.json { "kubernetes_host": "http://kubernetes", "kubernetes_ca_c

我已经创建了hashicorp vault部署并配置了kubernetes auth。vault容器从pod内部调用kubernetes api进行k8s身份验证,该调用失败,错误代码为500(连接被拒绝)。我正在使用docker for windows kubernetes

我为kubernetes身份验证机制向vault添加了以下配置

payload.json

{
    "kubernetes_host": "http://kubernetes",
    "kubernetes_ca_cert": <k8s service account token>
}
{
    "role": "tanmoy-role",
    "jwt": "<k8s service account token>"
}
上述旋度给出了以下响应:

{“错误”:[“Post:拨号tcp 10.96.0.1:80:连接:连接被拒绝”]}

下面是我的kubernetes服务启动并正常运行,我还可以使用代理访问kubernetes仪表板

NAME            TYPE           CLUSTER-IP      EXTERNAL-IP              PORT(S)                         AGE
kubernetes      ClusterIP      10.96.0.1       <none>                   443/TCP                         13d
Pod

NAME                     READY   STATUS    RESTARTS   AGE
vault-84c65db6c9-pj6zw   1/1     Running   0          21h
编辑2。 正如John所建议的,我将payload.json中的“kubernetes_host”更改为“”。但现在我得到了这个错误:

{"errors":["Post https://kubernetes/apis/authentication.k8s.io/v1/tokenreviews: x509: certificate signed by unknown authority"]}

您的登录请求正在发送到端口80上的
tokenreview
端点。我认为这是因为您的
kubernetes\u主机
指定了
http
URL。500响应是因为它没有在端口80上侦听,而是在443上侦听(正如您在服务列表输出中看到的)

配置身份验证时,请尝试更改为https,即

payload.json

{
    "kubernetes_host": "https://kubernetes",
    "kubernetes_ca_cert": <k8s service account token>
}
payload.json
{
“kubernetes_主机”:https://kubernetes",
“kubernetes_ca_cert”:
}

我终于找到了问题所在:

我的payload.json内容错误

应该是这样的:

{
      "kubernetes_host": "https://kubernetes",
      "kubernetes_ca_cert": <kubectl exec to vault pod and cat  /var/run/secrets/kubernetes.io/serviceaccount/ca.crt, now make the cert one line by following this answer: https://stackoverflow.com/a/14580203/2054147>
}

感谢@John帮助我解决kubernetes_主机的初始问题。

您可以发布与此问题相关的服务列表和pod列表吗?嗨@Ajay,我添加了pad和服务列表。请注意,这些都可以正常工作,没有任何问题。您好@John,我将http更改为https,但现在我在使用
curl
时收到此错误消息,错误代码为500:{“errors”:[“Post:x509:未知机构签署的证书”]},传入
-k
或长格式
--unsecure
以拥有
curl
信任自签名证书。我添加了Hi@gears--unsecure,但仍然失败,因为失败的https端点正在内部调用。我没有直接调用该端点,因此我没有传递选项--该调用不安全。@tanmoy这是一个完全独立的错误,是因为您的Vault容器不信任Kubernetes用于提供HTTPS端点的证书。您需要将用于签署Kubernetes证书的CA证书添加到Vault,以便Vault信任Kubernetes。有关如何执行此操作的详细信息,请参阅。如果您遇到问题,请关闭此问题并创建另一个问题,我们可以帮助您解决。您好@John,我已经为vault配置了K8s auth,类似于您在上面共享的链接中提供的方式。正如你所说,我结束了这个问题,并就这个具体问题提出了另一个问题。请看一看
{"errors":["Post https://kubernetes/apis/authentication.k8s.io/v1/tokenreviews: x509: certificate signed by unknown authority"]}
payload.json

{
    "kubernetes_host": "https://kubernetes",
    "kubernetes_ca_cert": <k8s service account token>
}
{
      "kubernetes_host": "https://kubernetes",
      "kubernetes_ca_cert": <kubectl exec to vault pod and cat  /var/run/secrets/kubernetes.io/serviceaccount/ca.crt, now make the cert one line by following this answer: https://stackoverflow.com/a/14580203/2054147>
}
curl --request POST --data @payload2.json http://127.0.0.1:8200/v1/auth/kubernetes/login