https://itnext.io/great-cks-kubernetes-security-exam-preparation-guide-to-help-you-pass-14fe5ab30ce1
本文是作者的心路歷程分享分享文,想要探討什麼是 Certified Kubernetes Security(CKS) Specialist 以及如果要準備這個考試可以如何準備
CKS
1. 根據 CNCF 官網的介紹, CKS 測驗是用來確認 CKS 能夠擁有與掌握如何安全的管理 Kubernetes Clusters,安全的概念包含安全的去處理這些 Container 以及整個 Kubernetes 平台的安全性(建置,部署,運行等所有階段)
2. 考取 CKS 之前要先通過 CKA (Certified Kubernetes Administrator) 的測試
3. Kubernetes 官網上其實有非常多的文件與操作說明, CKS 更像是一個幫助你去挑戰自我,確認自己有能力與知識去處理 k8s 安全相關的設定與操作。
如何準備 CKS
作者列舉了幾個重點概念
1. Docker Image 實作上的最佳實踐
2. 理解下列內容
a. CIS Kube-bench
b. Trivy
c. Sysdig/Falco
d. AppArmor
e. Seccomp
f. OPA/Gatekeeper
3. Linux 基礎理解,特別是 cGroup
4. Kubernetes 架構以及相關元件,譬如 RBAC, NetworkPolicy, PSP 等
5. API Server 相關操作,包含 Admission control, Audit 以及如何除錯
作者於文章後半部分列出了很多文章與影片連結,資源非常豐富,其中還提到 CKS/CKA/CKAD 的模擬器 (https://killer.sh/),對於該考試有興趣的一定要使用這些資源來練習
最後列出一些純 k8s 的一些考試內容
1. Admission controllers.
請確保你熟悉各種不同類型,如 PodSecurityPolicy,ImagePolicyWebhook 的實作與差異,並一定要知道這些是如何跟 API Server 互動的。
2. Immutable containers
如何使用 securitycontext 創造一個 Immutable 的容器並且避免一些可能會造成 mutable 的操作
3. Network Policy
4. PodSecurityPolicy(隨者 OPA 的發展,這個考試內容將會慢慢的被捨去)
5. gVisor
對於 CKS 考試有興趣的建議看看本篇文章,其中文章內有滿多跟安全相關的影片與文章也都值得閱讀
「k8s network」的推薦目錄:
- 關於k8s network 在 矽谷牛的耕田筆記 Facebook 的最讚貼文
- 關於k8s network 在 矽谷牛的耕田筆記 Facebook 的最讚貼文
- 關於k8s network 在 矽谷牛的耕田筆記 Facebook 的最佳解答
- 關於k8s network 在 SIG Network 的評價
- 關於k8s network 在 [Kubernetes] Network Policy Overview | 小信豬的原始部落 的評價
- 關於k8s network 在 Linux Network Namespaces - kubernetes tutorial - YouTube 的評價
- 關於k8s network 在 Default Network Policy in K8s - kubernetes 的評價
k8s network 在 矽谷牛的耕田筆記 Facebook 的最讚貼文
這次帶來的是個人的原創文章「從網路觀點來看導入 Kubernetes 的可能痛點
」,就我個人的理解與經驗跟大家討論導入 Kubernetes 到現有環境中會遇到的各種網路問題。
雲端平台的方便性使得架設 Kubernetes 簡單容易上手,然而對於地端環境來說,要導入 Kubernetes 並沒有想像中的簡單。團隊服務沒有辦法一夜轉換到 Kubernetes 的情況下,最麻煩的便是轉換過渡期中要如何讓 k8s 與現有架構整合。
Kubernetes 原生的 Service 與 CNI 架構為其提供低門檻的使用方式,讓 Kubernetes 運作起來不需要太深的網路背景與概念即可順利使用。本篇文章就地端環境來討論幾個可能需要的網路情境,而這些情境為什麼於 Kubernetes 內難以實現與完成,如果真的有需求時可以用何種角度與方式去解決。
長話短說就是本篇文章探討如何透過 Multus/DANM 等 Metaplugin CNI 搭配 SR-IOV/DHCP/Static CNI/IPAM 來滿足
1. Pod 固定 IP
2. K8s 叢集支援多個底層網路,針對需要讓不同流量走不同底層網路
3. 不同強度的網路隔離
https://www.hwchiu.com/k8s-network-issue.html
k8s network 在 矽谷牛的耕田筆記 Facebook 的最佳解答
本文是一篇 2017 年的文章,雖然已經四年之久,但是我認為本篇文章值得一讀。
作者團隊於 2017 年時正在經歷如何將 VM 上的各種 Java 應用程式轉移到 Kubernetes 內的 Container,而本篇文章則是探討到底 Container 是如何透過 Linux Control Group 以及 namespace 實作的,透過對這些底層實作的瞭解,才有辦法針對 Container 效能部分去除錯與提升。
這種文章探討的都是很底層的概念,建議所有人都閱讀一遍,好好複習關於 cgroups/namespace 的概念,透過對這些概念的理解與掌握,能夠更有系統的去解釋何謂Docker Container,何謂輕量級虛擬化。
以下幫大家節錄一些重點,還是推薦自行閱讀全文
1. cgroup 用來隔離與限制 CPU,Memory,Disk,Network Bandwidth 等資源的用量
2. namespace 則是用來限制 ipc, pid, mount ,network, utc 等資訊的可視性,不同 namespace 內看到的資訊是獨立的,但是最終彼此還是屬於同一個 Kernel。
3. 任何沒有被 cgroup 規範的應用程式都會被自動包含到 root cgroup 的規範,不同發行版其位置不同,譬如 /sys/fs/cgropu.
假設今天透過 docker run 去運行一個 java 應用程式
a. Docker 會創建一個 pid namespace,接者運行 Java 前先把該應用程式給掛到新的 pid namespace 上並且賦予該 java 應用程式 PID 1
註: Host 上還是可以觀察到該 Java 應用程式,因為除了 Host 本身外,每個 pid namespace 都有自己的老爸,而老爸是可以看到小孩資訊的,這意味 docker dameon 雖然創建新的 pid namespace,但是host的pid namespace 實際是新 namespace 的老爸
b. 從老爸的視角來看,可以看到該 Java 應用程式也會有一個不同的 PID,而這個 PID 也會於 cgroup 系統中有自己的設定
4. CPU Cgroup 則是會用 share 為單位來定義每個 task 可以獲得多少相對的 CPU 時間,相對的算法是去計算 task 擁有的 share 數量佔了整個 cgroup 階層元件中的多少百分比。
舉例: 捨去其他服務單純考慮運行三個 Container 且有 4 Core CPU 的環境,三個 Container Task 分別給予 2048,1024,1024 share 的話,第一個 Container 大致是會被分配到兩個 CPU Time
5. CPU shares 沒有辦法去保證每個 task 最小用量是多少,所以需要透過 CPU Quotas 的概念來設定 CPU.cfs_quota_us(假設使用 CFS 這個排成演算法)以及 CPU.cfs_period_us(預設100ms)。
概念大概就是 cfs_period_us 定義的時間內,你最小可以使用多少時間,所以假如設定 cfs_quota_us 為 100ms,則預設情況下該 process 可以使用的量就是 100ms/100ms = 1 ~= 1 Core CPU
k8s 與上述的相關bug 可參考下列 issue
https://github.com/kubernetes/kubernetes/issues/67577
6. JVM 看到的是系統上全部的 CPU 資源,但是 Contaienr 本身當被限制 CPU 用量時,會有資訊落差,造成 GC 運行的效果不如預期,因為其認為系統有超多 CPU,而不知道自己其實被限制的CPU很少。
原文滿精彩的,推薦閱讀
https://engineering.squarespace.com/blog/2017/understanding-linux-container-scheduling
k8s network 在 [Kubernetes] Network Policy Overview | 小信豬的原始部落 的推薦與評價
network policy 是k8s 在 v1.7 版後正式支援的功能,在k8s 中是一組用來定義pod 之間(或是與endpoint) 之間是否能夠互相通訊的規範,並以 ... ... <看更多>
k8s network 在 Linux Network Namespaces - kubernetes tutorial - YouTube 的推薦與評價
![影片讀取中](/images/youtube.png)
... you are going to learn the concepts of kubernetes - Network Namespaces. we are also going to see a demo on Network Namespaces as well. ... <看更多>
k8s network 在 SIG Network 的推薦與評價
沒有這個頁面的資訊。 ... <看更多>