Kubernetes YAML最佳實踐和策略
阿新 • • 發佈:2020-11-03
Kubernetes工作負載最常用YAML格式的檔案來定義。
YAML的問題之一就是很難描述清單檔案之間的約束或關係。
如果你希望檢查是否已從受信任的登錄檔中提取部署到群集中的所有映像,該怎麼辦?
如何防止沒有Pod安全策略的工作負載提交到叢集?
整合靜態檢查可以在更接近開發生命週期的時間內捕獲錯誤和違反策略的行為。
並且由於改善了資源定義的有效性和安全性,因此你可以相信生產工作負載遵循最佳實踐。
Kubernetes YAML檔案的靜態檢查生態系統可以分為以下幾類:
- API驗證程式:此類工具針對Kubernetes API伺服器驗證給定的YAML清單。
- 內建檢查器:此類工具捆綁了針對安全性,最佳實踐等的自覺檢查。
- 自定義驗證器:此類工具允許使用多種語言(例如python和Javascript)編寫自定義檢查。
在本文中,你將學習到六個不同的工具:
```bash
Kubeval
Kube-score
Config-lint
Copper
Conftest
Polaris
```
Let's Go ~~~
### 基準服務
首先部署一個基準服務,以便後面測試對比
```yaml
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
```
部署完成並驗證如下:
```shell
[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.2