web-dev-qa-db-fra.com

minikube - comment accéder à pod via pod ip en utilisant curl

J'utilise minikube pour créer un cluster kubernetes local.

Je crée ReplicationController via le fichier webapp-rc.yaml.

apiVersion: v1
kind: ReplicationController
metadata:
  name: webapp
spec:
  replicas: 2
  template: 
    metadata:
      name: webapp
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: Tomcat
        ports:
        - containerPort: 8080

et j'imprime l'ip des pods sur stdout:

kubectl get pods -l app=webapp -o yaml | grep podIP

podIP: 172.17.0.18
podIP: 172.17.0.1

et, je veux accéder au pod en utilisant curl

curl 172.17.0.18:8080

Mais, la sortie standard me donne: curl: (52) Empty reply from server

Je sais que je peux accéder à mon application dans le conteneur Docker dans le pod via le service.

Je trouve ce code dans un livre. Mais le livre ne donne pas le context pour exécuter ce code.

En utilisant minikube, comment accéder au pod via le pod ip en utilisant curl dans la machine hôte?

mise à jour 1

Je trouve un moyen d'utiliser kubectl proxy:

➜  ~ kubectl proxy
Starting to serve on 127.0.0.1:8001

puis je peux accéder au pod via curl comme ceci:

curl http://localhost:8001/api/v1/namespaces/default/pods/webapp-jkdwz/proxy/

webapp-jkdwz Peut être trouvé par la commande kubectl get pods -l app=webapp

mise à jour 2

  1. minikube ssh - connectez-vous à la minikube VM

  2. et ensuite, je peux utiliser curl <podIP>:<podPort>, car mon cas est curl 172.17.0.18:8080

11
slideshowp2

Tout d'abord, l'image Tomcat expose le port 8080 et non 80, donc le YAML correct serait:

apiVersion: v1
kind: ReplicationController
metadata:
  name: webapp
spec:
  replicas: 2
  template: 
    metadata:
      name: webapp
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: Tomcat
        ports:
        - containerPort: 8080

minikube est exécuté à l'intérieur d'une machine virtuelle, donc la boucle 172.17.0.18:8080 ne fonctionnerait qu'à partir de l'intérieur de cette machine virtuelle.

Vous pouvez toujours créer un service pour exposer vos applications:

kubectl expose rc webapp --type=NodePort

Et utilisez la commande suivante pour obtenir l'URL:

minikube service webapp --url

Si vous devez interroger un module spécifique, utilisez redirection de port :

kubectl port-forward <POD NAME> 8080

Ou tout simplement ssh dans la machine virtuelle de minikube et interrogez à partir de là.

11
Ignacio Millán

Cette commande est correcte, mais elle ne fonctionne qu'à partir d'une machine ayant accès au réseau de superposition. (En cas de mini-cube, la machine hôte n'en a pas par défaut).

Vous pouvez configurer un proxy pour votre pod avec:

kubectl port-forward [name of your pod] [pod port]

Par la suite, vous pouvez (à partir d'un autre Shell):

curl 127.0.0.1:port/path

Voir également: https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/#forward-a-local-port-to-a-port- sur le pod

4
Janos Lenart