将保管库部署在专用群集上时,如何从另一个kubernetes群集访问保管库秘密?

时间:2019-05-14 07:32:53

标签: kubernetes devops consul hashicorp-vault

我已经在AWS的同一区域的同一VPC内创建了2个kubernetes集群。

第一个集群专用于我的微服务。我们将其命名为“ MS” 第二个专用于保管库及其高可用性存储(咨询)。我们命名为“ V”

问题是如何从“ MS”群集中的容器中访问在“ V”群集中创建的秘密?

到目前为止,我已经尝试过:

1)我首先在“ MS”群集中创建一个新的服务帐户,该帐户通过审核令牌API进行身份验证。

2)然后,我不得不从“ MI”集群中提取令牌审阅者JWT,Kuberenetes CA证书和Kubernetes主机

3)然后,我切换到“ V”集群上下文以启用并创建附加到该服务帐户的新kubernetes auth方法。

从那里我不知道该怎么办,并且不确定使用2个不同的群集时该方法是否真的有效!?

服务帐户:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: consul
  labels:
    app: consul
rules:
  - apiGroups: [""]
    resources:
      - pods
    verbs:
      - get
      - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: consul
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: consul
subjects:
  - kind: ServiceAccount
    name: consul
    namespace: default
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: consul
  labels:
    app: consul

从“ MI”集群中导出令牌查看变量

export VAULT_SA_NAME=$(kubectl get sa postgres-vault -o jsonpath="{.secrets[*]['name']}")

export SA_JWT_TOKEN=$(kubectl get secret $VAULT_SA_NAME -o jsonpath="{.data.token}" | base64 --decode; echo)

export SA_CA_CRT=$(kubectl get secret $VAULT_SA_NAME -o jsonpath="{.data['ca\.crt']}" | base64 --decode; echo)

export K8S_HOST=$(kubectl exec consul-consul-0 -- sh -c 'echo $KUBERNETES_SERVICE_HOST')

创建kubernetes身份验证方法


vault auth enable kubernetes
vault write auth/kubernetes/config \
  token_reviewer_jwt="$SA_JWT_TOKEN" \
  kubernetes_host="https://$K8S_HOST:443" \
  kubernetes_ca_cert="$SA_CA_CRT"

我希望可以从我的micros服务访问存储在金库中的秘密。尽管我不确定将Vault部署在专用群集中时该方法是否有效。 我想可能还有其他东西可以加入这两个集群!可能正在使用领事吗?

1 个答案:

答案 0 :(得分:1)

您在那里80%。接下来的步骤是: 1.使用正确的服务帐户运行部署 2.使用Kubernetes身份验证方法登录/身份验证到Vault并获取相关的Vault令牌。 3.检索秘密。

这是将服务帐户添加到部署中的示例:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: xxx
  labels:
    app: xxx
spec:
  replicas: 1
  template:
    metadata:
      ...
    spec:
      serviceAccountName: vault-auth
  ...

要使用kube auth登录,请参见here。我建议您看一下这个project作为具体示例。

一旦获得具有正确权限的令牌,就可以使用Vault cli / rest api访问机密。