我已经在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部署在专用群集中时该方法是否有效。 我想可能还有其他东西可以加入这两个集群!可能正在使用领事吗?
答案 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访问机密。