你填了吗?
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/v1kind: ClusterPolicymetadata: name: add-labelsspec: 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: v1kind: Namespacemetadata: labels: kyverno/network: default kyverno/user: docker-for-desktop
当初,如果你想确保用户不能更新特定的标签,该怎么办呢?
Kyverno也让这很容易做到!以下是一个阻止“kyverno/network”标签更新的策略:
apiVersion: kyverno.io/v1kind: ClusterPolicymetadata: name: protect-labelspec: 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微信公众号。