Je voudrais faire deux choses avec MicroK8:
Mon objectif final est de créer un cluster Kubernetes à nœud unique qui se trouve sur l'hôte Ubuntu, puis d'utiliser l'entrée pour router différents domaines vers leurs pods respectifs à l'intérieur du service.
J'ai essayé de le faire avec Microk8s au cours des deux derniers jours, mais je ne peux pas m'en occuper.
Le meilleur que j'ai obtenu jusqu'à présent utilise MetalLB pour créer un équilibreur de charge. Mais cela m'a obligé à utiliser une adresse IP gratuite disponible sur mon réseau local plutôt que l'adresse IP des machines hôtes.
J'ai également activé le default-http-backend
et a tenté d'exporter et de modifier ces fichiers de configuration sans succès.
À titre d'exemple, cela fonctionnera sur Minikube
une fois que le module complémentaire d'entrée sera activé. Cet exemple montre l'image du serveur Nginx de base au port 80 sur l'IP du cluster:
# ingress-service.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
# - Host: nginx.ioo
- http:
paths:
- path: /
backend:
serviceName: nginx-cluster-ip-service
servicePort: 80
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
component: nginx
template:
metadata:
labels:
component: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
# nginx-cluster-ip-service
apiVersion: v1
kind: Service
metadata:
name: nginx-cluster-ip-service
spec:
type: ClusterIP
selector:
component: nginx
ports:
- port: 80
targetPort: 80
Si je vous ai bien compris, il y a peut-être quelques pistes que vous envisagez.
L'un serait MetalLB que vous avez déjà mentionné.
MetalLB fournit une implémentation d'équilibrage de charge réseau pour les clusters Kubernetes qui ne s'exécutent pas sur un fournisseur de cloud pris en charge, permettant efficacement l'utilisation des services LoadBalancer dans n'importe quel cluster.
Vous pouvez lire l'implémentation détaillée ne solution logicielle pure: MetalLB
Une autre façon serait via un service NodePort
Cette approche présente quelques autres limites dont il faut être conscient:
- Adresse IP source
Les services de type NodePort effectuent traduction de l'adresse source par défaut. Cela signifie que l'IP source d'une requête HTTP est toujours l'adresse IP du nœud Kubernetes qui a reçu la requête du point de vue de NGINX.
Vous pouvez également utiliser Réseau hôte
Dans une configuration où aucun équilibreur de charge externe n'est disponible mais où l'utilisation de NodePorts n'est pas une option, on peut configurer
ingress-nginx
Pods pour utiliser le réseau de l'hôte sur lequel ils s'exécutent au lieu d'un espace de noms réseau dédié. L'avantage de cette approche est que le contrôleur NGINX Ingress peut lier les ports 80 et 443 directement aux interfaces réseau des nœuds Kubernetes, sans la traduction réseau supplémentaire imposée par les services NodePort.
Vous devez également vous rappeler que si vous modifiez la configuration à l'intérieur du POD
, elle disparaîtra si le Pod est redémarré ou s'il plante.
J'espère que cela vous aidera à déterminer la voie à suivre avec votre idée.