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
minikube ssh
- connectez-vous à la minikube VM
et ensuite, je peux utiliser curl <podIP>:<podPort>
, car mon cas est curl 172.17.0.18:8080
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à.
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