Votre cluster kubernetes n'a jamais été aussi sécurisé avec Talos Linux sur Proxmox avec OpenTofu
Dans cet article détaillé, nous allons voir comment utilisé OpenTofu pour créer des vms sur proxmox, initialiser un cluster kubernetes avec Talos Linux et déployer Nginx.
Note : deux articles sont disponibles qui traitent la création de cluster kubernetes avec
kind
etk3s
voir : <br / Démarrer un cluster kubernetes en quelques secondes avec kind
K3s la distribution kubernetes légère, performante et très éfficace à petite comme à grande echelle
Prérequis :
- Un serveur physique dédié ou si vous avez un vieux pc qui traine dans un coin.
- Proxmox VE 8.0 ou supérieur (voir Installation de Proxmox VE)
- Un accès root au serveur Proxmox VE
- Un accès internet pour télécharger les images et les paquets nécessaires
- OpentoFu/Terraform installé sur votre machine (voir Installation d’opentoFu)
- Les CLI
kubectl
et tolosctl optionel. - [Quelques connaissances de base de Linux, terraform ou opentofu le concepte d’
insfrastructure as code
, de Kubernetes sont un plus]
Contexte :
Dépuis sa création en 2014, le projet Kubernetes était principalement utilisé sur des machines linux tradionnelles avec des distributions comme RedHat
, Ubuntu
, Debian
, CentOS
etc…
Ces distributions étaient déjà là avant l’arrivée de kubernetes
donc pas forcément designer pour l’orchestration de conteneurs, mais font très bien le job.
La plupart viennent avec quelques packets par ci par là dont kubernetes
n’a pas besoin pour fonctionner correctement, mais qui peuvent poser des problèmes de sécurité.
Pour pallier ce problème, des distributions comme Flatcar Linux
, RancherOS
, CoreOS
, Talos Linux
(qui est le sujet de cet article) sont apparues. Elles sont légères, sécurisées et conçues spécifiquement pour l’orchestration de conteneurs avec le moins de packets possible, juste ce qui est nécessaire pour faire fonctionner kubernetes
par exemple.
Objectif :
Sur cet article, nous allons voir comment provisionner 2 machines virtuelles Talos Linux sur Proxmox VE
via un outil d’infrastructure-as-code
comme OpenTofu
et créer cluster kubernetes.
Note : J’utiliserai 2 machines, un pour le control-plane et l’autre pour le worker, mais libre à vous d’en rajouter autant que vous le souhaitez. Il est même recommandé d’avoir au moins 3 machines pour le control-plane voir 3 autres pour le cluster etcd afin d’assurer une haute disponibilité du cluster, notamment pour des workloads en production.
Une petite présentation des outils utilisés :
Proxmox VE :
Proxmox VE est une plateforme
open-source
de virtualisation basée sur Debian.
Elle permet de créer et de gérer des machines virtuelles ainsi que des conteneurs LinuxLXC
.Depuis l’annonce bouleversante du changement de la politique de licence
VmWare (ESXi/vCenter)
par son nouveau propriétaireBroadcom
, beaucoup dont lescloud providers
se sont tournés versProxmox VE
pour remplacerVmWare
dans leurs infrastructures de virtualisation. Si vous êtes bidouilleur à la maison, ce projet est particulièrement intéressant pour créer des environnements de test et de développement.OpenTofu :
OpenTofu est un outil d’
infrastructure-as-code
déclarative né suite à la décision d’HashiCorp
de changer de licence de quelques produits dontTerraform
.
C’est un fork deTerraform v1.5.0
qui a été la dernière complètementopen-source
sous la licence MPL. Le projet est hebergé par la plus grande fondation de l’open-source
au monde, la linux foundation et en discussion pour intégrer la cloud native computing foundation qui est une sous-organisation de lalinux foundation
.bpg/proxmox :
bpg/proxmox est un
provider
pourOpenTofu/terraform
qui permet de gérer le cycle de vie de machines virtuelles et des conteneurs LinuxLXC
surProxmox VE
.
Vous trouverez la documentation sur les registres deproviders
de terraform et d’opentofu
(en beta) opentofu.Talos Linux :
Talos Linux se désigne comme étant une distribution linux conçu spécialement pour kubernetes.
Elle est sécurisée, immutable et optimisée avec le minimum de packets réquis pour les charges de travail kubernetes.Il faut noter Talos est entièrement immutable, on ne peut pas se connecter via ssh. C’est lors de la sélection de l’image d’installation de la machine que l’on peut choisir les packets à installer.
Il expose un API via laquelle les communications sont faites.A ma connaissance, c’est la seule distribution linux qui a opté pour ce mechanism de gestion qu’on retrouve souvent sur les images de conteneurs distroless. C’est très intéressant niveau sécurité puisque la surface d’attaque est beaucoup réduite par rapport aux distro traditionnelles.
Connexion à la console UI de proxmox VE :
Pour créer les VM, il faut s’assurer que proxmox VE
est up and running, pour ce faire accéder sur https://changer-ip-du-server:8006
Initialisation et configuration du provider BGP/Proxmox :
- Afin de pouvoir communiquer de façon sécurisée avec l’API de proxmox, il faut créer ces deux variables d’environnement :
PROXMOX_VE_USERNAME
etPROXMOX_VE_PASSWORD
:- BASH:
1 2
export PROXMOX_VE_USERNAME="root@pam" export PROXMOX_VE_PASSWORD="votre-super-mot-de-passe"
- POWERSHELL:
1 2
$env:PROXMOX_VE_USERNAME="root@pam" $env:PROXMOX_VE_PASSWORD="votre-super-mot-de-passe"
- Note: il est possible de créer un utilisé spécifique pour open tofu, lui donner les droits nécessaires et générer un token d’authentification, mais pour faire simple, on va utiliser l’utilisateur root. voir ici pour plus d’informations.
- BASH:
Le code ci-dessous ajoute le provider dans un fichier
main.tf
:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
terraform { required_version = ">= 1.0.0" #version de terraform supérieur ou égale à 1.0.0 required_providers { proxmox = { source = "bpg/proxmox" version = "0.70.0" } } } provider "proxmox" { endpoint = "https://${var.pve_ip}}:8006/" # si vous avez un certificat auto-signé, il faut mettre cette ligne à true insecure = true # bgp utilise un acces pour exécuter la cli de proxmox qm/pvesm ... pour créer les VM car l'API est limité. # Il faut noter qu'avec l'adoption en masse de proxmox, l'API vas surement être amélioré. ssh { agent = true } }
Il est fortement recommandé d’externaliser le state d’opentofu dans un storage distant comme un bucket S3 ou s3 compatible avec MinIO
- Déclaration de variable
pve_ip
dans un fichiervariables.tf
comme ceci :1 2 3 4 5
variable "pve_ip" { type = string description = "IP address of the Proxmox VE server" default = "changer par l'ip de votre serveur proxmox" }
- Vous pouvez maintenant initialiser votre projet avec la commande suivante :
1 2 3 4 5 6 7 8 9 10 11 12 13
tofu init Initializing the backend... Initializing provider plugins... - Finding bpg/proxmox versions matching "0.70.0"... - Installing bpg/proxmox v0.70.0... - Installed bpg/proxmox v0.70.0 (signed, key ID F0582AD6AE97C188) . . . OpenTofu has been successfully initialized!
- Ceci aura pour effet de télécharger le code source du provider
bgp/proxmox
dans un répertoire.terraform
à la racine de votre projet.
Téléchargement l’image de Talos Linux pour proxmox :
Talos étant immutable, la société Sidero Labs
qui maintient Talos propose une plateforme pour sélectionner et télécharger l’image de Talos Linux en fonction de votre hyperviseur ou cloud provider avec les packets et configurations que vous souhaitez.
- Manuellement via la plateforme https://factory.talos.dev :
- Une fois sur la page, Selectionner
Cloud Server
- Optez pour la dernière version disponible.
- Parmis la liste, sélectionnez
Nocloud
qui est celui qui est compatible avec proxmox. - choisissez votre architecture
amd64
par exemple - Rechercher
qemu
et cochez la casesiderolabs/qemu-guest-agent (vx.x.x)
- Vous pouvez laisser les champs customization vide à moins que vous sachiez ce que vous faites
- Il vous affiche différents urls pour télécharger l’image, nous irons avec le format raw.xz pour pouvoir lui passer des paramètres au démarrage de la VM comme les configurations de réseau.
- Maintenant, télécharger l’image sur votre serveur proxmox et décompresser là avec la commande suivante (xz-utils est réquis, vous pouvez l’installer avec
apt install xz-utils -y
) :1 2 3
wget https://factory.talos.dev/image/ce4c980550dd2ab1b17bbf2b08801c7eb59418eafe8f279833297925d67c7515/v1.9.2/nocloud-amd64.raw.xz xz -d nocloud-amd64.raw.xz mv nocloud-amd64.raw /var/lib/vz/template/iso/talos.1.9.2.img #proxmox ne supporte pas directement les fichiers raw mais on peut le renommer en .img
- Une fois sur la page, Selectionner
- Utilisation du provider d’openTofu siderolabs/talos pour récupérer le
schematic id
utilisé par Sidero Labs pour savoir les packets à installer. Documentation- Dans le fichier
main.tf
ajouter le provider juste après celui debgp/proxmox
comme ceci :1 2 3 4 5 6 7 8 9 10 11 12 13
terraform { required_version = ">= 1.0.0" #version de terraform supérieur ou égale à 1.0.0 required_providers { proxmox = { source = "bpg/proxmox" version = "0.70.0" } talos = { source = "siderolabs/talos" version = "0.7.0" } } }
- Exécuter la commande
tofu init
pour télécharger le nouveau provider. - Dans un nouveau fichier
talos-image.tf
, ajouter ladata talos_image_factory_extensions_versions
et laresource talos_image_factory_schematic
pour récupérer leschematic id
: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
data "talos_image_factory_extensions_versions" "this" { talos_version = var.talos_version filters = { names = [ "qemu-guest-agent" ] #qemu guest agent facile la communication entre le serveur proxmox et la vm. #BGP se base sur cette communication pour fonctionner recupérer l'état des VM. #C'est donc un pré-requis pour que BGP fonctionne correctement, sinon il risque d'attendre indéfiniment que la VM lui réponde. } } resource "talos_image_factory_schematic" "this" { schematic = yamlencode({ customization = { systemExtensions = { officialExtensions = data.talos_image_factory_extensions_versions.this.extensions_info.*.name } } }) }
- Dans le même fichier
talos-image.tf
ajouter cettenull_resource
pour exécuter un script sur le serveur proxmox afin de télécharger l’image talos avec leschematic id
et la version passer en paramètre :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
resource "null_resource" "this" { connection { type = "ssh" host = var.pve_ip user = "root" # Remplacez par l'utilisateur approprié private_key = file("~/.ssh/id_ed25519") #remplacez par votre clé ssh privée, vous pouvez copiez ce ficher dans les authorization_keys du serveur proxmox avec ssh-copy-id root@ip_du_serveur_proxmox } provisioner "file" { source = "script.sh" destination = "script.sh" } provisioner "remote-exec" { inline = [ "chmod +x script.sh", "./script.sh ${var.talos_img_name} ${var.talos_version} ${talos_image_factory_schematic.this.id}", ] } #Permet de toujours exécuter cette resource lors du tofu apply triggers = { always_run = timestamp() } }
- Voici le Contenu du fichier
script.sh
qui doit être à la racine du projet:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
#!/usr/bin/env bash #$1 = nom de l'image #$2 = version de Talos #$3 = schematic id de Talos pve_iso_path="/var/lib/vz/template/iso" image_name=$1.$2.img talos_version=$2 talos_schematic_id=$3 #Cette vérification est faite pour éviter de télécharger le fichier si il existe déjà, ce qui permet de gagner du temps et surtout de la bande passante if [[ -f "$pve_iso_path/$image_name" ]]; then echo "$1 existe déjà" else raw_filename="talos-nocloud-amd64.raw" echo "Installation si nécessaire du package xz-utils qui permet de décompresser les fichiers .xz" sudo apt-get install xz-utils -y echo "Téléchargement du fichier image Talos Linux" curl -o $raw_filename.xz https://factory.talos.dev/image/$talos_schematic_id/$talos_version/nocloud-amd64.raw.xz echo "Décompression du fichier image Talos Linux" xz -d $raw_filename.xz echo "Déplacement du fichier raw dans le dossier des fichiers iso de proxmox" mv $raw_filename $pve_iso_path/$image_name echo "Suppression du script dont on a plus besoin" rm script.sh fi
- N’oubliez pas d’ajuster le contenu du fichier
variables.tf
avec les nouvelles variables utilisées ci-dessus :1 2 3 4 5 6 7 8 9 10
variable "talos_version" { description = "Version de Talos Linux à utiliser" type = string default = "v1.9.2" } variable "talos_img_name" { type = string description = "Nom de l'image talos à télécharger sur https://factory.talos.dev" default = "talos-nocloud-amd64-qemu-agent" }
- Exécuter la command :
tofu plan
puistofu apply -auto-approve
, si tous se passe, vous devriez avoir un fichier .img dans le datastore de proxmox prêt à être utilisé.
- Dans le fichier
Création des machines virtuelles control-plane et worker :
Notre cluster kubernetes sera composé de 2 machines avec le minimum requis par Talos Linux. La resource
proxmox_virtual_environment_vm
debgp
sera utilisée pour créer les machines virtuelles. voir la documentation- Le control-plane : Dans un un nouveau fichier
control-plane.vm.tf
, ajouter le code suivant :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
resource "proxmox_virtual_environment_vm" "control-plane" { name = "control-plane" node_name = "pve" # Remplacez "pve" par le nom de votre serveur Proxmox # le provider bgp se base sur l'agent QEMU-guest-agent également pour récupérer les infos de la vm afin de le comparer à son état. agent { enabled = true } description = "Control Plane, Talos Linux charger de la gestion du cluster kubernetes" tags = ["control-plane","kubernetes", "Talos", "DEV"] # ajuster vos tags, peuvent être utilisé pour les filtres on_boot = true # démarrer la vm au démarrage du serveur proxmox stop_on_destroy = true cpu { cores = 2 #Talos recommande 4 coeurs pour des workloads de production, 2 étant le minimum pour le control plane mais ajuster à vos bésoins. type = "x86-64-v2-AES" # type de cpu moderne supporter par la plupart des serveurs et services. } memory { dedicated = 2048 # Talos recommande 4 Go pour des workloads de production, 2 étant le minimum pour le control plane mais ajuster à vos bésoins. } disk { datastore_id = "local-lvm" file_id = "local:iso/${var.talos_img_name}.${var.talos_version}.img" interface = "virtio0" file_format = "raw" size = 10 # 10 Go } initialization { datastore_id = "local-lvm" ip_config { ipv4 { address = "${var.control_plane_ip}/24" gateway = var.gateway } ipv6 { address = "dhcp" } } # ajuster si vous un server dns, sinon il prend ceux de google 8.8.8.8 et cloudflare 1.1.1.1 /*dns { domain = "local" servers = ["dns1", "dns2"] }*/ } network_device { bridge = "vmbr0" } operating_system { type = "l26" } depends_on = [null_resource.this] }
- Le worker :
worker.vm.tf
:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
resource "proxmox_virtual_environment_vm" "worker-1" { name = "worker-1" node_name = "pve" # Remplacez "pve" par le nom de votre serveur Proxmox # le provider bgp se base sur l'agent QEMU-guest-agent également pour récupérer les infos de la vm afin de le comparer à son état. agent { enabled = true } description = "Worker 1, chargé de faire tourner les workloads kubernetes" tags = ["worker", "kubernetes", "Talos", "DEV"] # ajuster vos tags, peuvent être utilisé pour les filtres on_boot = true # démarrer la vm au démarrage du serveur proxmox stop_on_destroy = true cpu { cores = 1 #Talos recommande 2 coeurs pour des workloads de production, 1 étant le minimum pour le worker mais ajuster à vos bésoins. type = "x86-64-v2-AES" # type de cpu moderne supporter par la plupart des serveurs et services. } memory { dedicated = 1024 # Talos recommande 2 Go pour des workloads de production, 1Go étant le minimum pour le worker mais ajuster à vos bésoins. } disk { datastore_id = "local-lvm" file_id = "local:iso/${var.talos_img_name}.${var.talos_version}.img" interface = "virtio0" file_format = "raw" size = 10 # 10 Go minimum pour Talos } initialization { datastore_id = "local-lvm" ip_config { ipv4 { address = "${var.worker_01_ip}/24" gateway = var.gateway } ipv6 { address = "dhcp" } } # ajuster si vous un server dns, sinon il prend ceux de google 8.8.8.8 et cloudflare 1.1.1.1 /*dns { domain = "local" servers = ["dns1", "dns2"] }*/ } network_device { bridge = "vmbr0" } operating_system { type = "l26" } depends_on = [null_resource.this] }
Note : il est posible de créer un module tofu pour éviter de dupliquer le code comme pour les VMs ci-dessus.
- Exécutez la commande
tofu plan
puistofu apply -auto-approve
pour créer les VMs. - A présent, talos n’est pas encore installé sur le disk des VMs, il tourne en mémoire vive.
- Le control-plane : Dans un un nouveau fichier
Initialisation du cluster :
Dans un nouveau fichier nommé talos.tf
, ajouter ce contenu suivant, voir la documentation officielle pour plus de détails
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
resource "talos_machine_secrets" "this" {} #cette resource génère les secrets, certificats, etc... data "talos_client_configuration" "this" { cluster_name = var.cluster_name client_configuration = talos_machine_secrets.this.client_configuration nodes = [var.control_plane_ip] #les ips de l'ensemble des control plane du cluster endpoints = [var.control_plane_ip] } #Configuration du control plane data "talos_machine_configuration" "controlplane" { cluster_name = var.cluster_name machine_type = "controlplane" cluster_endpoint = "https://${var.control_plane_ip}:6443" machine_secrets = talos_machine_secrets.this.machine_secrets } # Application de la configuration sur le control plane resource "talos_machine_configuration_apply" "controlplane" { client_configuration = talos_machine_secrets.this.client_configuration machine_configuration_input = data.talos_machine_configuration.controlplane.machine_configuration node = var.control_plane_ip } #Initialisation du cluster resource "talos_machine_bootstrap" "this" { depends_on = [talos_machine_configuration_apply.controlplane] node = var.control_plane_ip client_configuration = talos_machine_secrets.this.client_configuration } #Configuration du worker data "talos_machine_configuration" "worker" { cluster_name = var.cluster_name machine_type = "worker" cluster_endpoint = "https://${var.control_plane_ip}:6443" machine_secrets = talos_machine_secrets.this.machine_secrets } # Application de la configuration sur le worker resource "talos_machine_configuration_apply" "worker" { client_configuration = talos_machine_secrets.this.client_configuration machine_configuration_input = data.talos_machine_configuration.worker.machine_configuration node = var.worker_01_ip depends_on = [proxmox_virtual_environment_vm.worker-1] } # Utilisation d'un health check pour vérifier l'état du cluster et attendre que le cluster soit prêt avant terminer le tofu apply data "talos_cluster_health" "this" { depends_on = [ talos_machine_configuration_apply.controlplane, talos_machine_configuration_apply.worker, ] client_configuration = data.talos_client_configuration.this.client_configuration control_plane_nodes = [var.control_plane_ip] worker_nodes = [var.worker_01_ip] endpoints = data.talos_client_configuration.this.endpoints timeouts = { read = "8m" } } #Récupération de la configuration du cluster qui a été générée par talos #Cette configuration est utilisée pour générer le kubeconfig et le talosconfig resource "talos_cluster_kubeconfig" "this" { depends_on = [ talos_machine_bootstrap.this ] node = var.control_plane_ip client_configuration = talos_machine_secrets.this.client_configuration timeouts = { read = "1m" } }
- Ajouter le fichier
outputs.tf
: Ce fichier permet de récupérer les configurations générées par talos et de les afficher dans la console et par la suite enregistrer par exemple le fichier de config de kubernetes dans le dossier .kube/config1 2 3 4 5 6 7 8 9
output "talos_client_config" { value = data.talos_client_configuration.this.talos_config sensitive = true } output "k8s_config" { value = talos_cluster_kubeconfig.this.kubeconfig_raw sensitive = true }
- N’oubliez pas d’ajuster le fichier des
variables.tf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
variable gateway { type = string description = "IP de la passerelle" default = "192.168.10.1" } variable "control_plane_ip" { type = string description = "IP du control plane" default = "192.168.10.130" } variable "worker_01_ip" { type = string description = "IP du worker 01" default = "192.168.10.131" } variable "cluster_name" { type = string description = "Nom du cluster" default = "k8s-demo-talos" }
- Exécutez à nouveau la commande
tofu apply -auto-approve
, si vous regarder la console du control-plane vous devriez voir des activités en cours. - Au bout de quelques temps 2min45s dans mon cas, vous devriez voir le cluster kubernetes prêt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
tofu apply -auto-approve * * * * * data.talos_cluster_health.this: Still reading... [2m10s elapsed] data.talos_cluster_health.this: Still reading... [2m20s elapsed] data.talos_cluster_health.this: Still reading... [2m30s elapsed] data.talos_cluster_health.this: Still reading... [2m40s elapsed] data.talos_cluster_health.this: Read complete after 2m45s [id=cluster_health] Apply complete! Resources: 8 added, 0 changed, 0 destroyed. Outputs: k8s_config = <sensitive> talos_client_config = <sensitive>
Récuperation des manifests de configuration de talos et de kubernetes
Utiliser les commandes suivantes : ```shell #creation des répertoires de configuration au cas où ils n’existeraient pas mkdir -p ~/.kube || true mkdir -p ~/.talos || true
tofu output -raw k8s_config > ~/.kube/config tofu output -raw talos_client_config > ~/.talos/config
#attention à bien vérifier les permissions des fichiers de configuration et s’il y avait d’autres config de kubernetes ou talos
1
2
3
4
5
6
7
8
### Validation des nodes du cluster :
Via kubectl :
```shell
kubectl get nodes
NAME STATUS ROLES AGE VERSION
control-plane Ready control-plane 5m28s v1.32.0
worker-1 Ready <none> 5m1s v1.32.0
Via talosctl :
1
2
3
4
5
6
7
8
9
10
talosctl --nodes 192.168.10.130 --endpoints 192.168.10.130 dashboard
control-plane (v1.9.2): uptime 17m47s, 2x2.39GHz, 1.9 GiB RAM, PROCS 36, CPU 3.7%, RAM 34.3%
UUID ac631cba-3ac0-42a9-9a94-f5e85894b56e TYPE controlplane HOST control-plane
CLUSTER k8s-demo-talos (2 machines) KUBERNETES v1.32.0 IP 192.168.10.130/24
SIDEROLINK n/a KUBELET √ Healthy GW 192.168.10.1
STAGE √ Running APISERVER √ Healthy CONNECTIVITY √ OK
READY √ True CONTROLLER-MANAGER √ Healthy DNS 1.1.1.1, 8.8.8.8
SECUREBOOT × False SCHEDULER √ Healthy NTP time.cloudflare.com
── Logs ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Déploiement d’une application nginx :
1
2
3
4
5
6
7
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9m8s
nginx NodePort 10.97.216.89 <none> 80:32146/TCP 23
Accès à l’application nginx :
1
curl http://192.168.10:130:32146 #utiliser l'ip d'un des nodes du cluster
Amusez-vous bien avec votre cluster k8s !
Références :
- https://www.proxmox.com/en/
- https://search.opentofu.org/provider/siderolabs/talos/latest
- https://www.talos.dev
- https://search.opentofu.org/provider/bpg/proxmox/latest