kubeasz与HashiCorp Vault集成:Kubernetes密钥管理与动态凭证实践

kubeasz与HashiCorp Vault集成:Kubernetes密钥管理与动态凭证实践

【免费下载链接】kubeasz 一款基于Ansible的Kubernetes安装与运维管理工具,提供自动化部署、集群管理、配置管理等功能。 - 功能:提供自动化部署Kubernetes集群、节点管理、容器管理、存储管理、网络管理等功能。 - 特点:基于Ansible,易于上手;支持离线安装;支持多种Kubernetes版本。 【免费下载链接】kubeasz 项目地址: https://gitcode.com/GitHub_Trending/ku/kubeasz

你是否还在为Kubernetes集群中的密钥管理而烦恼?手动创建和分发密钥不仅效率低下,还存在密钥泄露的风险。本文将详细介绍如何使用kubeasz集成HashiCorp Vault,实现Kubernetes密钥的自动化管理和动态凭证的安全实践,让你轻松应对密钥管理的挑战。读完本文,你将掌握Vault的部署、配置以及与Kubernetes的集成方法,实现密钥的安全存储、动态生成和自动轮换。

为什么需要密钥管理解决方案

在Kubernetes集群中,密钥(Secret)的管理是一个至关重要的环节。传统的密钥管理方式存在以下痛点:

  • 静态密钥风险:手动创建的密钥长期有效,一旦泄露将造成严重安全隐患。
  • 密钥分发困难:跨命名空间、跨集群的密钥分发需要复杂的手动操作。
  • 密钥轮换复杂:密钥轮换需要手动更新所有相关资源,容易出错。
  • 缺乏审计跟踪:无法有效跟踪密钥的使用情况和访问记录。

HashiCorp Vault是一款功能强大的密钥管理工具,它可以帮助我们解决上述问题,提供安全的密钥存储、动态凭证生成和细粒度的访问控制。

kubeasz简介

kubeasz是一款基于Ansible的Kubernetes安装与运维管理工具,提供自动化部署、集群管理、配置管理等功能。它具有以下特点:

  • 基于Ansible,易于上手和扩展。
  • 支持离线安装,适合内网环境。
  • 支持多种Kubernetes版本,满足不同场景需求。
  • 提供丰富的集群管理功能,如节点管理、容器管理、存储管理等。

kubeasz的证书管理模块(docs/setup/01-CA_and_prerequisite.md)已经为我们创建了CA证书和各种kubeconfig文件,为集成Vault奠定了基础。

HashiCorp Vault部署

准备工作

在开始之前,确保你已经使用kubeasz成功部署了一个Kubernetes集群。我们将使用Helm来部署Vault,因此需要先安装Helm:

# 安装Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# 添加HashiCorp仓库
helm repo add hashicorp https://helm.releases.hashicorp.com
helm repo update

部署Vault

使用以下命令部署Vault:

# 创建命名空间
kubectl create namespace vault

# 部署Vault
helm install vault hashicorp/vault --namespace vault \
  --set "server.dev.enabled=true" \
  --set "injector.enabled=true"

这里我们使用开发模式部署Vault,仅用于测试环境。在生产环境中,你需要配置Vault的持久化存储和高可用模式。

初始化Vault

Vault部署完成后,需要进行初始化:

# 进入Vault pod
kubectl exec -it -n vault vault-0 -- sh

# 初始化Vault
vault operator init

# 解封Vault(需要使用初始化时生成的解封密钥)
vault operator unseal <unseal-key-1>
vault operator unseal <unseal-key-2>
vault operator unseal <unseal-key-3>

# 登录Vault
vault login <root-token>

Vault与Kubernetes集成

启用Kubernetes认证

Vault支持多种认证方式,我们将使用Kubernetes认证方式,允许Pod通过Service Account令牌来认证Vault:

# 启用Kubernetes认证
vault auth enable kubernetes

# 配置Vault与Kubernetes集成
vault write auth/kubernetes/config \
  kubernetes_host="https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT"

创建角色和策略

创建一个策略,允许访问特定路径的密钥:

# 创建策略
vault policy write k8s-secrets - <<EOF
path "secret/data/k8s/*" {
  capabilities = ["read"]
}
EOF

# 创建角色,绑定策略和Service Account
vault write auth/kubernetes/role/k8s-secrets \
  bound_service_account_names=vault-secret-reader \
  bound_service_account_namespaces=default \
  policies=k8s-secrets \
  ttl=24h

创建Service Account

在Kubernetes中创建一个Service Account,并授予访问Vault的权限:

# 创建Service Account
kubectl create serviceaccount vault-secret-reader

# 创建Role和RoleBinding
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: vault-secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: vault-secret-reader
subjects:
- kind: ServiceAccount
  name: vault-secret-reader
roleRef:
  kind: Role
  name: vault-secret-reader
  apiGroup: rbac.authorization.k8s.io
EOF

动态凭证实践

存储静态密钥

首先,我们在Vault中存储一个静态密钥:

# 启用kv Secrets引擎
vault secrets enable -path=secret kv-v2

# 存储密钥
vault kv put secret/k8s/demo-db username="db-user" password="db-password"

创建Vault Agent注入配置

创建一个Pod,使用Vault Agent注入密钥:

apiVersion: v1
kind: Pod
metadata:
  name: vault-demo
  annotations:
    vault.hashicorp.com/agent-inject: "true"
    vault.hashicorp.com/agent-inject-secret-db-creds: "secret/data/k8s/demo-db"
    vault.hashicorp.com/role: "k8s-secrets"
    vault.hashicorp.com/service-account: "vault-secret-reader"
spec:
  serviceAccountName: vault-secret-reader
  containers:
  - name: app
    image: nginx

应用上述配置:

kubectl apply -f vault-demo-pod.yaml

验证密钥注入

检查Pod中的密钥是否被正确注入:

# 进入Pod
kubectl exec -it vault-demo -- sh

# 查看注入的密钥
cat /vault/secrets/db-creds

你应该能够看到Vault中存储的数据库用户名和密码。

动态数据库凭证

Vault还支持动态生成数据库凭证。以下是一个使用PostgreSQL的示例:

# 启用数据库 Secrets引擎
vault secrets enable database

# 配置PostgreSQL连接
vault write database/config/postgresql \
  plugin_name=postgresql-database-plugin \
  connection_url="postgresql://{{username}}:{{password}}@postgres:5432/postgres?sslmode=disable" \
  allowed_roles="pg-app" \
  username="postgres" \
  password="postgres"

# 创建角色,定义动态凭证的权限和TTL
vault write database/roles/pg-app \
  db_name=postgresql \
  creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
  default_ttl="1h" \
  max_ttl="24h"

更新Pod注解,注入动态凭证:

metadata:
  annotations:
    vault.hashicorp.com/agent-inject-secret-pg-creds: "database/creds/pg-app"

kubeasz中的密钥管理

kubeasz提供了证书和密钥管理的功能,通过Ansible角色实现。例如,roles/deploy/tasks/main.yml负责创建CA证书和各种kubeconfig文件。这些证书和密钥可以与Vault集成,实现更安全的管理。

证书创建流程

kubeasz创建证书的流程如下:

  1. 创建CA配置文件 ca-config.json.j2
  2. 创建CA证书签名请求 ca-csr.json.j2
  3. 生成CA证书和私钥
  4. 生成各种组件的证书和kubeconfig文件

这些步骤确保了Kubernetes集群中各个组件之间的安全通信。

与Vault集成的优势

将kubeasz创建的证书和密钥存储在Vault中,可以带来以下优势:

  • 集中管理:所有密钥和证书都存储在Vault中,便于统一管理和审计。
  • 动态生成:Vault可以动态生成证书和密钥,减少静态密钥的风险。
  • 自动轮换:Vault支持密钥和证书的自动轮换,提高安全性。
  • 细粒度访问控制:通过Vault的策略,可以精确控制谁可以访问哪些密钥。

总结

本文介绍了如何使用kubeasz和HashiCorp Vault集成,实现Kubernetes密钥的安全管理和动态凭证的生成。通过这种集成,我们可以解决传统密钥管理方式的痛点,提高Kubernetes集群的安全性。

在实际应用中,你需要根据自己的需求调整Vault的配置,例如启用持久化存储、配置高可用模式、设置更精细的策略等。同时,kubeasz的Ansible角色可以进一步扩展,实现Vault的自动化部署和配置。

希望本文对你有所帮助,如果你有任何问题或建议,请随时在项目的GitHub仓库中提出。

【免费下载链接】kubeasz 一款基于Ansible的Kubernetes安装与运维管理工具,提供自动化部署、集群管理、配置管理等功能。 - 功能:提供自动化部署Kubernetes集群、节点管理、容器管理、存储管理、网络管理等功能。 - 特点:基于Ansible,易于上手;支持离线安装;支持多种Kubernetes版本。 【免费下载链接】kubeasz 项目地址: https://gitcode.com/GitHub_Trending/ku/kubeasz

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值