【问题标题】:spring-cloud-vault: min-renewal vs. expiry-thresholdspring-cloud-vault:最小续订与到期阈值
【发布时间】:2020-04-26 05:22:51
【问题描述】:

spring-cloud-vault Lease lifecycle management (renewal and revocation) 文档指出:

spring.cloud.vault.config.lifecycle.min-renewal: 设置更新租约前至少需要的持续时间。此设置可防止续订过于频繁。

spring.cloud.vault.config.lifecycle.expiry-threshold: 设置到期阈值。租约在到期前更新配置的时间段。

我很难理解这两个配置选项之间的区别。举例说明这些参数中的每一个如何影响租约续订生命周期,这将是有帮助的。例如:在我看来,如果租约 TTL 为 10 分钟,并且到期阈值设置为 1 分钟,那么在获得租约 9 分钟后,spring-cloud-vault 将续订租约。但如果这是真的,min-renewal 配置参数的用途是什么?

【问题讨论】:

    标签: spring-cloud-vault-config


    【解决方案1】:

    到期阈值控制续订租约的续订时间。

    例如:我似乎很清楚,如果租约 TTL 为 10 分钟,并且如果到期阈值设置为 1 分钟,那么在获得租约 9 分钟后,spring-cloud-vault 将续订租约.

    你的理解是正确的。

    min-renewal 呢?

    如果您的租约的剩余有效期少于 1 分钟(例如 30 秒),那么计算出的续订时间将是过去 30 秒(或者现在,因为我们无法安排过去发生的事情)。 min-renewal 有助于消除续订请求。这是因为,在这种情况下,刷新会立即发生。

    续订后,SecretLeaseContainer 会安排后续续订,报告租约有效期略小于 30 秒。如果剩余租约期限少于expiry-threshold,我们不希望创建一个循环,通过续订请求冲击您的 Vault 服务器。

    例子:

    • expiry-threshold:60 秒
    • min-renewal:10 秒

    以下事件列表以时间相关性显示假设 TTL 是最终的且无法延长的时间会发生什么:

    • 10:00:00 获得租约。 TTL 10 分钟(600 秒)。在 9 分钟内安排续租(10 minutes TTL - 1 minute 到期阈值 -> 9 minutes
    • 10:09:00 续租。剩余 TTL 1 分钟(60 秒)。在 10 秒内安排租约续订(1 minute TTL - 1 minute 到期阈值 -> 0 分钟。回退到 10 seconds min-renewal,因为这是较大的值 -> 10 seconds)。
    • 10:09:10 续租。剩余 TTL 50 秒。在 10 秒内安排续租(50 seconds TTL - 1 minute 到期阈值 -> -10 seconds。回退到 10 秒最小续订,因为这是较大的值 -> 10 秒)。
    • (继续直到到达10 seconds
    • 10:09:50 续租。剩余 TTL 小于10 seconds。 Min-renew 大于剩余 TTL,租约被视为过期。

    到期阈值大于最小续订的示例:

    • expiry-threshold:5 分钟(180 秒)
    • min-renewal:6 分钟(360 秒)

    以下事件列表以时间相关性显示假设 TTL 是最终的且无法延长的时间会发生什么:

    • 10:00:00 获得租约。 TTL10 minutes(600 秒)。在 6 分钟内安排续租(10 minutes TTL - 5 minute 到期阈值 -> 5 minutes。Min-renewal 设置为 6 分钟以在 6 minutes 中最多发出一次续约 -> 6 minutes

    • 10:06:00 获得租约。 TTL4 minutes(360 秒)。在 6 分钟内安排续租(4 minutes TTL - 5 minute 到期阈值 -> -1 minutes.6 minutes min-renewal,因为它大于剩余的 TTL,因此租约被视为过期)

    【讨论】:

    • 谢谢。这会有所帮助,但我认为如果您继续通过提供具体示例来准确说明最小续订如何影响您的示例中的租约续订,则可能会更清楚。将此值设置为小于或等于到期阈值的正值是否有意义?如果它大于过期阈值会发生什么?
    • 嗯。现在我很好奇为什么这个逻辑甚至首先存在。也许我需要找到正确的地方来询问 spring-cloud-vault 开发人员。 Vault 会披露 max_ttl 作为其响应的一部分,以及租约是否可续订。如果租约是不可更新的(TTL 是最终的),那么一旦 TTL
    • 这种安排有多种原因。在构建SecretLeaseContainer 时,max_ttl 不是响应的一部分,因此 Spring Vault 无法知道 TTL 可以延长多长时间。使用max_ttl,当绝对剩余 TTL 小于阈值时,可以消除最后的往返。另一个原因是min-renewal 可用于通过考虑租约过期而不是触发续订请求来对请求进行去抖动(某种速率限制器)。
    • spring.cloud.vault: config.lifecycle: enabled: true // 默认为true min-renewal: 10s expiry-threshold: 1m lease-endpoints: Legacy 如果不发送任何值怎么办min-renew、expiry-threshold 和 lease-endpoints ..它们是否有任何默认值?还是不会续约?
    猜你喜欢
    • 2016-05-12
    • 2018-07-04
    • 2016-12-26
    • 2021-03-02
    • 2018-01-12
    • 2018-09-04
    • 2018-05-21
    • 1970-01-01
    • 2015-12-03
    相关资源
    最近更新 更多