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

Lista de Verificación

ya seaVerificar Artículodescribirgravedad
Escalada de privilegios permitidaPermitir la escalada de privilegios.Peligro
Puede suplantar al usuarioRole/ClusterRole puede suplantar a los usuarios.advertir
Puede modificar los recursosRole/ClusterRole puede eliminar recursos de Kubernetes.advertir
Se puede modificar la carga de trabajoRole/ClusterRole puede modificar los recursos de Kubernetes.advertir
Sin límite de CPUNo se establece ningún límite de CPU.Peligro
Sin solicitudes de CPUNo se reservan recursos de CPU.Peligro
capacidad de alto riesgoHabilite funciones de alto riesgo como ALL, SYS_ADMIN y NET_ADMIN.Peligro
Host IPC permitidoHostIPC está configurado para true.Peligro
La red anfitriona permiteLa red host está configurada para true.Peligro
PID de host permitidoHostPID está configurado para true.Peligro
puerto de host permitidoEl puerto de host está configurado para true.Peligro
ImagePullPolicyNotAlwaysLa política de obtención de imágenes no está configurada para always.advertir
Las etiquetas de imagen están actualizadasLa etiqueta de la imagen es latest.advertir
Señorita etiqueta de imagenFalta la etiqueta de la imagen.Peligro
capacidades insegurasFaltan opciones no seguras como KILL, SYS_CHROOT y CHOWN.Peligro
Sin sonda de vidaLas sondas sin vida no están configuradas.advertir
sin límite de memoriaNo se establece ningún límite de memoria.Peligro
sin solicitud de memoriaNo se reservan recursos de memoria.Peligro
Sin nombre de clase de prioridadPrioridad de programación de recursos no establecida.pasar por alto
privilegio permitidoLos pods se ejecutan en modo privilegiado.Peligro
sin detección de preparaciónSonda de preparación no configurada.advertir
sistema de archivos raíz de no solo lecturareadOnlyRootFilesystem no está configurado para true.advertir
NotRunAsNonRootrunAsNonRoot no está configurado para true.advertir
certificado caducadoEl certificado del API Server es válido por menos de 30 días.Peligro
auditoría de eventosLos eventos necesitan ser auditados.advertir
estado del nodoEs necesario comprobar el estado del nodo.advertir
Estado de la ventana acoplableNecesita verificar el estado de Docker.advertir
Estado de KubeletNecesito 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

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 instalar KDE en Ubuntu 24.04

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