For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/containers-orchestration/managed-kubernetes/install-popeye.md.

Auditer votre cluster OVHcloud Managed Kubernetes avec Popeye

Voir en Markdown

Découvrez comment auditer votre cluster OVHcloud Managed Kubernetes avec Popeye et exporter le rapport généré vers un conteneur OVHcloud Object Storage

Objectif

Popeye est un outil qui analyse les clusters Kubernetes et signale les problèmes potentiels liés aux ressources et aux configurations déployées.

Popeye

Il audite votre cluster en fonction de ce qui y est déployé. En analysant votre cluster, il détecte les erreurs de configuration et vous aide à vous assurer que les bonnes pratiques sont appliquées, ce qui évite des difficultés ultérieures. Son objectif est de réduire la charge cognitive liée à l'exploitation d'un cluster Kubernetes en conditions réelles.

Popeye signale également les sur-allocations et sous-allocations potentielles de ressources, et vous avertit lorsque votre cluster arrive à saturation.

Popeye analyse votre cluster afin d'y vérifier l'application des bonnes pratiques et d'y détecter les problèmes potentiels. Actuellement, Popeye examine les nodes, les namespaces, les pods et les services.

À titre d'information, Popeye est un outil en lecture seule : il se contente de récupérer des informations afin de vous aider à sécuriser et à auditer votre cluster. Il ne modifie ni ne supprime aucune ressource d'un cluster Kubernetes.

Pour en savoir plus, consultez la page de Popeye.

Chez OVHcloud, nous nous efforçons de vous proposer les meilleurs produits et services. La sécurité est importante pour nous : c'est pourquoi nous souhaitons vous faire découvrir Popeye, qui vous aidera à sécuriser votre cluster OVHcloud Managed Kubernetes grâce à des rapports détaillés.

Dans ce guide, vous allez :

  • installer Popeye (en local)
  • générer et exporter des rapports
  • corriger les problèmes courants
  • stocker un rapport sur OVHcloud Object Storage

Vous pouvez utiliser la fonction Réinitialiser le cluster de la section Public Cloud de votre afin de réinitialiser votre cluster avant de suivre ce tutoriel.

Prérequis

Ce tutoriel suppose que vous disposez déjà d'un cluster OVHcloud Managed Kubernetes fonctionnel et de connaissances de base sur son utilisation.

Suivez également la documentation « Déployer une application Hello World » afin de disposer d'un exemple d'application en cours d'exécution sur votre cluster.


Accès à l'espace client OVHcloud

  • Lien direct :
  • Pour accéder à vos services : Public Cloud > Sélectionnez votre projet > Utilisateurs & Rôles

À ce stade, vous devriez disposer d'un cluster Kubernetes en cours d'exécution, avec un déploiement et un pod hello-world semblables à ceci :

$ kubectl get po,deploy
NAME                                          READY   STATUS    RESTARTS   AGE
pod/hello-world-deployment-66d599d4c6-bh5w8   1/1     Running   0          4d2h

NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/hello-world-deployment   1/1     1            1           4d22h

En pratique

Installation de la CLI Popeye

Vous pouvez installer Popeye sur votre poste depuis les binaires, depuis les sources, via HomeBrew, ou même l'utiliser directement depuis une image Docker.

Dans ce tutoriel, vous allez l'installer via HomeBrew :

brew install derailed/popeye/popeye

La sortie devrait ressembler à ceci :

$ brew install derailed/popeye/popeye
Running `brew update --preinstall`...
...
==> Tapping derailed/popeye
Cloning into '/Users/avache/homebrew/Library/Taps/derailed/homebrew-popeye'...
remote: Enumerating objects: 233, done.
remote: Counting objects: 100% (104/104), done.
remote: Compressing objects: 100% (52/52), done.
remote: Total 233 (delta 25), reused 0 (delta 0), pack-reused 129
Receiving objects: 100% (233/233), 25.13 KiB | 12.57 MiB/s, done.
Resolving deltas: 100% (57/57), done.
Tapped 1 formula (12 files, 37KB).
==> Downloading https://github.com/derailed/popeye/releases/download/v0.10.0/popeye_Darwin_arm64.tar.gz
==> Downloading from https://objects.githubusercontent.com/github-production-release-asset-2e65be/176379662/c65e86e0-4e3e-4591-9bb7-62b7bddd46e4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJY
######################################################################## 100.0%
==> Installing popeye from derailed/popeye
...
==> Running `brew cleanup popeye`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

Après l'installation, vérifiez que la CLI popeye fonctionne correctement :

popeye version

Vous devriez obtenir un résultat semblable à celui-ci :

$ popeye version
 ___     ___ _____   _____                       K          .-'-.
| _ \___| _ \ __\ \ / / __|                       8     __|      `\
|  _/ _ \  _/ _| \ V /| _|                         s   `-,-`--._   `\
|_| \___/_| |___| |_| |___|                       []  .->'  a     `|-'
  Biffs`em and Buffs`em!                            `=/ (__/_       /
                                                      \_,    `    _)
                                                         `----;  |
Version:   0.10.0
Commit:    d1d807b721b0393e7b69e970bdf947895c61d8f4
Date:      2022-04-14T15:51:42Z
Logs:      /var/folders/lq/xp6s4vbn13s5vj_kq3cch50w0000gn/T/popeye.log

Popeye est correctement installé sur votre poste. Vous pouvez maintenant l'utiliser pour vérifier si votre cluster respecte les bonnes pratiques de sécurité Kubernetes.

Générer des rapports Popeye

La CLI popeye fonctionne comme la commande kubectl : lorsque vous l'exécutez, elle recherche la configuration de votre cluster.

Pour générer un rapport, il suffit d'exécuter la CLI :

popeye

Par défaut, cette commande exécute des tests sur tous les nœuds et tous les namespaces :

Rapport Popeye

Comme vous pouvez le constater, par défaut, notre cluster OVHcloud Managed Kubernetes (sur lequel une application hello world est déployée) obtient un score de 83.

Bien qu'il s'agisse d'un bon score, examinons ce qui peut être amélioré ou corrigé.

Le rapport peut être très volumineux. Pour identifier ce que vous devez améliorer ou corriger, une bonne pratique consiste à exécuter la commande popeye sur un namespace précis.

Vous pouvez ainsi améliorer et corriger les ressources de votre cluster étape par étape.

L'application hello world ayant été déployée dans le namespace default, vous pouvez exécuter popeye sur ce namespace et générer un rapport portant uniquement sur les deployments :

popeye -n default -s deploy
$ popeye -n default -s deploy
...
GENERAL [MY-TEST-CLUSTER2]
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
  · Connectivity...................................................................................✅
  · MetricServer...................................................................................✅

DEPLOYMENTS (1 SCANNED)                                                        💥 1 😱 0 🔊 0 ✅ 0 0٪
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
  · default/hello-world-deployment.................................................................💥
    🐳 hello-world
      💥 [POP-100] Untagged docker image in use.
      😱 [POP-106] No resources requests/limits defined.
      🔊 [POP-108] Unnamed port 80.

SUMMARY
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
Your cluster score: 0 -- F

Dans ce rapport, vous constatez que les bonnes pratiques à suivre sont les suivantes :

  • utiliser une image Docker taguée
  • définir les requests et les limits de ressources
  • nommer les ports des conteneurs

Il s'agit de trois bonnes pratiques simples à appliquer. Corrigeons-les.

Copiez le fichier hello.yml d'origine (que vous trouverez dans le guide « Déployer une application Hello World ») dans un nouveau fichier :

cp hello.yml hello-fixed.yml

Modifiez ensuite le nouveau fichier hello-fixed.yml avec le contenu suivant :

apiVersion: v1
kind: Service
metadata:
  name: hello-world
  labels:
    app: hello-world
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  selector:
    app: hello-world
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-world-deployment
  labels:
    app: hello-world
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hello-world
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
      - name: hello-world
        image: ovhplatform/hello:1.0
        resources:
          requests:
            memory: "2Mi"
            cpu: "0"
          limits:
            memory: "32Mi"
            cpu: "4"
        ports:
        - name: http
          containerPort: 80

Dans la section deployment de ce fichier YAML, vous allez :

  • définir le tag de l'image sur 1.0 (la version de l'image que vous souhaitez exécuter dans un conteneur du cluster)
  • définir les requests et les limits de ressources
  • définir le nom du port sur « http »

Appliquez le nouveau manifeste Kubernetes :

kubectl apply -f hello-fixed.yml -n default

Vous devriez obtenir les résultats suivants sur votre machine :

$ kubectl apply -f hello-fixed.yml -n default

service/hello-world unchanged
deployment.apps/hello-world-deployment configured

Vous pouvez générer un nouveau rapport et vérifier si les avertissements ont disparu et si le score a augmenté, à l'aide de la commande popeye :

popeye -n default -s deploy

Le rapport devrait maintenant être meilleur :

$ popeye -n default -s deploy
...
GENERAL [MY-TEST-CLUSTER2]
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
  · Connectivity...................................................................................✅
  · MetricServer...................................................................................✅

DEPLOYMENTS (1 SCANNED)                                                      💥 0 😱 0 🔊 0 ✅ 1 100٪
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
  · default/hello-world-deployment.................................................................✅

SUMMARY
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
Your cluster score: 100 -- A
...

Exporter des rapports en local

Vous pouvez générer et enregistrer un rapport avec l'option --save :

popeye --save

Le rapport est alors enregistré dans votre répertoire de travail :

$ popeye --save
/var/folders/lq/xp6s4vbn13s5vj_kq3cch50w0000gn/T/popeye/sanitizer_my-test-cluster2_1644586682462302000.txt

Exporter des rapports vers un conteneur OVHcloud Object Storage

Vous pouvez également exporter le rapport généré vers un conteneur OVHcloud Object Storage, car ceux-ci sont compatibles avec l'API S31. Le principe est celui d'un bucket AWS S3, mais sur l'infrastructure OVHcloud.

Vous devez d'abord disposer d'un conteneur Object Storage. Si vous n'en avez pas encore, vous pouvez suivre le guide « Premiers pas avec Object Storage Swift ».

Dans ce guide, notre conteneur Object Storage est nommé popeye et sa région est GRA. Vous pouvez vérifier et configurer le nom du conteneur dans l', dans la section Public Cloud > votre projet > Object Storage.

Créer un utilisateur OpenStack disposant des droits Object Storage

Pour stocker vos rapports Popeye sur un OVHcloud Object Storage — et plus généralement pour interagir avec l'Object Storage — vous devez disposer des droits nécessaires à sa gestion.

Pour cela, vous allez créer un utilisateur OpenStack.

  1. Dans l', rendez-vous dans la section Public Cloud > votre projet, puis cliquez sur Utilisateurs & Rôles dans le menu de gauche.
  2. Cliquez sur + Ajouter un utilisateur.
  3. Saisissez une description pour l'utilisateur, par exemple Popeye, puis cliquez sur Suivant.
  4. Cochez le rôle ObjectStore operator, puis cliquez sur Confirmer.
  5. Patientez pendant la création de l'utilisateur. Le nom d'utilisateur et le mot de passe seront générés automatiquement et affichés dans l'espace client — veillez à enregistrer le mot de passe, car il ne sera affiché qu'une seule fois.

Récupérer le fichier RC d'OpenStack

Pour interagir avec l'Object Storage via l'API Amazon S3, vous devez générer vos identifiants OpenStack.

  1. Dans la section Utilisateurs & Rôles, cliquez sur le menu ... situé à côté de l'utilisateur que vous venez de créer, puis sélectionnez Télécharger le fichier RC d'OpenStack.
  2. Sélectionnez la région de votre conteneur Object Storage (GRA pour ce guide), puis cliquez sur Télécharger.

À cette étape, vous devriez disposer d'un fichier openrc.sh semblable à celui-ci :

cat openrc.sh
$ cat openrc.sh
#!/bin/bash

# To use an Openstack cloud you need to authenticate against keystone, which
# returns a **Token** and **Service Catalog**. The catalog contains the
# endpoint for all services the user/tenant has access to - including nova,
# glance, keystone, swift.
#
export OS_AUTH_URL=https://auth.cloud.ovh.net/v3
export OS_IDENTITY_API_VERSION=3

export OS_USER_DOMAIN_NAME=${OS_USER_DOMAIN_NAME:-"Default"}
export OS_PROJECT_DOMAIN_NAME=${OS_PROJECT_DOMAIN_NAME:-"Default"}

# With the addition of Keystone we have standardized on the term **tenant**
# as the entity that owns the resources.
export OS_TENANT_ID=a123b456c789d901
export OS_TENANT_NAME="11111111111"

# In addition to the owning entity (tenant), openstack stores the entity
# performing the action as the **user**.
export OS_USERNAME="user-xxxxxxxx"

# With Keystone you pass the keystone password.
echo "Please enter your OpenStack Password: "
read -sr OS_PASSWORD_INPUT
export OS_PASSWORD=$OS_PASSWORD_INPUT

# If your configuration has multiple regions, we set that information here.
# OS_REGION_NAME is optional and only valid in certain environments.
export OS_REGION_NAME="GRA"
# Don't leave a blank variable, unset it if it was empty
if [ -z "$OS_REGION_NAME" ]; then unset OS_REGION_NAME; fi

Sourcez le fichier openrc.sh afin de définir les variables d'environnement OpenStack :

source openrc.sh

Vous devez exécuter cette commande et saisir votre mot de passe :

$ source openrc.sh
Please enter your OpenStack Password:

Installer les outils CLI

Vous devez maintenant installer les outils CLI :

pip install python-openstackclient awscli

Cette commande installe le client openstack, qui permet de générer vos identifiants, ainsi que la CLI aws :

$ pip install python-openstackclient awscli
DEPRECATION: Configuring installation scheme with distutils config files is deprecated and will no longer work in the near future. If you are using a Homebrew or Linuxbrew Python, please see discussion at https://github.com/Homebrew/homebrew-core/issues/76621
Collecting python-openstackclient
  Using cached python_openstackclient-5.7.0-py3-none-any.whl (970 kB)
Collecting awscli
  Using cached awscli-1.22.54-py3-none-any.whl (3.8 MB)
...
Successfully installed PrettyTable-3.1.0 PyYAML-5.4.1 appdirs-1.4.4 attrs-21.4.0 autopage-0.5.0 awscli-1.22.54 botocore-1.23.54 certifi-2021.10.8 cffi-1.15.0 charset-normalizer-2.0.12 cliff-3.10.0 cmd2-2.3.3 colorama-0.4.3 cryptography-36.0.1 debtcollector-2.4.0 decorator-5.1.1 docutils-0.15.2 dogpile.cache-1.1.5 idna-3.3 iso8601-1.0.2 jmespath-0.10.0 jsonpatch-1.32 jsonpointer-2.2 keystoneauth1-4.4.0 msgpack-1.0.3 munch-2.5.0 netaddr-0.8.0 netifaces-0.11.0 openstacksdk-0.61.0 os-service-types-1.7.0 osc-lib-2.4.2 oslo.config-8.7.1 oslo.i18n-5.1.0 oslo.serialization-4.2.0 oslo.utils-4.12.1 packaging-21.3 pbr-5.8.1 pyasn1-0.4.8 pycparser-2.21 pyparsing-3.0.7 pyperclip-1.8.2 python-cinderclient-8.2.0 python-dateutil-2.8.2 python-keystoneclient-4.4.0 python-novaclient-17.6.0 python-openstackclient-5.7.0 pytz-2021.3 requests-2.27.1 requestsexceptions-1.4.0 rfc3986-2.0.0 rsa-4.7.2 s3transfer-0.5.1 simplejson-3.17.6 stevedore-3.5.0 urllib3-1.26.8 wcwidth-0.2.5 wrapt-1.13.3
mkdir ~/.aws

Créez le fichier de configuration de la CLI AWS et définissez le bon endpoint vers votre Object Storage stocké dans la région GRA :

vi ~/.aws/config

[plugins]
endpoint = awscli_plugin_endpoint

[profile default]
region = GRA
s3 =
  endpoint_url = https://s3.gra.cloud.ovh.net
  signature_version = s3v4
s3api =
  endpoint_url = https://s3.gra.cloud.ovh.net

Générez les identifiants AWS :

$ openstack ec2 credentials create
+------------+--------------------------------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                                                |
+------------+--------------------------------------------------------------------------------------------------------------------------------------+
| access     | ec975c94081f40ba93465b648a197648                                                                                                     |
| links      | {'self': 'https://auth.cloud.ovh.net/v3/users/e992e71a8750424ab612e69219935483/credentials/OS-EC2/a24165f79cf84ef596724f9ef16f244d'} |
| project_id | 11111111111                                                                                                     |
| secret     | 857006040f054ef0b83f15bffe5a01a9                                                                                                     |
| trust_id   | None                                                                                                                                 |
| user_id    | e992e71a8750424ab612e69219935483                                                                                                     |
+------------+--------------------------------------------------------------------------------------------------------------------------------------+

Grâce à ces identifiants, vous pouvez maintenant les renseigner dans votre fichier .aws/credentials :

vi ~/.aws/credentials

[default]
aws_access_key_id = <access_key>
aws_secret_access_key = <secret_key>

Vous devriez obtenir un contenu semblable à celui-ci :

[default]
aws_access_key_id=ec975c94081f40ba93465b648a197648
aws_secret_access_key=857006040f054ef0b83f15bffe5a01a9

Vous pouvez maintenant tester le listage de vos conteneurs Object Storage existants via la CLI aws s3 :

aws s3 ls

Vous devriez retrouver au minimum le conteneur/bucket popeye dans la liste suivante :

$ aws s3 ls
2009-02-03 17:45:09 popeye

Stocker un rapport Popeye dans votre Object Storage

Vous pouvez désormais générer un rapport Popeye et l'enregistrer dans votre conteneur Object Storage grâce aux options --s3-bucket, --s3-region et --s3-endpoint :

$ popeye --s3-bucket s3://popeye --s3-region GRA --s3-endpoint https://s3.gra.cloud.ovh.net
2022/04/15 15:45:09 DEBUG: Request s3/PutObject Details:
---[ REQUEST POST-SIGN ]-----------------------------
PUT /sanitizer_my-test-cluster2_1650030309811151000.txt HTTP/1.1
Host: popeye.s3.gra.cloud.ovh.net
User-Agent: aws-sdk-go/1.35.21 (go1.18.1; darwin; arm64) S3Manager
Content-Length: 83636
Authorization: AWS4-HMAC-SHA256 Credential=a24165f79cf84ef596724f9ef16f244d/20220415/GRA/s3/aws4_request, SignedHeaders=content-length;content-md5;host;x-amz-content-sha256;x-amz-date, Signature=547be22a29f3758c79be2df731fa03b8f1c0e6fd7a871ab9edbd98390d61654e
Content-Md5: hPFd7o0hPDYcVctkwKGkCQ==
X-Amz-Content-Sha256: c72f5ff454c17d89fa88571830e1d0604a298fdec31726dc23838388ddabca59
X-Amz-Date: 20220415T134509Z
Accept-Encoding: gzip

-----------------------------------------------------
2022/04/15 15:45:10 DEBUG: Response s3/PutObject Details:
---[ RESPONSE ]--------------------------------------
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Fri, 15 Apr 2022 13:45:10 GMT
Etag: "84f15dee8d213c361c55cb64c0a1a409"
Last-Modified: Fri, 15 Apr 2022 13:45:11 GMT
X-Amz-Id-2: txd66f17782e2847c6a5f29-00625976e6
X-Amz-Request-Id: txd66f17782e2847c6a5f29-00625976e6
X-Iplb-Instance: 12309
X-Iplb-Request-Id: 6DBEFE3A:FC88_3626E64B:01BB_625976E6_94E4D5:7BD3
X-Openstack-Request-Id: txd66f17782e2847c6a5f29-00625976e6
X-Trans-Id: txd66f17782e2847c6a5f29-00625976e6

-----------------------------------------------------

Vous pouvez vérifier dans votre conteneur OVHcloud Object Storage popeye que le rapport a bien été enregistré :

Rapport Popeye stocké sur OVHcloud Object Storage

Aller plus loin

  • Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.

Échangez avec notre communauté d'utilisateurs.

1 : S3 est une marque déposée appartenant à Amazon Technologies, Inc. Les services OVHcloud ne sont pas sponsorisés, approuvés, ou affiliés de quelque manière que ce soit.

Cette page vous a-t-elle aidé ?