Prise en charge du service de nom externe entre les espaces de noms
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
externalNamedans 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
ExternalNamedoit 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.