minikube - как получить доступ к pod через pod ip, используя curl - PullRequest
0 голосов
/ 28 мая 2018

Я использую minikube для создания локального кластера kubernetes.

Я создаю ReplicationController через 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

и печатаю ip стручков в stdout:

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

podIP: 172.17.0.18
podIP: 172.17.0.1

и я хочу получить доступ к модулю, используя curl

curl 172.17.0.18:8080

Но стандартный вывод даетя: curl: (52) Empty reply from server

Я знаю, что могу получить доступ к своему приложению в Docker-контейнере в модуле через службу.

Я нахожу этот код в книге.Но книга не дает context для выполнения этого кода.

Используя minikube, как получить доступ к pod через pod ip, используя curl на хост-компьютере?

update 1

Я нахожу способ, используя kubectl proxy:

➜  ~ kubectl proxy
Starting to serve on 127.0.0.1:8001

, и затем я могу получить доступ к модулю через curl, как это:

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

webapp-jkdwz можно найти по команде kubectl get pods -l app=webapp

update 2

  1. minikube ssh - войти в minikube VM

  2. и затем я могу использовать curl <podIP>:<podPort>, для моего случая это curl 172.17.0.18:8080

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Прежде всего, образ tomcat предоставляет порт 8080, а не 80, поэтому правильный 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

minikube выполняется внутри виртуальной машины, так что curl 172.17.0.18:8080 будет работать толькоиз этой виртуальной машины.

Вы всегда можете создать службу для показа своих приложений:

kubectl expose rc webapp --type=NodePort

И использовать следующую команду для получения URL:

minikube service webapp --url

Если вам нужно запросить конкретный модуль, используйте переадресацию портов :

kubectl port-forward <POD NAME> 8080

Или просто введите ssh в виртуальную машину minikube и выполните запрос оттуда.

0 голосов
/ 28 мая 2018

Эта команда верна, но она работает только с компьютера, имеющего доступ к оверлейной сети.(В случае с minikube хост-машина по умолчанию этого не имеет).

Вы можете настроить прокси для вашего модуля с помощью:

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

После этого вы можете (из другой оболочки):

curl 127.0.0.1:port/path

Смотри также: https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/#forward-a-local-port-to-a-port-on-the-pod

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...