当前位置: 首页 > 知识库问答 >
问题:

Kubernetes-如何在不重新启动pod的情况下动态刷新机密

习洲
2023-03-14

我有一个kubernetes集群,安装了保险库(通过头盔图表)。

我想将机密从vault填充到pod中的文件(例如nginx),并每5分钟刷新一次机密。

我使用以下配置对其进行了测试(使用适当的vault策略/后端身份验证):

namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: web

Service_account.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nginx
  namespace: web
secrets:
- name: nginx

nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: web
  labels:
    app: nginx
    run: nginx
    version: vault-injector
spec:
  replicas: 1
  selector:
    matchLabels:
      run: nginx
      version: vault-injector
  template:
    metadata:
      labels:
        app: nginx
        run: nginx
        version: vault-injector
      annotations:
        vault.hashicorp.com/agent-inject: "true"
        vault.hashicorp.com/role: "nginx"
        #vault.hashicorp.com/agent-inject-status: "update"
        vault.hashicorp.com/agent-inject-secret-nginx.pass: "infrastructure/nginx/"
    spec:
      serviceAccountName: nginx
      containers:
        - name: nginx
          image: nginx
          ports:
            - name: http
              containerPort: 80    

当我将此配置应用于kubernetes集群时,将创建部署,并将我的机密填充到/vault/secret/nginx.pass中(如预期的那样)。

kubectl exec -it pod/nginx-69955d8744-v9jm2 -n web -- cat /vault/secrets/nginx.pass
Password1: MySecretPassword1
Password2: MySecretPassword2

我试图更新kv并在nginx kv上添加密码,但我的pods不会刷新 /vault/secrets/nginx.pass.上的文件,如果我重新启动我的秘密被填满

是否可以动态刷新kv?最好的方法是什么?我希望使用vault作为配置管理器,并且能够在不重新启动POD的情况下修改kv。

共有1个答案

长孙鸿振
2023-03-14

通过指定TTL值,可以在kv secret上定义TTL。例如:

 vault kv put infrastructure/nginx ttl=1m Password1=PasswordUpdated1 Password2=PasswordUpdated2

每分钟都会使您的基础架构/nginx机密过期。Vault sidecar将自动检查新值,并将文件刷新到播客中。

root@LAP-INFO-28:/mnt/c/Users/cmonsieux/Desktop/IAC/kubernetes/yaml/simplePod# k logs nginx-69955d8744-mwhmf vault-agent -n web
    renewal process
    2020-09-06T07:16:42.867Z [INFO]  sink.file: token written: path=/home/vault/.vault-token
    2020-09-06T07:16:42.867Z [INFO]  template.server: template server received new token
    2020/09/06 07:16:42.867793 [INFO] (runner) stopping
    2020/09/06 07:16:42.867869 [INFO] (runner) creating new runner (dry: false, once: false)
    2020/09/06 07:16:42.868051 [INFO] (runner) creating watcher
    2020/09/06 07:16:42.868101 [INFO] (runner) starting
    2020-09-06T07:16:42.900Z [INFO]  auth.handler: renewed auth token
    2020/09/06 07:18:26.268835 [INFO] (runner) rendered "(dynamic)" => "/vault/secrets/nginx.pass"
    2020/09/06 07:19:18.810479 [INFO] (runner) rendered "(dynamic)" => "/vault/secrets/nginx.pass"
    2020/09/06 07:24:41.189868 [INFO] (runner) rendered "(dynamic)" => "/vault/secrets/nginx.pass"
    2020/09/06 07:25:36.095547 [INFO] (runner) rendered "(dynamic)" => "/vault/secrets/nginx.pass"
    2020/09/06 07:29:11.479051 [INFO] (runner) rendered "(dynamic)" => "/vault/secrets/nginx.pass"
    2020/09/06 07:31:00.715215 [INFO] (runner) rendered "(dynamic)" => "/vault/secrets/nginx.pass"
root@LAP-INFO-28:/mnt/c/Users/cmonsieux/Desktop/IAC/kubernetes/yaml/simplePod# k exec -it pod/nginx-69955d8744-mwhmf -n web -- cat /vault/secrets/nginx.pass
Password1: PasswordUpdated1
Password2: PasswordUpdated2
ttl: 1m
 类似资料:
  • 当与后台程序集关联的Kubernetes Pod的configmap更新时,如何自动重新启动它们? 根据kubernetes文档,当configmap卷挂载更新时,它会自动更新POD。但是,我并不认为后台进程集会发生这种情况。我错过了什么? 当我更新configmap中的字段以读取另一个日志文件时,虽然我看到卷挂载正在更新,但我看不到POD正在接收更改,除非我删除并重新创建后台启动。 有没有一种方

  • 当我在一个节点上做了一个紧凑的工作时,它会抛出以下例外情况:

  • 问题内容: 如何在不重新启动servlet容器的情况下刷新Spring配置文件? 我正在寻找JRebel以外的解决方案。 问题答案: 对于那些最近在这上面绊脚石的人来说,解决此问题的当前和现代方法是使用Spring Boot的Cloud Config。 只需添加注释你刷新豆类和你的主/配置。 因此,例如,以下Controller类: 在Spring Boot Actuator上(通过HTTP端点或

  • 问题内容: 我的速度宏正在缓存中,我不希望它们存在……至少不在开发过程中。 我在属性文件中设置了以下属性… …但这似乎并没有解决问题 使用速度属性,如何配置速度以不缓存宏? (我正在使用速度1.6.4) 编辑: 我不认为这条线… …与速度有关 问题答案: 我一直在NVelocity(速度的C#端口)遇到相同的问题。深入研究它们的来源,我发现全局名称空间中宏的重新加载由以下属性控制。 我没有用速度进

  • 我读了几个类似的问题,这似乎是我能做的最好的。是否可以在dist上启用实时重新加载而无需完全重新启动应用程序? 顺便说一下,我的IDE是IntelliJ。我开始怀疑IntelliJ是否需要排除dist目录。如果是这样的话我会跟进的。

  • 我们正在使用JBoss Enterprise Application Platform server(即JBoss EAP 6.1)来开发使用Logback进行日志记录的新web应用程序。我们已经使用JBoss EAP好几个月了,一切都很好。此外,正如您所知,您可以在运行时在JBOSS上部署和取消部署应用程序和配置文件(如mail service.xml),也就是说,无需重新启动服务器。 但是,如