2017-09-30 10 views
1

J'ai installé minikube sur un serveur auquel je peux accéder depuis Internet.Kubernetes Ingress s'exécutant derrière le proxy inverse nginx

J'ai créé un service de Kubernetes disponible:

>kubectl get service myservice 
NAME  CLUSTER-IP EXTERNAL-IP PORT(S)  AGE 
myservice 10.0.0.246 <nodes>  80:31988/TCP 14h 

L'adresse IP de minikube est:

>minikube ip 
192.168.42.135 

Je voudrais l'URL http://myservice.myhost.com (à savoir le port 80) Recenser la service à minikube.

J'ai nginx en cours d'exécution sur l'hôte (totalement indépendant de kubernetes). Je peux mettre en place un hôte virtuel, mappant l'URL à 192.168.42.135:31988 (le port de noeud) et cela fonctionne très bien.

Je voudrais utiliser une entrée. J'ai ajouté et activé l'entrée. Mais je ne suis pas sûr de:

a) ce que le fichier YAML doit contenir

b) comment le trafic entrant sur le port 80, à partir du navigateur, sont redirigées vers l'entrée et minikube.

c) dois-je encore utiliser nginx comme proxy inverse? D) dans l'affirmative, à quelle adresse est-ce que ingress-nginx s'exécute (de sorte que je puisse lui assigner le trafic)?

Répondre

0

Comme indiqué par @silverfox, vous avez besoin d'un contrôleur d'entrée. Vous pouvez activer le contrôleur d'entrée dans minikube comme ceci:

minikube addons enable ingress 

Minikube fonctionne sur IP 192.168.42.135, selon minikube ip. Et après avoir activé l'addon d'entrée, il écoute aussi le port 80. Mais cela signifie qu'un proxy inverse comme nginx est requis sur l'hôte, pour passer des appels proxy au port 80 via minikube.

Après avoir activé l'entrée sur minikube, j'ai créé un fichier d'entrée (myservice-ingress.YAML):

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: myservice-ingress 
    annotations: 
    ingress.kubernetes.io/rewrite-target:/
spec: 
    rules: 
    - host: myservice.myhost.com 
     http: 
     paths: 
     - path:/
      backend: 
      serviceName: myservice 
      servicePort: 80 

Notez que ceci est différent de la réponse donnée par @silverfox parce qu'il doit contenir le « hôte » qui doit correspondre.

En utilisant ce fichier, j'ai créé l'entrée:

kubectl create -f myservice-ingress.yaml 

Enfin, j'ai ajouté un hôte virtuel à nginx (en cours d'exécution à l'extérieur de minikube) au trafic proxy de l'extérieur dans minikube:

server { 
    listen 80; 
    server_name myservice.myhost.com; 
    location/{ 
    proxy_set_header Host   $host; 
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_pass http://192.168.42.135; 
    } 
} 

L'en-tête Host doit être transmis car l'entrée l'utilise pour correspondre au service. Si ce n'est pas le cas, minikube ne peut pas faire correspondre la requête au service. N'oubliez pas de redémarrer nginx après avoir ajouté l'hôte virtuel ci-dessus.

2

Configuration

Tout d'abord, vous avez besoin d'un nginx ingress controller. La ou les instances nginx écouteront sur les ports 80 et 443 de l'hôte et redirigeront chaque requête HTTP vers les services qui ont défini la configuration d'entrée, comme ceci.

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: my-service-ingress 
annotations: 
    # by default the controller redirects (301) HTTP to HTTPS, 
    # the following would make it disabled. 
    # ingress.kubernetes.io/ssl-redirect: "false" 
spec: 
    rules: 
    - http: 
     paths: 
     - path:/
     backend: 
      serviceName: myservice 
      servicePort: 80 

Utilisez https://{host-ip}/ pour visiter myservice, l'hôte doit être celui où le contrôleur de nginx est en cours d'exécution à.

extérieur

Normalement, vous n'avez pas besoin d'un autre nginx Kubernetes extérieur cluster.

Bien que Minikube soit un peu différent, il exécute kubernetes dans une machine virtuelle au lieu de l'hôte.

Nous avons besoin de faire un peu de port vers l'avant comme hôte: 80 => minikube: 80, Exécuter un proxy inverse (comme nginx) dans l'hôte est un moyen élégant. Il peut également être effectué par setting virtual networking port forward in Virtualbox.

+0

Je suppose que minikube est différent des kubernetes "normaux", car il a sa propre adresse IP, et nginx est donc nécessaire pour envoyer des requêtes via minikube. Merci pour les conseils si. –