使用Kyverno自動標記Kubernetes資源

你填了嗎?git

10人將獲贈CNCF商店$100美圓禮券!github

來參與2020年CNCF中國雲原生調查web

Image

問卷連接(https://www.wjx.cn/jq/9714648...docker


客座文章做者:Nirmata業務發展和客戶成功副總裁Anubhav Sharma,最初在Nirmata的博客上發表。api

介紹安全

隨着Kubernetes已經成爲企業轉向雲原生的基本構建塊,過去幾年已經出現了許多簡化集羣建立過程的解決方案。可是,Kubernetes周邊的Day-2運營仍然是一個複雜的過程,會減緩採用速度,增長運營成本。Kubernetes的複雜性和技能差距仍然是阻礙企業採用Kubernetes的最大因素。微信

許多Day-2操做用例包括要求中央平臺團隊儘量有效地向開發人員交付安全和兼容的環境,並預先配置必要的服務和最佳實踐。這類用例的一些例子包括使用Kubernetes最佳實踐(如資源配額、網絡策略和pod安全性)來配置環境。這須要工具在環境建立時進行評估,而後按照中央平臺團隊定義的標準對環境進行配置。網絡

Kyverno:一個針對K8s的靈活的操做工具工具

Kubernetes提供了強大的構造,如准入控制webhook,能夠用於驗證和更改資源。Nirmata的Kyverno是專門設計用來使用聲明式範式處理這些類型的用例的。Kyverno是一個爲Kubernetes設計的開源策略引擎,它爲用戶提供了熟悉的結構來編寫定製規則,並可根據須要輕鬆實現驗證、修改和生成新資源。學習

大規模地管理Kubernetes須要遵循最佳實踐和跨配置應用標準化。其中一種模式是使用Kubernetes標籤。在Kubernetes中,每一個資源均可以有一個或多個標籤,Kubernetes使使用標籤查找和管理資源變得很容易。

Day-2操做的一個很是常見的用例是跨命名空間和pod管理標籤,以便其餘Kubernetes控制器和操做人員能夠輕鬆地實現證書更新、自助日誌/監控、備份等用例。

自動標記命名空間

下面是一個使用Kyverno在Kubernetes集羣中建立命名空間時如何實現命名空間標記的示例。

在集羣中安裝Kyverno:

kubectl create -f https://github.com/kyverno/kyverno/raw/master/definitions/install.yaml

這裏有詳細的安裝說明

下面是一個向命名空間添加標籤的示例Kyverno策略:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata: 
 name: add-labels
spec: 
 background: false
 rules:
 - name: add-ns-label
 match:
 resources:
 kinds: 
 - Namespace
 exclude:
 clusterroles: ["cluster-admin"]
 mutate: 
 patchStrategicMerge:
 metadata:
 labels:
 kyverno/user: "{{ request.userInfo.username }}"
 +(kyverno/network): "default"

該策略插入一個標籤'kyverno/user',其中包含發出API請求以建立命名空間的用戶的值。該策略還會插入一個標籤'kyverno/network',但只有在用戶還沒有指定標籤時纔會如此。這個簡單的策略演示了Kyverno中的一些強大功能,如變量替換條件錨

在集羣中配置了策略以後,建立一個新的命名空間,並自動驗證標籤已經添加到該命名空間。

建立一個新的命名空間:

kubectl create ns test

查看命名空間:

kubectl get ns test -o yaml

這應該顯示相似於:

apiVersion: v1
kind: Namespace
metadata:
 labels:
 kyverno/network: default
 kyverno/user: docker-for-desktop

如今,若是你想確保用戶不能更新特定的標籤,該怎麼辦呢?

Kyverno也讓這很容易作到!如下是一個阻止「kyverno/network」標籤更新的策略:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
 name: protect-label
spec:
 validationFailureAction: enforce
 background: false
 rules:
 - name: block-updates-for-label
 match:
 resources:
 kinds:
 - Namespace
 validate:
 message: Updating label `kyverno/network` is not allowed
 deny:
 - key: "{{ request.operation }}"
 operator: "EQUALS"
 value: UPDATE

總結

管理Kubernetes配置可能很複雜,策略引擎提供了標準化、自動驗證以及更改和生成配置的能力。

Kyverno是一個爲Kubernetes設計的開源政策引擎。它具備最小的學習曲線,併爲Kubernetes管理員提供了極大的靈活性,可使用Kubernetes強大的聲明式管理功能和原生工具解決Day-2操做挑戰。

瞭解Kyverno還能夠作什麼請到:

https://kyverno.io

點擊閱讀網站原文


CNCF (Cloud Native Computing Foundation)成立於2015年12月,隸屬於Linux  Foundation,是非營利性組織。
CNCF(雲原生計算基金會)致力於培育和維護一個廠商中立的開源生態系統,來推廣雲原生技術。咱們經過將最前沿的模式民主化,讓這些創新爲大衆所用。掃描二維碼關注CNCF微信公衆號。
image

相關文章
相關標籤/搜索