无法从 pod 容器内部访问 kubernetes api
Not able to access kubernetes api from inside a pod container
我已经创建了一个 hashicorp 保险库部署并配置了 kubernetes 身份验证。 Vault 容器从 pod 内部调用 kubernetes api 来执行 k8s 身份验证,并且该调用失败并显示 500 错误代码(连接被拒绝)。我正在为 windows kubernetes 使用 docker。
我将以下配置添加到 kubernetes 身份验证机制的保管库中。
payload.json
{
"kubernetes_host": "http://kubernetes",
"kubernetes_ca_cert": <k8s service account token>
}
curl --header "X-Vault-Token: <vault root token>" --request POST --data @payload.json http://127.0.0.1:8200/v1/auth/kubernetes/config
我收到了预期的 204 响应。
并且我为 kubernetes auth 创建了一个角色,我试图使用它登录到 vault:
payload2.json
{
"role": "tanmoy-role",
"jwt": "<k8s service account token>"
}
curl --request POST --data @payload2.json http://127.0.0.1:8200/v1/auth/kubernetes/login
上面的卷曲给出了以下响应:
{"errors":["Post http://kubernetes/apis/authentication.k8s.io/v1/tokenreviews: dial tcp 10.96.0.1:80: connect: connection refused"]}
下面是我的 kubernetes 服务正常 运行 我也可以使用代理访问 kubernetes 仪表板。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d
我无法弄清楚为什么无法从容器内部访问 'kubernetes' 服务。任何帮助将不胜感激。
编辑 1. 我的保管库 pod 和服务工作正常:
服务
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
vault-elb-int LoadBalancer 10.104.197.76 localhost,192.168.0.10 8200:31650/TCP,8201:31206/TCP 26h
连播
NAME READY STATUS RESTARTS AGE
vault-84c65db6c9-pj6zw 1/1 Running 0 21h
编辑 2.
正如 John 所建议的,我将 payload.json 中的 'kubernetes_host' 更改为“https://kubernetes”。但现在我收到这个错误:
{"errors":["Post https://kubernetes/apis/authentication.k8s.io/v1/tokenreviews: x509: certificate signed by unknown authority"]}
您的登录请求正在发送到端口 80 上的 tokenreview
端点。我认为这是因为您的 kubernetes_host
指定了 http
URL。 500 响应是因为它没有在端口 80 上侦听,而是在 443 上侦听(正如您在服务列表输出中看到的那样)。
尝试在配置授权时改为https
,即
payload.json
{
"kubernetes_host": "https://kubernetes",
"kubernetes_ca_cert": <k8s service account token>
}
终于弄明白哪里出了问题:
我的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:
}
现在端点下方工作正常并返回期望client_token
curl --request POST --data @payload2.json http://127.0.0.1:8200/v1/auth/kubernetes/login
感谢@John 帮助我解决 kubernetes_host 的初始问题。
我已经创建了一个 hashicorp 保险库部署并配置了 kubernetes 身份验证。 Vault 容器从 pod 内部调用 kubernetes api 来执行 k8s 身份验证,并且该调用失败并显示 500 错误代码(连接被拒绝)。我正在为 windows kubernetes 使用 docker。
我将以下配置添加到 kubernetes 身份验证机制的保管库中。
payload.json
{
"kubernetes_host": "http://kubernetes",
"kubernetes_ca_cert": <k8s service account token>
}
curl --header "X-Vault-Token: <vault root token>" --request POST --data @payload.json http://127.0.0.1:8200/v1/auth/kubernetes/config
我收到了预期的 204 响应。
并且我为 kubernetes auth 创建了一个角色,我试图使用它登录到 vault:
payload2.json
{
"role": "tanmoy-role",
"jwt": "<k8s service account token>"
}
curl --request POST --data @payload2.json http://127.0.0.1:8200/v1/auth/kubernetes/login
上面的卷曲给出了以下响应:
{"errors":["Post http://kubernetes/apis/authentication.k8s.io/v1/tokenreviews: dial tcp 10.96.0.1:80: connect: connection refused"]}
下面是我的 kubernetes 服务正常 运行 我也可以使用代理访问 kubernetes 仪表板。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d
我无法弄清楚为什么无法从容器内部访问 'kubernetes' 服务。任何帮助将不胜感激。
编辑 1. 我的保管库 pod 和服务工作正常:
服务
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
vault-elb-int LoadBalancer 10.104.197.76 localhost,192.168.0.10 8200:31650/TCP,8201:31206/TCP 26h
连播
NAME READY STATUS RESTARTS AGE
vault-84c65db6c9-pj6zw 1/1 Running 0 21h
编辑 2. 正如 John 所建议的,我将 payload.json 中的 'kubernetes_host' 更改为“https://kubernetes”。但现在我收到这个错误:
{"errors":["Post https://kubernetes/apis/authentication.k8s.io/v1/tokenreviews: x509: certificate signed by unknown authority"]}
您的登录请求正在发送到端口 80 上的 tokenreview
端点。我认为这是因为您的 kubernetes_host
指定了 http
URL。 500 响应是因为它没有在端口 80 上侦听,而是在 443 上侦听(正如您在服务列表输出中看到的那样)。
尝试在配置授权时改为https
,即
payload.json
{
"kubernetes_host": "https://kubernetes",
"kubernetes_ca_cert": <k8s service account token>
}
终于弄明白哪里出了问题:
我的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:
}
现在端点下方工作正常并返回期望client_token
curl --request POST --data @payload2.json http://127.0.0.1:8200/v1/auth/kubernetes/login
感谢@John 帮助我解决 kubernetes_host 的初始问题。