Tech

Comment accéder à une application Kubernetes distante avec le transfert de port Kubectl

Besoin de déboguer une application s’exécutant dans votre cluster Kubernetes ? La redirection de port est un moyen de se connecter à des pods qui ne sont pas accessibles au public. Vous pouvez utiliser cette technique pour inspecter des bases de données, des outils de surveillance et d’autres applications que vous souhaitez déployer en interne sans route publique.

La redirection de port est intégré à Kubectl. La CLI peut démarrer des sessions de tunnellisation qui redirigent le trafic sur les ports locaux vers les pods de votre cluster Kubernetes. Voici comment le configurer.

Comment fonctionne la redirection de port

La redirection de port est une sorte de règle de traduction d’adresse réseau (NAT) qui achemine le trafic d’un réseau vers un autre. Dans le contexte de Kubernetes, les requêtes qui semblent être terminées par localhost sont redirigés vers le réseau interne de votre cluster.

La redirection de port ne fonctionne qu’au niveau du port. Vous dirigez un port spécifique comme 33060 à un port cible tel que 3306 dans le réseau destinataire. Lorsque vous envoyez du trafic vers votre port local 33060il sera automatiquement transmis au port 3306 à l’extrémité distante.

Cette technique vous permet d’accéder à des charges de travail Kubernetes privées qui ne sont pas exposées par un NodePort, Ingress ou LoadBalancer. Vous pouvez diriger le trafic local directement dans votre cluster, ce qui vous évite d’avoir à créer des services Kubernetes pour vos charges de travail internes. Cela permet de réduire votre surface d’attaque.

Déploiement d’un exemple d’application

Voyons maintenant le transfert de port Kubernetes en action. Commencez par créer un déploiement de base auquel vous vous connecterez à l’aide de la redirection de port dans la section suivante.

Nous utilisons un pod de base de données MySQL comme exemple réaliste de cas où vous pourriez avoir besoin d’utiliser cette technique. Les bases de données ne sont normalement pas exposées publiquement, les administrateurs Kubernetes utilisent donc souvent la redirection de port pour ouvrir une connexion directe.

Créez un fichier YAML pour votre déploiement :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:8.0
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: mysql

Assurez-vous de modifier la valeur de MYSQL_ROOT_PASSWORD variable d’environnement avant d’utiliser ce manifeste en production. Courir kubectl apply pour créer votre déploiement MySQL :

$ kubectl apply -f mysql.yaml
deployment.apps/mysql created

Utilisez ensuite le get pods commande pour vérifier que la charge de travail a démarré avec succès :

$ kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
mysql-5f54dd5789-t5fzc   1/1     Running   0          2s

Utiliser Kubectl pour rediriger le port vers Kubernetes

Bien que MySQL s’exécute maintenant dans votre cluster, vous n’avez aucun moyen d’y accéder de l’extérieur. Ensuite, configurez une session de redirection de port afin de pouvoir utiliser vos installations locales d’outils tels que mysql CLI pour se connecter à votre base de données.

Voici un exemple simple :

$ kubectl port-forward deployment/mysql 33060:3306
Forwarding from 127.0.0.1:33060 -> 3306
Forwarding from [::1]:33060 -> 3306

Les connexions au port 33060 seront dirigées vers le port 3306 par rapport au pod exécutant votre déploiement MySQL. Vous pouvez maintenant démarrer une session shell MySQL qui cible votre base de données dans Kubernetes :

$ mysql --host 127.0.0.1 --port 33060 -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.29 MySQL Community Server - GPL

Conservez la fenêtre du shell qui exécute le kubectl port-forward commande ouverte pendant la durée de votre session de débogage. La redirection de port sera terminée lorsque vous appuyez sur Ctrl+C ou fermez la fenêtre.

Modification des numéros de port local et distant

La syntaxe des liaisons de numéro de port est local:remote. La 33060:3306 l’exemple ci-dessus mappe le port 33060 sur localhost à 3306 dans le pod cible.

Spécifier un seul numéro, sans deux-points, l’interprétera à la fois comme port local et distant :

$ kubectl port-forward deployment/mysql 3306

Vous pouvez laisser le port local vide à la place pour attribuer automatiquement un port aléatoire :

$ kubectl port-forward deployment/mysql :3306
Forwarding from 127.0.0.1:34923 -> 3306
Forwarding from [::1]:34923 -> 3306

Ici, vous utiliseriez le numéro de port généré aléatoirement 34923 avec votre client MySQL local.

Modification de l’adresse d’écoute

Kubectl lie le port local sur le 127.0.0.1 (IPv4) et ::1 (IPv6) par défaut. Vous pouvez spécifier votre propre ensemble d’adresses IP à la place en fournissant un --address drapeau lorsque vous exécutez le port-forward commande:

# Listen on two IPv4 addresses
$ kubectl port-forward deployment/mysql :3306 --address 127.0.0.1,192.168.0.1

Le drapeau n’accepte que les adresses IP et le localhost mot-clé. Ce dernier est interprété comme incluant 127.0.0.1 et ::1correspondant aux valeurs par défaut de la commande lorsque --address est omis.

Sommaire

La redirection de port est une technique utile pour accéder aux applications privées au sein de votre cluster Kubernetes. Kubectl tunnelise le trafic de votre réseau local vers un port spécifique sur un pod particulier. C’est un mécanisme relativement bas qui peut gérer n’importe quelle connexion TCP. Transfert de port UDP n’est pas encore pris en charge.

L’utilisation d’une session de transfert de port ad hoc est un moyen sûr de déboguer les charges de travail qui n’ont pas besoin d’être exposées en externe. La création d’un service pour chaque nouveau déploiement pourrait permettre aux intrus et aux attaquants de découvrir les terminaux qui doivent être protégés. La redirection de port dans Kubectl vous permet de vous connecter en toute sécurité directement à vos applications, sans avoir à déterminer sur quels nœuds elles s’exécutent.




Source link

Articles similaires