Intégration Kubernetes
ggscout prend en charge l'intégration avec les clusters Kubernetes pour collecter les secrets et recueillir des informations sur diverses ressources Kubernetes. Cette intégration offre une visibilité complète à la fois sur les données sensibles et sur les configurations des ressources au sein de vos clusters.
Fonctionnalités prises en charge
- Types de ressources multiples : Secrets, ConfigMaps, Deployments, Service Accounts et External Secrets
- Collecte de données complète : collecte à la fois les secrets et les informations générales sur les ressources
- Filtrage par namespace : ciblez des namespaces spécifiques à l'aide de motifs glob
- Méthodes d'authentification multiples : fichier KubeConfig ou authentification in-cluster
- Prise en charge multi-cluster : surveillez plusieurs clusters Kubernetes simultanément
- Filtrage des ressources : contrôle précis des ressources à scanner
L'intégration Kubernetes est en lecture seule et ne prend pas en charge l'écriture de secrets dans le cluster.
Types de ressources pris en charge
ggscout peut scanner les ressources API Kubernetes suivantes :
| Type de ressource | Description |
|---|---|
| Secrets | Ressources Secret natives de Kubernetes |
| ConfigMaps | Données de configuration stockées dans le cluster |
| Deployments | Configurations de déploiement des applications |
| Service Accounts | Configurations des comptes de service Kubernetes |
| External Secrets | Ressources External Secrets Operator |
Configuration
Pour configurer ggscout afin qu'il fonctionne avec Kubernetes, ajoutez la configuration suivante à votre fichier ggscout.toml :
Authentification par fichier KubeConfig
Pour un accès externe aux clusters Kubernetes à l'aide d'un fichier kubeconfig :
[sources.k8s-production]
type = "kubernetes"
config_source = "kubeconfigfile"
kubeconfig_path = "/path/to/kubeconfig" # Optional, defaults to ~/.kube/config
contexts = ["production-cluster", "staging-cluster"] # Optional, all contexts if not specified
namespaces = ["default", "production-*", "app-*"] # Optional, all namespaces if not specified
env = "production"
owner = "devops-team@example.com"
Authentification in-cluster
Pour ggscout exécuté à l'intérieur d'un cluster Kubernetes :
[sources.k8s-cluster]
type = "kubernetes"
config_source = "incluster"
name = "production-cluster" # Cluster name (required for in-cluster mode)
namespaces = ["default", "production-*"] # Optional namespace filtering
env = "production"
owner = "devops-team@example.com"
Paramètres de configuration
| Paramètre | Description | Requis | Valeur par défaut |
|---|---|---|---|
type | Doit être défini sur "kubernetes" | Oui | |
config_source | Méthode d'authentification : "kubeconfigfile" ou "incluster" | Oui | |
namespaces | Liste des motifs de namespaces à scanner | Non | |
env | Identifiant d'environnement | Non | |
owner | Propriétaire de cette source (un e-mail, généralement celui d'un employé ou d'une équipe) | Non | |
mode | Mode d'intégration (seul "read" est pris en charge pour Kubernetes) | Non | "read" |
Paramètres du fichier KubeConfig
| Paramètre | Description | Requis | Valeur par défaut |
|---|---|---|---|
kubeconfig_path | Chemin vers le fichier kubeconfig | Non | ~/.kube/config |
contexts | Liste des contextes à utiliser depuis kubeconfig | Non |
Paramètres in-cluster
| Paramètre | Description | Requis | Valeur par défaut |
|---|---|---|---|
name | Nom du cluster Kubernetes | Oui |
Configurer l'authentification
Étapes de configuration de l'authentification
- Configurer un ClusterRole
Le moyen le plus simple de configurer votre intégration Kubernetes est d'utiliser nos Helm charts ggscout. Il vous suffit alors de configurer ceci dans votre values.yaml :
clusterRole:
create: true
Si vous n'utilisez pas nos Helm charts, consultez le role que nous utilisons pour voir la liste des règles requises.
Consultez également cet exemple complet de values.yaml.
Filtrage par namespace
Utilisez des motifs glob pour contrôler les namespaces que ggscout scanne :
# Scan specific namespaces
namespaces = ["production", "staging", "development"]
# Use wildcards (only at the end) to match patterns
namespaces = ["app-*", "service-*"]
# Combine exact matches and patterns
namespaces = ["default", "kube-system", "production-*"]
Filtrage des ressources
Contrôlez quelles ressources spécifiques sont scannées à l'aide de filtres d'inclusion/exclusion :
[sources.k8s-filtered]
type = "kubernetes"
config_source = "incluster"
name = "production-cluster"
# Include filters - only scan these resources
[[sources.k8s-filtered.include]]
resource_ids = ["secret:*", "configmap:*"]
# Exclude filters - skip these resources
[[sources.k8s-filtered.exclude]]
resource_ids = ["secret:kube-system/*"]
Configuration multi-cluster
Surveillez plusieurs clusters Kubernetes en définissant plusieurs sources :
[sources.k8s-production]
type = "kubernetes"
config_source = "kubeconfigfile"
contexts = ["production"]
env = "production"
owner = "devops-team@example.com"
[sources.k8s-staging]
type = "kubernetes"
config_source = "kubeconfigfile"
contexts = ["staging"]
env = "staging"
owner = "devops-team@example.com"
[sources.k8s-development]
type = "kubernetes"
config_source = "incluster"
name = "dev-cluster"
env = "development"
owner = "devops-team@example.com"
Dépannage
Problèmes courants
Échecs d'authentification
- Vérifiez le chemin et les permissions du fichier kubeconfig
- Vérifiez les permissions RBAC pour l'utilisateur/le compte de service configuré
- Assurez-vous de la connectivité au cluster
Ressources manquantes
- Confirmez que les permissions RBAC incluent tous les types de ressources requis
- Vérifiez la configuration du filtrage par namespace
- Vérifiez les règles de filtrage des ressources
Problèmes de performance
- Réduisez la portée avec le filtrage par namespace
- Utilisez le filtrage des ressources pour limiter les types de ressources scannés
- Tenez compte de la taille du cluster et des limites de débit de l'API