k8s_cache

原始碼 首頁

啟用方式
k8s_cache:github.com/delta10/k8s_cache

k8s_cache 是一個快取外掛程式,可為指定的 Pod 進行提前刷新

說明

這是 cache 的分支。它增加了一個選項,可以優先將刷新的正面快取項目發送到具有標籤 k8s-cache.coredns.io/early-refresh=true 的 Pod。其他 Pod 則只在指定的持續時間後才會收到。這使得基於使用 DNS 解析的網域名稱,並使用 穩定的 FQDNNetworkPolicies 來實現穩定的 NetworkPolicy 白名單成為可能。

此實作使用一個額外的快取儲存區,稱為「晚期快取」,它會延遲數秒。過期時,晚期快取中的項目會被早期快取中的項目取代(如果存在)。當請求傳入時,此外掛程式通常會先檢查回應是否快取在晚期快取中,然後再檢查早期快取。如果來源 IP 符合具有標籤 k8s-cache.coredns.io/early-refresh=true 的 Pod,則會跳過晚期快取,並立即查詢早期快取。

此外掛程式旨在取代 cache 外掛程式,不應與它一起使用。

我們將盡力使此外掛程式的程式碼與 cache 同步。

語法

k8s_cache [TTL] [ZONES...] {
    earlyrefresh [DURATION]
    success CAPACITY [TTL] [MINTTL]
    denial CAPACITY [TTL] [MINTTL]
    prefetch AMOUNT [[DURATION] [PERCENTAGE%]]
    serve_stale [DURATION] [REFRESH_MODE]
    servfail DURATION
    disable success|denial [ZONES...]
    keepttl
}

有關詳細資訊,請參閱 cache 文件。此外掛程式增加了一個參數,並稍微修改了其他一些參數的含義。

  • earlyrefresh 設定 持續時間(例如,「5s」),在此期間,具有 early-refresh 標籤的 Pod 會收到新的回應。此選項實際上會為沒有提前刷新標籤的 Pod 增加 成功回應的快取持續時間。每個用戶端都會收到針對它的目前快取持續時間作為 TTL 回應。
  • prefetch 其運作方式與 cache 中相同,但它使用早期快取的過期時間來計算是否應進行預先擷取。
  • serve_stale 其運作方式與 cache 中相同,但 持續時間 是從早期快取的過期時間開始計算的。對於快取在晚期快取中的正面回應,serve_stale 僅在晚期快取過期時才開始生效。在晚期快取過期後,過時的服務將持續 持續時間 減去 earlyrefresh 的持續時間。具有提前刷新標籤的 Pod 永遠不會收到過時的回應。

範例

保持 10000(預設)的正面和負面快取大小,並將快取刷新提前 5 秒發送到具有提前刷新標籤的 Pod。

.:5300 {
  k8s_cache {
    success 10000
    denial 10000
    earlyrefresh 5s
  }
  forward . 8.8.8.8
}

有關一般快取範例,請參閱 cache 文件