你填了吗?
10 人将获赠 CNCF 商店 $100 美元礼券!
来参加 2020 年 CNCF 中国云原生考察
问卷链接(https://www.wjx.cn/jq/9714648…)
客座文章作者:Nirmata 业务倒退和客户胜利副总裁 Anubhav Sharma,最后在 Nirmata 的博客上发表。
介绍
随着 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 微信公众号。