Tutoriales

Herramientas para encontrar varios problemas en Kubernetes

ojo fresco es una herramienta de inspección para Kubernetes.Descubre si un recurso de Kubernetes es (usando OPA ), componentes de clúster, nodos de clúster (mediante el uso Detector de problemas de nodo), otras configuraciones siguen las mejores prácticas y sugieren modificaciones en consecuencia.

KubeEye admite reglas de inspección personalizadas e instalación de complementos.y Operador KubeEyepuede ver visualmente los resultados de la detección y las sugerencias de modificación en la consola web.

arquitectura

KubeEye obtiene detalles de los recursos del clúster a través de la API de Kubernetes, comprueba las configuraciones de los recursos mediante la comprobación de reglas y complementos, y genera resultados de comprobación. La arquitectura de KubeEye es la siguiente:

Instalar y usar KubeEye

  1. Instale KubeEye en su máquina.

    NOTA: Los archivos de KubeEye estarán en /usr/local/bin/ en su máquina. git clonar cd kubeeye hacer installke

  2. (Opcional) Instalar Detector de problemas de nodoNOTA: Si desea informes detallados, ejecute el siguiente comando y NPD se instalará en su clúster. kubeeye instalar npd
  3. Ejecute KubeEye para inspeccionar el clúster.

Nota: Los resultados de KubeEye se ordenan por tipo de recurso.

kubeeye audit
KIND          NAMESPACE        NAME                                                           REASON                                        LEVEL    MESSAGE
Node                           docker-desktop                                                 kubelet has no sufficient memory available   warning    KubeletHasNoSufficientMemory
Node                           docker-desktop                                                 kubelet has no sufficient PID available      warning    KubeletHasNoSufficientPID
Node                           docker-desktop                                                 kubelet has disk pressure                    warning    KubeletHasDiskPressure
Deployment    default          testkubeeye                                                                                                                  NoCPULimits
Deployment    default          testkubeeye                                                                                                                  NoReadinessProbe
Deployment    default          testkubeeye                                                                                                                  NotRunAsNonRoot
Deployment    kube-system      coredns                                                                                                               NoCPULimits
Deployment    kube-system      coredns                                                                                                               ImagePullPolicyNotAlways
Deployment    kube-system      coredns                                                                                                               NotRunAsNonRoot
Deployment    kubeeye-system   kubeeye-controller-manager                                                                                            ImagePullPolicyNotAlways
Deployment    kubeeye-system   kubeeye-controller-manager                                                                                            NotRunAsNonRoot
DaemonSet     kube-system      kube-proxy                                                                                                            NoCPULimits
DaemonSet     k          ube-system      kube-proxy                                                                                                            NotRunAsNonRoot
Event         kube-system      coredns-558bd4d5db-c26j8.16d5fa3ddf56675f                      Unhealthy                                    warning   Readiness probe failed: Get " dial tcp 10.1.0.87:8181: connect: connection refused
Event         kube-system      coredns-558bd4d5db-c26j8.16d5fa3fbdc834c9                      Unhealthy                                    warning   Readiness probe failed: HTTP probe failed with statuscode: 503
Event         kube-system      vpnkit-controller.16d5ac2b2b4fa1eb                             BackOff                                      warning   Back-off restarting failed container
Event         kube-system      vpnkit-controller.16d5fa44d0502641                             BackOff                                      warning   Back-off restarting failed container
Event         kubeeye-system   kubeeye-controller-manager-7f79c4ccc8-f2njw.16d5fa3f5fc3229c   Failed                                       warning   Failed to pull image "controller:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for controller, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
Event         kubeeye-system   kubeeye-controller-manager-7f79c4ccc8-f2njw.16d5fa3f61b28527   Failed                                       warning   Error: ImagePullBackOff
Role          kubeeye-system   kubeeye-leader-election-role                                                                                          CanDeleteResources
ClusterRole                    kubeeye-manager-role                                                                                                  CanDeleteResources
ClusterRole                    kubeeye-manager-role                                                                                                  CanModifyWorkloads
ClusterRole                    vpnkit-controller                                                                                                     CanImpersonateUser
ClusterRole                    vpnkit-controller                                                                                           CanDeleteResources

Cómo KubeEye puede ayudarte

  • Comprueba los recursos del clúster con las mejores prácticas de Kubernetes para garantizar un funcionamiento estable del clúster.
  • Detecte problemas en el plano de control del clúster, incluidos kube-apiserver, kube-controller-manager, etc.
  • Detecta problemas de nodos, incluidos la memoria, la CPU, la presión del disco y los registros de errores inesperados del kernel.

Lista de Verificación

ya sea Verificar Artículo describir gravedad
Escalada de privilegios permitida Permitir la escalada de privilegios. Peligro
Puede suplantar al usuario Role/ClusterRole puede suplantar a los usuarios. advertir
Puede modificar los recursos Role/ClusterRole puede eliminar recursos de Kubernetes. advertir
Se puede modificar la carga de trabajo Role/ClusterRole puede modificar los recursos de Kubernetes. advertir
Sin límite de CPU No se establece ningún límite de CPU. Peligro
Sin solicitudes de CPU No se reservan recursos de CPU. Peligro
capacidad de alto riesgo Habilite funciones de alto riesgo como ALL, SYS_ADMIN y NET_ADMIN. Peligro
Host IPC permitido HostIPC está configurado para true. Peligro
La red anfitriona permite La red host está configurada para true. Peligro
PID de host permitido HostPID está configurado para true. Peligro
puerto de host permitido El puerto de host está configurado para true. Peligro
ImagePullPolicyNotAlways La política de obtención de imágenes no está configurada para always. advertir
Las etiquetas de imagen están actualizadas La etiqueta de la imagen es latest. advertir
Señorita etiqueta de imagen Falta la etiqueta de la imagen. Peligro
capacidades inseguras Faltan opciones no seguras como KILL, SYS_CHROOT y CHOWN. Peligro
Sin sonda de vida Las sondas sin vida no están configuradas. advertir
sin límite de memoria No se establece ningún límite de memoria. Peligro
sin solicitud de memoria No se reservan recursos de memoria. Peligro
Sin nombre de clase de prioridad Prioridad de programación de recursos no establecida. pasar por alto
privilegio permitido Los pods se ejecutan en modo privilegiado. Peligro
sin detección de preparación Sonda de preparación no configurada. advertir
sistema de archivos raíz de no solo lectura readOnlyRootFilesystem no está configurado para true. advertir
NotRunAsNonRoot runAsNonRoot no está configurado para true. advertir
certificado caducado El certificado del API Server es válido por menos de 30 días. Peligro
auditoría de eventos Los eventos necesitan ser auditados. advertir
estado del nodo Es necesario comprobar el estado del nodo. advertir
Estado de la ventana acoplable Necesita verificar el estado de Docker. advertir
Estado de Kubelet Necesito verificar el estado de kubelet. advertir

Agregue sus propias reglas de inspección

Agregar reglas OPA personalizadas

Cree un directorio para almacenar reglas OPA.

mkdir op

Agregue un archivo de reglas OPA personalizado.

notas:

OPA verifica las reglas de carga de trabajo: el nombre del paquete debe ser kubeeye_workloads_rego.
OPA verifica las reglas para la configuración de RBAC: el nombre del paquete debe ser kubeeye_RBAC_rego.
OPA verifica las reglas para la configuración de los nodos: el nombre del paquete debe ser kubeeye_nodes_rego.

Compruebe si la dirección de registro de la imagen cumple con las reglas y guarde las siguientes reglas en imageRegistryRule.rego

package kubeeye_workloads_rego
deny[msg] {
    resource := input
    type := resource.Object.kind
    resourcename := resource.Object.metadata.name
    resourcenamespace := resource.Object.metadata.namespace
    workloadsType := {"Deployment","ReplicaSet","DaemonSet","StatefulSet","Job"}
    workloadsType[type]

    not workloadsImageRegistryRule(resource)

    msg := {
        "Name": sprintf("%v", [resourcename]),
        "Namespace": sprintf("%v", [resourcenamespace]),
        "Type": sprintf("%v", [type]),
        "Message": "ImageRegistryNotmyregistry"
    }
}

workloadsImageRegistryRule(resource) {
    regex.match("^myregistry.public.kubesphere/basic/.+", resource.Object.spec.template.spec.containers[_].image)
}
  1. Ejecute KubeEye con reglas personalizadas.

Nota: Kubeeye leerá todo .rego en el directorio.

root:# kubeeye audit -p ./opa
NAMESPACE     NAME              KIND          MESSAGE
default       nginx1            Deployment    [ImageRegistryNotmyregistry NotReadOnlyRootFilesystem NotRunAsNonRoot]
default       nginx11           Deployment    [ImageRegistryNotmyregistry PrivilegeEscalationAllowed HighRiskCapabilities HostIPCAllowed HostPortAllowed ImagePullPolicyNotAlways ImageTagIsLatest InsecureCapabilities NoPriorityClassName PrivilegedAllowed NotReadOnlyRootFilesystem NotRunAsNonRoot]
default       nginx111          Deployment    [ImageRegistryNotmyregistry NoCPULimits NoCPURequests ImageTagMiss NoLivenessProbe NoMemoryLimits NoMemoryRequests NoPriorityClassName NotReadOnlyRootFilesystem NoReadinessProbe NotRunAsNonRoot]

Agregar reglas NPD personalizadas

  1. Ejecute el siguiente comando para cambiar el ConfigMap: kubectl edit ConfigMap node-problem-detector-config -n kube-system
  2. Ejecute el siguiente comando para reiniciar NPD: kubectl rollout restart DaemonSet node-problem-detector -n kube-system

Operador KubeEye

¿Qué es el operador KubeEye?

KubeEye Operator es una plataforma de inspección para Kubernetes. Administra KubeEye para inspeccionar periódicamente el clúster y generar resultados de inspección.

Cómo puede ayudarte el operador KubeEye

  • Registra los resultados de la inspección a través de CR y proporciona una página web para que pueda ver y comparar visualmente los resultados de la inspección del grupo.
  • Proporciona más complementos.
  • Proporciona sugerencias de modificación más detalladas.

Implementar el operador KubeEye

kubectl apply -f 
kubectl apply -f 

Obtener resultados de la prueba

kubectl get clusterinsight -o yaml
apiVersion: v1
items:
- apiVersion: kubeeye.kubesphere.io/v1alpha1
  kind: ClusterInsight
  metadata:
    name: clusterinsight-sample
    namespace: default
  spec:
    auditPeriod: 24h
  status:
    auditResults:
      auditResults:
      - resourcesType: Node
        resultInfos:
        - namespace: ""
          resourceInfos:
          - items:
            - level: warning
              message: KubeletHasNoSufficientMemory
              reason: kubelet has no sufficient memory available
            - level: warning
              message: KubeletHasNoSufficientPID
              reason: kubelet has no sufficient PID available
            - level: warning
              message: KubeletHasDiskPressure
              reason: kubelet has disk pressure
            name: kubeeyeNode

LEER  Cómo convertir videos a GIF usando FFmpeg

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba