Solution d'haute disponibilité pour Ingress Controller
Les contrôleurs Ingress sont généralement déployés via DaemonSet avec nodeSelector sur des nœuds spécifiques, qui sont ensuite intégrés à un équilibreur de charge externe pour exposer les services.
Exemple de déploimeent multi-instance d'Ingress Controller
1. Vérification de l'état actuel
[root@k8s-master ingress]# kubectl get pod -n ingress-nginx
NAME READY STATUT REDEMARRAGES ÂGE
nginx-ingress-controller-5dc64b58f-ctjfd 1/1 Running 0 23h
2. Suppression du déploiement existant
[root@k8s-master ingress]# kubectl delete deploy nginx-ingress-controller -n ingress-nginx
déploiement "nginx-ingress-controller" supprimé
3. Configuration du déploiement
Étiquetage des nœuds
[root@k8s-master ~]# kubectl label nodes k8s-node1 role=ingress
node/k8s-node1 étiqueté
[root@k8s-master ~]# kubectl label nodes k8s-node2 role=ingress
node/k8s-node2 étiqueté
Modification du manifeste YAML
kind: DaemonSet # Anciennement Deployment
metadata:
name: nginx-ingress-controller
namespace: ingress-nginx
spec:
selector:
matchLabels:
app: nginx-ingress
template:
spec:
nodeSelector:
role: ingress # Sélection par étiquette personnalisée
hostNetwork: true
containers:
- name: controller
image: registry.example.com/nginx-ingress:1.2.3
ports:
- containerPort: 80
- containerPort: 443
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
livenessProbe:
httpGet:
path: /healthz
port: 10254
readinessProbe:
httpGet:
path: /healthz
port: 10254
Déploiement et validation
[root@k8s-master ~]# kubectl apply -f ingress-controller.yaml
espace de noms/ingress-nginx créé
daemonset.apps/nginx-ingress-controller déployé
[root@k8s-master ~]# kubectl get pods -n ingress-nginx -o wide
NAME READY STATUT REDEMARRAGES ÂGE IP NOEUD NOEUD DÉSIGNÉ GATES
nginx-ingress-controller-k9cf9 1/1 Running 0 2m 192.168.0.202 k8s-node1 <none> <none>
nginx-ingress-controller-kvxr8 1/1 Running 0 2m 192.168.0.203 k8s-node2 <none> <none></none></none></none></none>