「K8S 生態週報」內容主要包含我所接觸到的 K8S 生態相關的每週值得推薦的一些資訊。歡迎訂閱知乎專欄「k8s生態」。
Istio 即將釋出重大安全更新,多個版本受影響
Istio 產品安全工作組近期發現 Istio 中存在一些安全漏洞,其中 最高階別的漏洞被評級為高嚴重性。
鑑於當前 Istio 的漏洞披露政策,所以目前我們不會透露具體的漏洞細節。
在一週後的 2 月 22 日,將會發布 Istio v1.11.7、v1.12.3 和 v1.13.1 版本修正這些安全漏洞。屆時會再更新漏洞的詳細內容。
請參考官方通告
此外,本週 Istio 也釋出了 v1.13.0 正式版, 在 v1.13.1 版本釋出前,我不建議大家將自己所用的 Istio 升級到 v1.13.0 。
雖然不建議現在升級,但我們也可以關注下 v1.13.0 帶來的一些值得關注的變更:
v1.13.0 版本中為東西向流量提供了基於主機名的多網路閘道器支援。主機名可以在控制面中被解析,解析記錄可被用作 endpoint。
如果你不需要這個行為,或者想要恢復到之前版本中的預設行為,可以為 istiod 新增 RESOLVE_HOSTNAME_GATEWAYS=false
的配置。
此外,它還支援重寫 gRPC 探針,以及通過 proxyMetadata
提供了在 Envoy 工作執行緒間的重平衡,並且通過學習 Kubernetes 的探測
行為,改善了 istio-agent 健康檢查的探測,這樣它就不會再重用連線了。請參考 #36390 。
同時我們會發現在這個版本中它對 Telemetry API 的支援增加了不少,尤其是它為 access log 支援了
Common Expression Language (CEL) filter 。如果你覺得對 CEL 有些陌生,那麼你可以看下我之前的文章 《K8S 生態週報| Kubernetes v1.23.0 正式釋出,新特性一覽》 ,其中就介紹到了在 Kubernetes v1.23 中對 CEL 的支援。(這樣看起來 CEL 的儲備很正確)
最後,就是 Istio 終於把 iptables 相關處理程式碼中對 22 埠硬編碼的部分去掉了,可以通過 ISTIO_LOCAL_EXCLUDE_PORTS
進行配置。這段程式碼其實存在很久了,這是 Istio 為了相容在虛擬機器 VM 上的用例專門加的。
更多關於 Istio v1.13.0 版本的資訊請參考其 ReleaseNote
Kyverno v1.6.0 正式釋出
Kyverno 是 Kubernetes 上原生的策略引擎,它主要的實現原理是利用 Kubernetes 提供的 Admission controller 機制。關於 Kubernetes Admission controller 機制可以參考我之前的文章:《搞懂 Kubernetes 准入控制(Admission Controller)》 。
這個版本提供了很多有趣的功能,我挑幾個特別值得關注的特性吧:
- 基於 sigstore Cosign 的映象驗證策略規則已進入到 beta 階段。關於 Cosign 如何使用,可以參考我之前的文章 雲原生時代下的容器映象安全(上)。
在這個版本中其實增加了包括 keyless, annotation 等相關的很多增強,這個特性也非常的方便; - 可以在 Kyverno 策略中直接使用 OCI 容器映象相關的元資訊了,比如檢查映象的 label,掛載卷以及一些其他的配置。
比如,一種常見的使用場景是我們希望容器映象不要過大,那麼就可以使用如下的策略檔案來限制叢集內使用體積過大的容器映象了。
如下策略檔案表示僅允許使用體積小於 2Gi 的容器映象,如果映象過大,則直接拒絕。
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: images
spec:
validationFailureAction: enforce
rules:
- name: only-allow-small-images
match:
resources:
kinds:
- Pod
preconditions:
all:
- key: "{{request.operation}}"
operator: NotEquals
value: DELETE
validate:
message: "images with size greater than 2Gi not allowed"
foreach:
- list: "request.object.spec.containers"
context:
- name: imageSize
imageRegistry:
reference: "{{ element.image }}"
# Note that we need to use `to_string` here to allow kyverno to treat it like a resource quantity of type memory
# the total size of an image as calculated by docker is the total sum of its layer sizes
jmesPath: "to_string(sum(manifest.layers[*].size))"
deny:
conditions:
all:
- key: "2Gi"
operator: LessThan
value: "{{imageSize}}"
此外,這個版本中還增加了很多有用的函式,可用於進行資料處理。
更多詳細內容可參考其 ReleaseNote
Trivy v0.23.0 正式釋出
Trivy 是一款簡單易用的漏洞掃描工具,關於 Trivy 我之前已經寫過很多篇文章了,這裡就不贅述了。近期它釋出了 v0.23.0 版本,這個版本中有一些值得關注的內容:
- Trivy DB 原先是通過使用 https://github.com/aquasecuri... 專案的 GitHub Release 進行下載的,但是目前如果出現大量重複下載,會觸發 GitHub 的限流策略。所以現在選擇將 Trivy DB 切換為使用 GitHub Container Registry 進行託管了。這樣一方面可以規避掉 GitHub 限流的問題,另一方面也可以可以利用 ghcr.io 提供的資料分析工具等。 需要注意的是,這是一個破壞性變更。
- Trivy 現在可以直接從 Azure 的 ACR 下載映象並進行掃描了,不再需要安裝 az 工具,或者預先下載映象了;
更多詳細內容可參考其 ReleaseNote
上游進展
- #107695 · kubernetes/kubernetes 這個 PR 實際上是對 Kubelet 管理的 Static Pod 生命週期部分的一個修正。我們都知道 Static Pod 的生命週期是不受 kube-apiserver 影響的,並且是由 Kubelet 管理的。但是之前幾個相關的 issue 和 PR 都並沒有覆蓋到重啟 Pod 時候需要名稱完全相同。這個 PR 中對其邏輯進行了修正,增加了 Pod 的完整名稱;
- #107775 · kubernetes/kubernetes 如果排程過程中,Pod 搶佔失敗,則在 event 中為其增加詳細內容。這對於我們去除錯問題來說是非常有幫助的;
- #107317 · kubernetes/kubernetes 當前 Kubernetes 倉庫中 in-tree 的 dockershim 元件的程式碼已經刪除,其他相關元件比如 kubelet 中的清理也基本完成了。這個 PR 中完成了 kubeadm 對於移除 in-tree dockershim 的相關支援和邏輯,主要是變更預設的容器執行時的配置,訪問地址等。關於 Kubernetes 移除 in-tree 的 dockershim 相關內容的詳細內容可檢視我之前的文章 《K8S 棄用 Docker 了?Docker 不能用了?別逗了!》。我在本週五( 2 月 18 日)晚上,也會做一場直播,和 SUSE Rancher 的兩位小夥伴一起聊聊關於 Kubernetes 移除 dockershim 後,企業使用者如何處理的話題。
題外話
最近一段時間沒有持續更新,感謝大家的關注。這段時間主要是兩方面的原因,一方面是在進行個人的休整,另一方面也是事情較多。
不過,從這篇開始,「K8S 生態週報」將會正常的恢復每週更新啦!希望不斷更!
歡迎訂閱我的文章公眾號【MoeLove】