【问题标题】:Vault Injector with externalVaultAddr permission denied具有 externalVaultAddr 权限的 Vault Injector 被拒绝
【发布时间】:2020-03-27 13:24:43
【问题描述】:

我正在尝试从我的 AWS Kubernetes 集群连接 Vault 注入器并使用 injector.externalVaultAddr="http://my-aws-instance-ip:8200" 登录

安装:

helm install vault \
    --set='injector.externalVaultAddr=http://my-aws-instance-ip:8200' \
    /path/to/my/vault-helm

在此处执行必要的步骤后:https://www.hashicorp.com/blog/injecting-vault-secrets-into-kubernetes-pods-via-a-sidecar/ 并对其进行自定义:

vault write auth/kubernetes/config \
   token_reviewer_jwt="$(cat kube_token_from_my_k8s_cluster)" \
   kubernetes_host="$KUBERNETES_HOST:443" \
   kubernetes_ca_cert=@downloaded_ca_crt_from_my_k8s_cluster.crt

现在,在添加部署 app.yaml 并添加 vault 注释以读取 secret/helloworld 后,它不会启动我的 pod 并在容器 vault-agent-init 上显示此错误

NAME                                READY   STATUS     RESTARTS   AGE
app-aaaaaaa-bbbb                    1/1     Running    0          34m
app-aaaaaaa-cccc                    0/2     Init:0/1   0          34m
vault-agent-injector-xxxxxx-zzzzz   1/1     Running    0          35m
$ kubectl logs -f app-aaaaaaa-cccc -c vault-agent-init
...
URL: PUT http://my-aws-instance-ip:8200/v1/auth/kubernetes/login
Code: 403. Errors:

* permission denied" backoff=2.769289902

我也尝试在本地手动操作:

$ export VAULT_ADDR="http://my-aws-instance-ip:8200"
$ curl --request POST \
       --data "{\"role\": \"myapp\", \"jwt\": \"$(cat kube_token_from_my_k8s_cluster)\"}" \
       $VAULT_ADDR/v1/auth/kubernetes/login

# RESPONSE OUTPUT
{"errors":["permission denied"]}

【问题讨论】:

  • 您是否尝试过将VAULT_ADDR 设置为https://?您还可以提供$ vault status 的输出吗?
  • 感谢@Crou,我还没有尝试将其设置为 https,因为我还没有实现与我们的保管库服务器的安全连接。 vault status 很好。我无法粘贴实际的状态消息,因为此评论区不允许我添加代码部分。
  • @Tami Pangadi-你能解决这个问题吗?我也面临同样的问题。

标签: kubernetes hashicorp-vault


【解决方案1】:

尝试使用您在 Vault 中设置 Kubernetes 身份验证时使用的值来卷曲 Kubernetes API 服务。

vault write auth/kubernetes/config \
    token_reviewer_jwt="$TOKEN_REVIEW_JWT" \
    kubernetes_host="$KUBE_HOST" \
    kubernetes_ca_cert="$KUBE_CA_CERT"

curl --cacert <ca-cert-file> -H "Authorization: Bearer $TOKEN_REVIEW_JWT" $KUBE_HOST

如果这不起作用,保险柜将无法与集群通信以验证令牌。

我在尝试将 Vault 与 Rancher 托管集群集成时遇到了这个问题,$KUBE_HOST 指向 Rancher 代理,所以我需要将其更改为集群的 IP 并从我的服务帐户中提取令牌和 ca 证书使用。

【讨论】:

  • 您是否介意提供一些有关如何从服务帐户而不是 k8s 提取令牌和 ca.cert 的更多详细信息?
  • 您可以从绑定到服务帐户的秘密中提取它:kubectl get secret/&lt;name-of-secret&gt; -o yaml
猜你喜欢
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 2015-08-30
  • 2012-05-09
  • 1970-01-01
相关资源
最近更新 更多