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.
Tabla de Contenidos
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
- Instale KubeEye en su máquina.
- Método 1: Descarga un ejecutable precompilado liberar.
- Método 2: construir desde la fuente.
NOTA: Los archivos de KubeEye estarán en
/usr/local/bin/
en su máquina. git clonar cd kubeeye hacer installke - (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
- 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) }
- 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
- Ejecute el siguiente comando para cambiar el ConfigMap: kubectl edit ConfigMap node-problem-detector-config -n kube-system
- 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