Prise en charge du service de nom externe entre les espaces de noms

Dernière publication : Oct 02, 2026
Les espaces de noms sont utilisés pour isoler les ressources au sein d'un cluster Kubernetes. Parfois, les services d'un espace de noms différent peuvent avoir besoin d'accéder à un service situé dans un autre espace de noms. Dans de tels scénarios, vous pouvez utiliser le service ExternalName fourni par Kubernetes. Un service ExternalName est un service spécial qui n'a pas de sélecteurs et utilise plutôt des noms DNS.
Dans la définition du service, le champ externalName doit pointer vers l'espace de noms et également vers le service auquel nous essayons d'accéder dans cet espace de noms. Le contrôleur d'entrée Citrix prend en charge les services de type ExternalName lorsque vous devez accéder à des services au sein du cluster.
Lorsque vous créez le service ExternalName, les critères suivants doivent être remplis :
  • Le champ externalName dans la définition du service doit respecter le format : svc: <name-of-the-service>.<namespace-of-the-service>.svc.cluster.local
  • Le numéro de port dans le service ExternalName doit correspondre exactement au numéro de port du service ciblé.
Remarque :
Lorsque le service d'une application est en dehors du cluster Kubernetes et que vous avez créé un service ExternalName, vous pouvez résoudre le nom de domaine en utilisant la fonctionnalité de gestion du trafic pour les services externes.

Exemple de service ExternalName

Dans cet exemple, un service mysql est en cours d'exécution dans l'espace de noms par défaut et un exemple de service ExternalName est créé pour accéder au service mysql depuis l'espace de noms namespace1.
Voici un exemple de définition de service pour un service MySQL s'exécutant dans l'espace de noms par défaut.
apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: default
spec:
  clusterIP: None
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
  selector:
    app: mysql
  type: ClusterIP
Voici un exemple de définition de service ExternalName pour accéder au service mysql depuis l'espace de noms namespace1.
kind: Service
apiVersion: v1
metadata:
  name: dbservice
  namespace: namespace1
spec:
  type: ExternalName
  externalName: mysql.default.svc.cluster.local
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
Dans l'exemple, le service pointe vers l'espace de noms où mysql est déployé, comme spécifié dans le champ externalName: mysql.default.svc.cluster.local. Ici, mysql est le nom du service et default est l'espace de noms. Vous pouvez voir que le nom du port est également le même que celui du service mysql.