中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

K8s 平臺是怎么處理Pod預授權問題

發布時間:2021-12-16 10:06:56 來源:億速云 閱讀:157 作者:柒染 欄目:云計算

這篇文章將為大家詳細講解有關K8s 平臺是怎么處理Pod預授權問題,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

背景

**新部署業務或者擴容,如何對新設備進行預授權?**相信大家對這個問題并不陌生,基于安全考慮,公司內部往往重要組件、存儲都會對訪問請求進行來源控制,常見的如 CDB 的 IP 訪問授權,OIDB、VASKEY 命令字的模塊授權等。它們或者有自己的授權 WEB 可以讓用戶提單申請,或者提供授權 API 可以讓運維平臺調用。而路由系統往往在發現注冊時需要準確獲取 IP 設備的地域信息以提供就近訪問的能力,這就需要預注冊 CMDB。

在以前使用 CVM/TVM 部署業務時,這個問題可以較容易的處理,因為我們是預先拿到了一臺虛擬機,已經分配好了 IP 注冊好了 CMDB,業務要做的就是用這個 IP 去提單授權,部署業務程序,在一切完備后加上路由上線,這個過程是可以用運維平臺的流水線能力做成自動化。

區別于 VM 的拿到可用設備后的步驟型過程化部署,Kubernetes管理的是 Pod 從生產、IP 分配、業務容器啟動、路由維護的整個生命周期,由多個系統 Controller 的 Control Loop 做自動化的管理,基于鏡像的部署提供了業務實例的伸縮一致性保障,Pod 的銷毀重建變成常態,IP 也并非能固定下來。

業務往往面對多種預授權的需要,授權均值時間從秒級到幾分鐘不等,授權 API 大多并沒有設計為承載高 QPS,有一定的復雜性。我們需要能找到一種方法,在 Pod IP 分配后,業務容器起來前處理授權,阻塞住并保障成功后再進行后續過程,并且控制重建過程對授權API的壓力。

經過設計與迭代優化,TKEx-CSIG 平臺提供給了業務易用的產品能力化的授權能力,方便應對這類 Pod 預授權的問題。

架構和能力解析

架構

K8s 平臺是怎么處理Pod預授權問題

上圖所示是授權系統的架構,核心思路是使用 init Container 先于業務容器執行的特性,實現在業務 Pod 啟動前進行復雜的邏輯預處理。官方對 init Container 的定義如下

This page provides an overview of init containers: specialized containers that run before app containers in a Pod. Init containers can contain utilities or setup scripts not present in an app image

如果是小規模或單個業務的解決方案,我們是可以做的很簡單,在業務 Worklooad yaml 中注入 init Container,調用需要的授權 API 實現即可,而要做成平臺產品化的能力,還需要考慮以下幾點:

  • 易用與可維護

    需要充分考慮業務使用上的效率和可管理性,將權限作為一項資源由平臺記錄管理,減小變更對業務的侵入性影響。

  • 限頻與自愈

    權限 API 往往并沒有對高 QPS 的設計,需要限制調用保護下游。

  • 權限收斂

    安全性,Pod 的銷毀重建可能導致 IP 變化,考慮主動回收已經過期的權限

授權過程產品能力化

K8s 平臺是怎么處理Pod預授權問題

業務僅需在平臺 WEB 控制臺上登記需要的權限資源,配置權限組,關聯權限組到 Workload,平臺自動進行 init Container 的配置注入,通過 ENV 傳遞授權配置索引和相關信息,在 Pod 創建時進行授權過程。授權過程涉及的幾個組件功能設計如下:

  • init-action-client

    init Container,僅作一個觸發裝置,僅做一件事,就是發起 HTTP 調用請求,保持不可變,這樣當功能迭代時不必修改業務的 yaml,主邏輯后移處理

  • init-action-server

    deployment 部署可橫向擴展,執行預處理邏輯,預注冊 CMDB 等操作,并發起流水線調用,啟動權限的申請過程并輪詢查詢,將過程信息關聯 POD 暴露出來方便業務自查和管理員定位問題。后文提到的退避重試和斷路器邏輯也在這里實現。

  • PermissionCenter

    平臺管控組件,位于集群外,負責權限資源的存儲和實際申請。包含一個權限資源中心,存儲業務登記的權限詳情參數方便復用,提供權限 Set 組管理,簡化授權過程中的參數傳遞;使用生產者/消費者模式,基于 Pipline 實現授權 API 的調用和結果查詢。

斷路器和退避重試機制

K8s 平臺是怎么處理Pod預授權問題

可能導致授權過程的異常狀況不少,例如權限參數錯誤的配置,授權 API 服務質量下降或不可用,甚至是網絡原因導致的接口錯誤、超時等。授權 API 往往也并沒有設計支持高 QPS,我們采用超時重試,加斷路器和指數退避重試去做一個容錯性。

  • 超時重試

    體現在接口調用和異步任務的超時設置與重試機制,應對瞬時故障,init-action-client 容器非正常退出也會進行重建,每次創建就是新一輪的重試。

  • 斷路器

    使用一個 Configmap 專門記錄集群里 Pod 權限申請的失敗次數,3次即斷路不給申請。并提供一個重置能力,暴露給前端,讓用戶和管理員可以便捷進行重試。

  • 指數退避

    斷路器模式可以阻斷用戶配置錯誤這類永遠也不可能授權成功的案例,但是無法應對長時間的瞬時故障。比如裁撤期,授權 API 后端可能會有一段時間的拒絕服務,10分鐘到幾小時,此時會有大量 Pod 授權命中斷路器規則無法繼續授權,人為處理時效性差也繁瑣。我們為每個 Pod 添加了一個帶抖動的指數退避器并記錄最近的失敗時間戳,能夠在一段時間后允許嘗試一次,如果成功就重置對指定 Pod 的退避,如若不成功更新時間戳重新計時,參數如下,

bk := &PodBreaker{
    NamespacePod:   namespacePod,
    LastRequestFailTime: time.Now(),
    Backoff:        wait.Backoff{
        Duration: 2 * time.Minute,
        Factor:   2.0,
        Jitter:   1.0,
        Steps:    5,
        Cap:      1 * time.Hour,
    },
}

Finalizer 收斂權限

權限的收斂問題往往被忽略,但是也是安全需要考慮的,Pod 的銷毀重建可能是常態,IP 指不準也動態變化,長時間可能產生大量垃圾權限,或者已經授權過的 IP 分配到別的業務 Pod,產生安全風險。我們做了一個 Finalizer 控制器來在 Pod 銷毀前進行權限回收,回收動作是冪等性的,而且是盡力而為的,因為回收的能力也依賴于權限方是否具備回收能力,我們對新對接的權限都會考慮這一點,比如騰訊云 MySQL 的 IP 自動授權。

K8s 平臺是怎么處理Pod預授權問題

為了減少打 Finalizer 的動作,盡可能不影響非授權關心的 Pod,我們只在 Pod 進行了變更事件時識別有授權 init Container 的 Pod,Patch 上 Finalizer 標記,在這些 Pod 縮容銷毀時進行權限的回收并刪除 Finalizer,隨后 GC 會刪除這個 Pod。

kind: Pod
metadata:
  annotations:
~
  creationTimestamp: "2020-11-13T09:16:52Z"
  finalizers:
  - stke.io/podpermission-protection

關于K8s 平臺是怎么處理Pod預授權問題就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐平市| 太仓市| 若羌县| 互助| 太谷县| 房产| 大理市| 南安市| 盐城市| 通渭县| 常山县| 泸西县| 景宁| 成武县| 八宿县| 宕昌县| 抚宁县| 和顺县| 莆田市| 甘南县| 肇源县| 红桥区| 新疆| 湖北省| 泰和县| 漳州市| 罗城| 贞丰县| 宁阳县| 岳阳市| 漳浦县| 玛曲县| 铜陵市| 昌江| 安丘市| 望谟县| 六枝特区| 迁安市| 桃园市| 潮安县| 金昌市|