具有externalVaultAddr权限的Vault Injector被拒绝

时间:2020-03-27 13:24:43

标签: kubernetes hashicorp-vault

我正在尝试从我的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并添加保管库注释以读取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"]}

1 个答案:

答案 0 :(得分:0)

尝试使用您在保险柜中设置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将无法与群集进行通信以验证令牌。

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