Kubernetes YAML最佳实践和策略

本文介绍了在Kubernetes中用于检查YAML文件的工具,包括kubeval、kube-score、Config-lint、Copper、Conftest和Polaris。这些工具帮助验证API模式、评估最佳实践和安全策略,支持自定义检查。例如,kubeval通过API模式验证YAML,kube-score则对清单进行评分。Config-lint和Copper允许编写自定义检查,而Conftest使用Rego语言。Polaris提供了内置和自定义检查的组合。选择合适的工具取决于特定的验证需求。
摘要由CSDN通过智能技术生成

Kubernetes工作负载最常用YAML格式的文件来定义。

YAML的问题之一就是很难描述清单文件之间的约束或关系。
如果你希望检查是否已从受信任的注册表中提取部署到群集中的所有映像,该怎么办?
如何防止没有Pod安全策略的工作负载提交到集群?
集成静态检查可以在更接近开发生命周期的时间内捕获错误和违反策略的行为。
并且由于改善了资源定义的有效性和安全性,因此你可以相信生产工作负载遵循最佳实践。

Kubernetes YAML文件的静态检查生态系统可以分为以下几类:

  • API验证程序:此类工具针对Kubernetes API服务器验证给定的YAML清单。
  • 内置检查器:此类工具捆绑了针对安全性,最佳实践等的自觉检查。
  • 自定义验证器:此类工具允许使用多种语言(例如python和Javascript)编写自定义检查。

在本文中,你将学习到六个不同的工具:

Kubeval
Kube-score
Config-lint
Copper
Conftest
Polaris

Let's Go ~~~

基准服务

首先部署一个基准服务,以便后面测试对比

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-echo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: http-echo
  template:
    metadata:
      labels:
        app: http-echo
    spec:
      containers:
      - name: http-echo
        image: hashicorp/http-echo
        args: ["-text", "hello-world"]
        ports:
        - containerPort: 5678
---
apiVersion: v1
kind: Service
metadata:
  name: http-echo
spec:
  ports:
  - port: 5678
    protocol: TCP
    targetPort: 5678
  selector:
    app: http-echo

部署完成并验证如下:

[root@k8s-node001 Test]# kubectl  get po
NAME                            READY   STATUS    RESTARTS   AGE
http-echo-57dd74545-rtxzm       1/1     Running   0          65s
http-echo-57dd74545-trst7       1/1     Running   0          65s

[root@k8s-node001 Test]# kubectl  get svc
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
http-echo        ClusterIP   10.102.221.64   <none>        5678/TCP         70s

[root@k8s-node001 Test]# curl  10.102.221.64:5678
hello-world

以上YAML文件能部署成功,但是,它遵循最佳做法吗?

Let's start.

kubeval

kubeval的前提是与Kubernetes的任何交互都通过其REST API进行。
因此,可以使用API模式来验证给定的YAML输入是否符合该模式。

安装kubeval

wget https://github.com/instrumenta/kubeval/releases/latest/download/kubeval-linux-amd64.tar.gz
tar xf kubeval-linux-amd64.tar.gz
cp kubeval /usr/local/bin

现在我们来改下base.yaml,删除

  selector:
    matchLabels:
      app: http-echo

然后使用kubeval对base.yaml检查

[root@k8s-node001 Test]# kubeval  base.yaml
WARN - base.yaml contains an invalid Deployment (http-echo) - selector: selector is required
PASS - base.yaml contains a valid Service (http-echo)

输出看到一个WARN,提示selector是必须的字段
然后恢复selector,再次检查

[root@k8s-node001 Test]# kubeval  base.yaml 
PASS - base.yaml contains a valid Deployment (http-echo)
PASS - base.yaml contains a valid Service (http-echo)

检查PASS

kubeval之类的工具的优势在于,咱们可以在部署周期的早期发现此类错误。
另外,您不需要访问集群即可运行检查-它们可以脱机运行。
默认情况下,kubeval会根据最新的未发布的Kubernetes API模式验证资源。
更多用法详情请参见官网

kube-score

kube-score会对你提供的YAML清单进行分析,并针对集群的内置检查对其进行评分。
kube-score提供在线版和离线
本文偷懒就用在线版了
首先打开https://

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值