我已经创建了hashicorp保管库部署并配置了kubernetes auth。保管库容器从Pod内部调用kubernetes api进行k8s身份验证,并且该调用失败,并显示500个错误代码(连接被拒绝)。我正在将docker用于Windows kubernetes。
我将以下配置添加到kubernetes身份验证机制的Vault中。
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
上面的 curl 给出以下响应:
以下是我的kubernetes服务正常运行,并且我也可以使用代理访问kubernetes仪表板。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d
我无法弄清楚为什么不能从容器内部访问“kubernetes”服务。任何帮助将不胜感激。
编辑1. 我的保管箱和服务运行正常:
服务
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
pod
NAME READY STATUS RESTARTS AGE
vault-84c65db6c9-pj6zw 1/1 Running 0 21h
编辑2.
正如约翰建议的那样,我将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>
}