web-dev-qa-db-fra.com

Obtention d'un point de terminaison / adresse IP Kubernetes Ingress

Base OS : CentOS (1 master 2 minions)
K8S version : 1.9.5 (deployed using KubeSpray)

Je suis nouveau sur Kubernetes Ingress et je mets en place 2 services différents, chacun accessible avec son propre chemin.

J'ai créé 2 déploiements:

kubectl run nginx --image=nginx --port=80
kubectl run echoserver --image=gcr.io/google_containers/echoserver:1.4 --port=8080

J'ai également créé les services correspondants:

kubectl expose deployment nginx --target-port=80 --type=NodePort
kubectl expose deployment echoserver --target-port=8080 --type=NodePort

Mes svc sont:

[root@node1 kubernetes]# kubectl get svc
NAME         TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
echoserver   NodePort   10.233.48.121   <none>        8080:31250/TCP   47m
nginx        NodePort   10.233.44.54    <none>        80:32018/TCP     1h

Mon adresse NodeIP est 172.16.16.2 et je peux accéder aux deux modules à l'aide de

http://172.16.16.2:31250 &
http://172.16.16.2:32018

Maintenant, en plus de cela, je veux déployer une entrée afin que je puisse atteindre les deux pods sans utiliser 2 IP et 2 ports différents MAIS 1 adresse IP avec des chemins différents.

Mon fichier Ingress est donc:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fanout-nginx-ingress
spec:
  rules:
  - http:
      paths:
      - path: /nginx
        backend:
          serviceName: nginx
          servicePort: 80
      - path: /echo
        backend:
          serviceName: echoserver
          servicePort: 8080

Cela donne:

[root@node1 kubernetes]# kubectl describe  ing fanout-nginx-ingress
Name:             fanout-nginx-ingress
Namespace:        development
Address:          
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host  Path  Backends
  ----  ----  --------
  *     
        /nginx   nginx:80 (<none>)
        /echo    echoserver:8080 (<none>)
Annotations:
Events:  <none>

Maintenant, quand j'essaie d'accéder aux pods en utilisant l'adresse NodeIP (172.16.16.2), je ne reçois rien.

http://172.16.16.2/echo
http://172.16.16.2/nginx

Y a-t-il quelque chose que j'ai manqué dans mes configurations?

7
user4889345

J'ai eu le même problème sur mon installation bare metal - ou plutôt quelque chose de proche (cluster virtuel kubernetes - ensemble de machines virtuelles connectées via Host-Only-Adapter). Voici le lien vers mon kubernetes vlab .

Tout d'abord, assurez-vous que le contrôleur d'entrée est installé. Actuellement, il y a deux contrôleurs d'entrée à essayer contrôleur d'entrée kubernetes nginx et contrôleur d'entrée nginx kubernetes -J'ai installé le premier.

Installation

Allez dans instructions d'installation et exécutez la première étape

# prerequisite-generic-deployment-command
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml

Obtenez ensuite les adresses IP des nœuds de cluster.

$ kubectl get nodes -o wide
NAME     STATUS   ROLES    ...   INTERNAL-IP    
master   Ready    master   ...   192.168.121.110
node01   Ready    <none>   ...   192.168.121.111
node02   Ready    <none>   ...   192.168.121.112

En outre, la caisse ingress-nginx service de type LoadBalancer. Je le fais en téléchargeant le service de modèle NodePort à partir du didacticiel d'installation et en effectuant les ajustements suivants dans svc-ingress-nginx-lb.yaml fichier.

$ curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml > svc-ingress-nginx-lb.yaml

# my changes svc-ingress-nginx-lb.yaml
type: LoadBalancer
externalIPs:
  - 192.168.121.110
  - 192.168.121.111
  - 192.168.121.112
externalTrafficPolicy: Local

# create ingress- service
$ kubectl apply -f svc-ingress-nginx-lb.yaml

Vérification

Regarde ça ingress-nginx le service a été créé.

$ kubectl get svc -n ingress-nginx
NAME            TYPE           CLUSTER-IP     EXTERNAL-IP                                                       PORT(S)                      AGE
ingress-nginx   LoadBalancer   10.110.127.9   192.168.121.110,192.168.121.111,192.168.121.112   80:30284/TCP,443:31684/TCP   70m

Regarde ça nginx-ingress-controller le déploiement a été créé.

$ kubectl get deploy -n ingress-nginx
NAME                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-ingress-controller   1         1         1            1           73m

Regarde ça nginx-ingress pod est en cours d'exécution.

$ kubectl get pods --all-namespaces -l 

app.kubernetes.io/name=ingress-nginx
NAMESPACE       NAME                                        READY   STATUS    RESTARTS   AGE
ingress-nginx   nginx-ingress-controller-5cd796c58c-lg6d4   1/1     Running   0          75m

Enfin, vérifiez la version du contrôleur d'entrée. N'oubliez pas de changer le nom du pod!

$ kubectl exec -it nginx-ingress-controller-5cd796c58c-lg6d4 -n ingress-nginx -- /nginx-ingress-controller --version
-------------------------------------------------------------------------------
NGINX Ingress controller
  Release:    0.21.0
  Build:      git-b65b85cd9
  Repository: https://github.com/aledbf/ingress-nginx
-------------------------------------------------------------------------------

Essai

Testez que le contrôleur d'entrée fonctionne en exécutant les étapes de cette tutoriel -bien sûr, vous allez omettre la partie minikube.

La réussite de l'exécution de toutes les étapes créera une ressource de contrôleur d'entrée qui devrait ressembler à ceci.

$ kubectl get ing
NAME               HOSTS                                ADDRESS                                          PORTS    AGE
ingress-tutorial   myminikube.info,cheeses.all          192.168.121.110,192.168.121.111,192.168.121.112   80      91m

Et des pods qui ressemblent à ça.

$ kubectl get pods 
NAME                              READY   STATUS             RESTARTS   AGE
cheddar-cheese-6f94c9dbfd-cll4z   1/1     Running            0          110m
echoserver-55dcfbf8c6-dwl6s       1/1     Running            0          104m
stilton-cheese-5f6bbdd7dd-8s8bf   1/1     Running            0          110m

Enfin, testez cette demande à myminikube.info se propage via l'équilibreur de charge d'entrée.

$ curl myminikube.info
CLIENT VALUES:
client_address=10.44.0.7
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://myminikube.info:8080/

SERVER VALUES:
server_version=nginx: 1.10.0 - lua: 10001

HEADERS RECEIVED:
accept=*/*
Host=myminikube.info
user-agent=curl/7.29.0
x-forwarded-for=10.32.0.1
x-forwarded-Host=myminikube.info
x-forwarded-port=80
x-forwarded-proto=http
x-original-uri=/
x-real-ip=10.32.0.1
x-request-id=b2fb3ee219507bfa12472c7d481d4b72
x-scheme=http
BODY:

Ce fut un long voyage pour faire pénétrer le travail dans un environnement semblable à celui du métal d'ours. Ainsi, j'inclurai des liens pertinents qui m'ont aidé.

8
Lukasz Dynowski

Vérifiez si vous avez un contrôleur d'entrée dans votre cluster:

$ kubectl get po --all-namespaces

Vous devriez voir quelque chose comme:

kube-system nginx-ingress-controller-gwts0   1/1  Running   0    18d

Il est uniquement possible de créer une entrée pour adresser les services à l'intérieur de l'espace de noms dans lequel réside l'entrée. Les entrées d'espaces de noms croisés ne sont pas implémentées pour des raisons de sécurité.

1
Nicola Ben

Il semble que votre cluster manque de contrôleur Ingress.

En général, le contrôleur Ingress fonctionne comme suit: 1. recherchez un certain type d'objets (entrée, "nginx") dans un cluster 2. analysez cet objet et créez une section de configuration pour un module d'entrée spécifique. 3. mettez à jour cet objet pod (redémarrez-le avec une configuration mise à jour)

Ce pod particulier est responsable du traitement du trafic provenant des ports entrants (généralement quelques ports dédiés sur les nœuds) vers la destination de trafic configurée dans le cluster.

Vous pouvez choisir entre deux contrôleurs pris en charge et maintenus - Nginx et GCE

Le contrôleur d'entrée se compose de plusieurs composants que vous créez lors de l'installation. Voici la partie installation de la documentation Nginx Ingress :

curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/namespace.yaml              | kubectl apply -f -
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/default-backend.yaml        | kubectl apply -f -
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/configmap.yaml              | kubectl apply -f -
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/tcp-services-configmap.yaml | kubectl apply -f -
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/udp-services-configmap.yaml | kubectl apply -f -

Si vous avez RBAC autorisation configurée dans votre cluster:

curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/rbac.yaml      | kubectl apply -f -
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/with-rbac.yaml | kubectl apply -f -

Si aucun RBAC n'est configuré:

curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/without-rbac.yaml | kubectl apply -f -

Si vous créez un cluster à partir de zéro:

curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml | kubectl apply -f -

Vérifiez votre installation:

kubectl get pods --all-namespaces -l app=ingress-nginx --watch

Vous devriez voir quelque chose comme:

NAMESPACE       NAME                                       READY     STATUS    RESTARTS   AGE
ingress-nginx   nginx-ingress-controller-699cdf846-nj2rw   1/1       Running   0          1h

Vérifiez les services disponibles et leurs paramètres:

kubectl get services --all-namespaces

Si vous utilisez un déploiement de fournisseur de services personnalisé (minikube, AWS, Azure, GKE), suivez documentation Nginx Ingress pour les détails d'installation.

Voir officiel documentation Kubernetes Ingress pour plus de détails sur Ingress.

1
VAS