如何在 Windows 上使用 Datree 避免 Kubernetes 配置錯誤

複製和粘貼 Kubernetes 清單在 Kubernetes 開發人員和管理員中很常見。 但是,如果沒有對代碼進行分析和修改以適應集群的特定需求,這是有風險的。 許多錯誤配置來自複制和未解析的代碼。

每當 YAML 鍵值對包含不正確的值或未添加 livenessProbe 和資源限制等關鍵機制時,就會創建 Kubernetes 集群錯誤配置。 不正確的配置會危及集群的安全和健康。 因此,通過使用避免 Kubernetes 錯誤配置很重要數據樹這是一個 Kubernetes CLI,用於檢查和解析 Kubernetes 錯誤配置的 YAML 文件,提供檢測到的錯誤配置的詳細信息,以及刪除錯誤配置所需的操作。

本指南解釋瞭如何在 Windows 工作站上安裝和使用 Datree。

以前的要求

確保你已經在你的 Windows 工作站上安裝了 Kubectl。

如何在 Windows 上安裝 Datree

Datree CLI 掃描本地 YAML 文件以查找錯誤配置,並提供有關檢測到的漏洞的詳細信息。

  1. 在 Windows 工作站上打開 PowerShell。
  2. 在 PowerShell 中安裝 Datree:

                              
                                PS> iwr -useb https://get.datree.io/windows_install.ps1 | iex
    
                              
                            

    您將得到以下結果:

                              
                                Installing Datree...
    
    [V] Downloaded Datree
    [V] Finished Installation
    
    To run datree globally, please follow these steps:
    
        1. Run the following command as administrator: `setx PATH "$env:path;C:\Users\example\AppData\Local\datree" -m`
    
        2. Close and reopen your terminal.
    
    For more information, please visit https://datree.io
    
                              
                            

    用法:datree 測試 $home/.datree/k8s-demo.yaml

                              
                                    Run 'datree completion -h' to learn how to generate shell autocompletions
    
                              
                            
  3. 將 Datree 添加到系統路徑。 用回家的路代替 C:\users\example 在顯示的命令中。

                              
                                PS> setx PATH "$env:path;C:\Users\example\AppData\Local\datree" -m
    
                              
                            

    如果成功,您將得到以下結果。

                              
                                SUCCESS: Specified value was saved.
    
                              
                            
  4. 安裝 Datree 後關閉並重新啟動 Powershell。

  5. 運行以下 PowerShell 命令以驗證 Datree 是否已正確安裝。

                              
                                PS> datree version
    
                              
                            

    您將得到以下結果:

                              
                                1.5.25
    
                              
                            

如何使用 Datree 解析 YAML 文件

在本節中,您將學習如何使用 Datree 掃描服務文件。

  1. 創建一個名為 service.yaml 的 YAML 文件,該文件將包含名為 my-service 的服務的內容。
  2. 將以下內容添加到 service.yaml 文件中:

                              
                                apiVersion: v1
    kind: Service
    metadata:
      name: my-service
      namespace: earth
      labels:
        app: nginx
    spec:
      externalTrafficPolicy: Local
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 80
      selector:    
        app: nginx
      type: NodePort
    
                              
                            

    在成功通過 Datree 掃描之前,請勿將此 YAML 文件應用到您的集群。

  3. 使用以下命令掃描上述文件:

                              
                                PS> datree test service.yaml
    
                              
                            

您將從 Datree 獲得以下掃描結果:

                      
                            >>  File: service.yaml

    [V] YAML validation
    [V] Kubernetes schema validation

                      
                    

上述信息表示正在掃描的文件的名稱和正在驗證的組件。

掃描結果的以下部分包含在 service.yaml 文件中檢測到的錯誤配置。 service.yaml 文件包含由名為 NodePort 的服務類型導致的錯誤配置,該服務類型應該配置為 LoadBalancer。 NodePorts 的問題在於它們繞過了網絡安全。

                      
                            [X] Policy check

    ❌  Prevent Service from exposing node port  [1 occurrence]
        - metadata.name: my-service (kind: Service)
    💡  Incorrect value for key `type` - `NodePort` will open a port on all nodes where it can be reached by the network external to the cluster

                      
                    

解析結果的下一部分總結了策略驗證和 YAML 驗證。

                      
                            (Summary)

    - Passing YAML validation: 1/1

    - Passing Kubernetes (1.20.0) schema validation: 1/1

    - Passing policy check: 0/1

    +-----------------------------------+------------------------------------------------------+
    | Enabled rules in policy "Default" | 21                                                   |
    | Configs tested against policy     | 1                                                    |
    | Total rules evaluated             | 21                                                   |
    | Total rules skipped               | 0                                                    |
    | Total rules failed                | 1                                                    |
    | Total rules passed                | 20                                                   |
    | See all rules in policy           | https://app.datree.io/login?t=example                |
    +-----------------------------------+------------------------------------------------------+

                      
                    

通過修改 service.yaml 文件並將服務類型設置為 LoadBalancer 來刪除檢測到的錯誤配置:

                      
                            apiVersion: v1
    kind: Service
    metadata:
      name: my-service
      namespace: earth
      labels:
        app: nginx
    spec:
      externalTrafficPolicy: Local
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 80
      selector:    
        app: nginx
      type: LoadBalancer

                      
                    

掃描修改後的 service.yaml 文件。

                      
                            PS> datree test service.yaml

                      
                    

您現在應該看到以下輸出,表明修改後的服務沒有錯誤配置。

                      
                            (Summary)

    - Passing YAML validation: 1/1

    - Passing Kubernetes (1.20.0) schema validation: 1/1

    - Passing policy check: 1/1

    +-----------------------------------+------------------------------------------------------+
    | Enabled rules in policy "Default" | 21                                                   |
    | Configs tested against policy     | 1                                                    |
    | Total rules evaluated             | 21                                                   |
    | Total rules skipped               | 0                                                    |
    | Total rules failed                | 0                                                    |
    | Total rules passed                | 21                                                   |
    | See all rules in policy           | https://app.datree.io/login?t=example                |
    +-----------------------------------+------------------------------------------------------+

                      
                    

如何使用 Datree 掃描 pod

本節介紹如何使用 Datree 掃描 Pod。

  1. 創建一個名為 pod.yaml 的 YAML 文件並添加以下內容。

                              
                                apiVersion: v1
    kind: Pod
    metadata:
      name: pod-example
      namespace: mattermost
    spec:
      containers:
      - name: app
        image: gcr.io/google-samples/gb-frontend:v4
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
    
                              
                            
  2. 掃描文件。

                              
                                 PS> datree test pod-example.yaml
    
                              
                            
  3. 您將得到以下結果:

                              
                                >>  File: pod-example.yaml
    
    [V] YAML validation
    [V] Kubernetes schema validation
    
                              
                            

創建的 pod.yaml 文件有兩個錯誤配置,因為: readinessProbe livenessProbe 未添加任何屬性。 這些屬性在 Kubernetes 中至關重要,因為它們會在容器和應用程序失敗或失敗時提醒 Kubelet。

                      
                            [X] Policy check

    ❌  Ensure each container has a configured liveness probe  [1 occurrence]
        - metadata.name: pod-example (kind: Pod)
    💡  Missing property object `livenessProbe` - add a properly configured livenessProbe to catch possible deadlocks

    ❌  Ensure each container has a configured readiness probe  [1 occurrence]
        - metadata.name: pod-example (kind: Pod)
    💡  Missing property object `readinessProbe` - add a properly configured readinessProbe to notify kubelet your Pods are ready for traffic

    (Summary)

    - Passing YAML validation: 1/1

    - Passing Kubernetes (1.20.0) schema validation: 1/1

    - Passing policy check: 0/1

    +-----------------------------------+------------------------------------------------------+
    | Enabled rules in policy "Default" | 21                                                   |
    | Configs tested against policy     | 1                                                    |
    | Total rules evaluated             | 21                                                   |
    | Total rules skipped               | 0                                                    |
    | Total rules failed                | 2                                                    |
    | Total rules passed                | 19                                                   |
    | See all rules in policy           | https://app.datree.io/login?t=example                |
    +-----------------------------------+------------------------------------------------------+

                      
                    

要消除檢測到的錯誤配置,請通過添加 readinessProbe livenessProbe 特性:

                      
                            apiVersion: v1
    kind: Pod
    metadata:
      name: pod-example
    spec:
      containers:
      - name: app
        image: gcr.io/google-samples/gb-frontend:v4
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 8080
        readinessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 10
        livenessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 15
          periodSeconds: 20

                      
                    

掃描修改後的 service.yaml 文件。

                      
                            PS> datree test pod-example.yaml

                      
                    

您應該看到以下輸出,表明 Pod 不再在之前的 Datree 掃描中檢測到錯誤配置。

                      
                            (Summary)

    - Passing YAML validation: 1/1

    - Passing Kubernetes (1.20.0) schema validation: 1/1

    - Passing policy check: 1/1

    +-----------------------------------+------------------------------------------------------+
    | Enabled rules in policy "Default" | 21                                                   |
    | Configs tested against policy     | 1                                                    |
    | Total rules evaluated             | 21                                                   |
    | Total rules skipped               | 0                                                    |
    | Total rules failed                | 0                                                    |
    | Total rules passed                | 21                                                   |
    | See all rules in policy           | https://app.datree.io/login?t=example                |
    +-----------------------------------+------------------------------------------------------+

                      
                    

學到更多

有關 Datree 的更多信息,請參閱項目文件.

文章標題 名稱(可選) 電子郵件(可選) 描述

發送建議

相關文章