L'annotation k8s.aliyun.com/eci-custom-hosts permet d'ajouter des entrées personnalisées au fichier /etc/hosts d'un pod lors de sa création. Cette fonctionnalité est utile lorsque les conteneurs doivent résoudre un nom de domaine vers une adresse IP spécifique, par exemple pour extraire des images depuis un registre géré en interne.
Ne modifiez pas directement le fichier /etc/hosts à l'intérieur d'un conteneur en cours d'exécution, car les modifications manuelles risquent de ne pas être conservées.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster Kubernetes avec la prise en charge des instances Elastic Container (ECI) activée
Les autorisations nécessaires pour créer des ressources Deployment
Fonctionnement
Lorsque vous ajoutez l'annotation k8s.aliyun.com/eci-custom-hosts à un pod, l'instance ECI injecte les mappages hôte-IP spécifiés dans le fichier /etc/hosts.
Chaque mappage utilise le format JSON suivant :
{"host":"<domain-name>","ip":"<ip-address>"}
Pour spécifier plusieurs mappages, utilisez un tableau JSON :
[{"host":"example.com","ip":"100.100.XX.XX"},{"host":"aliyundoc.com","ip":"100.100.XX.XX"}]
Chaque objet associe exactement un nom de domaine à une adresse IP. Pour mapper plusieurs domaines vers la même adresse IP, ajoutez un objet distinct pour chaque domaine.
Contraintes :
Ajoutez l'annotation lors de la création du pod. L'ajout ou la modification de l'annotation sur un pod existant n'a aucun effet.
Pour les déploiements (Deployments), placez l'annotation dans
spec.template.metadata.annotations, et non dans la sectionmetadatade niveau supérieur.
Ajouter des entrées d'hôte personnalisées
L'exemple suivant crée un déploiement comportant deux entrées d'hôte personnalisées. Le conteneur nginx extrait son image depuis example.com et le conteneur busybox depuis aliyundoc.com. Les deux noms de domaine sont résolus vers les adresses IP spécifiées dans l'annotation.
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 1
selector:
matchLabels:
app: test
template:
metadata:
name: test
labels:
app: test
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-custom-hosts: "[{\"host\":\"example.com\",\"ip\":\"100.100.XX.XX\"},{\"host\":\"aliyundoc.com\",\"ip\":\"100.100.XX.XX\"}]"
spec:
containers:
- name: nginx
image: example.com/test/nginx:latest
ports:
- containerPort: 80
- name: busybox
image: aliyundoc.com/test/busybox:1.30
command: ["sleep"]
args: ["999999"]
Remplacez 100.100.XX.XX par les adresses IP réelles de vos registres d'images.
Vérifier la configuration
Une fois le pod en cours d'exécution, vérifiez que les entrées personnalisées figurent bien dans le fichier /etc/hosts :
kubectl exec <pod-name> -- cat /etc/hosts
Si les entrées personnalisées sont absentes, confirmez que l'annotation était présente lors de la création initiale du pod, et non ajoutée ultérieurement.