web-dev-qa-db-fra.com

Entrée simple de Host avec microk8s?

Je voudrais faire deux choses avec MicroK8:

  1. Acheminez les ports 80/443 de la machine hôte (Ubuntu 18.04) vers Microk8s
  2. Utilisez quelque chose comme la simple entrée définie dans les documents kubernetes.io

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
9
denski

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.

6
Crou