Как выставить сервисы, работающие на minikube, установленном в бродячем боксе?

Инфраструктура:

+------------------------------------------------------+
| Host                                                 |
|     +-----------------------------------+            |
|     | Vagrant box                       |            |
|     |    +------------------------------+            |
|     |    | Minikube                     |            |
|     |    |   +--------------------------+            |
|     |    |   | Pods/Services/etc...     |            |
|     |    |   |                          |            |
|     |    |   |                          | <--+ curl  |
|     |    |   |                          |            |
|     |    |   |                          |            |
|     |    |   |                          |            |
|     |    |   |                          |            |
|     |    |   |                          |            |
+-----+----+---+--------------------------+------------+

Пример:

$ kubectl run nginx --image=nginx:alpine

svc.yaml :

apiVersion: v1
kind: Service
metadata:
  labels:
    run: nginx
  name: nginx
spec:
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30888
    port: 30888
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

Создайте службу (обратите внимание, что ее тип - NodePort ):

$ kubectl create -f svc.yaml

Все готово и работает, и мне кажется, что я могу подключиться к 127.0.0.1:30888 и 0.0.0.0:30888 из поля vagrant :

$ kubectl get po nginx-5bd976694-nq5sr 
NAME                    READY     STATUS    RESTARTS   AGE
nginx-5bd976694-nq5sr   1/1       Running   0          9m

$ kubectl get svc nginx
NAME      TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
nginx     NodePort   10.105.135.126   <none>        30888:30888/TCP   9m

$ curl -sv 127.0.0.1:30888 > /dev/null
* Rebuilt URL to: 127.0.0.1:30888/
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 30888 (#0)
> GET / HTTP/1.1
> Host: 127.0.0.1:30888
> User-Agent: curl/7.52.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: nginx/1.13.8
< Date: Thu, 04 Jan 2018 11:18:21 GMT
< Content-Type: text/html
< Content-Length: 612
< Last-Modified: Tue, 26 Dec 2017 18:18:51 GMT
< Connection: keep-alive
< ETag: "5a42928b-264"
< Accept-Ranges: bytes
< 
{ [612 bytes data]
* Curl_http_done: called premature == 0
* Connection #0 to host 127.0.0.1 left intact

$ curl -sv 0.0.0.0:30888 > /dev/null
* Rebuilt URL to: 0.0.0.0:30888/
*   Trying 0.0.0.0...
* TCP_NODELAY set
* Connected to 0.0.0.0 (127.0.0.1) port 30888 (#0)
> GET / HTTP/1.1
> Host: 0.0.0.0:30888
> User-Agent: curl/7.52.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: nginx/1.13.8
< Date: Thu, 04 Jan 2018 11:18:28 GMT
< Content-Type: text/html
< Content-Length: 612
< Last-Modified: Tue, 26 Dec 2017 18:18:51 GMT
< Connection: keep-alive
< ETag: "5a42928b-264"
< Accept-Ranges: bytes
< 
{ [612 bytes data]
* Curl_http_done: called premature == 0
* Connection #0 to host 0.0.0.0 left intact

Таким образом, это работает на гостевой машине, однако если я попробую curl на хосте vagrant - ответа нет:

$ vagrant port | grep guest
    22 (guest) => 2222 (host)
 30270 (guest) => 27017 (host)
 30888 (guest) => 30888 (host)
 30330 (guest) => 3306 (host)
 30080 (guest) => 8080 (host)
 30081 (guest) => 8081 (host)

$ curl -sv 127.0.0.1:30888 > /dev/null
* Rebuilt URL to: 127.0.0.1:30888/
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 30888 (#0)
> GET / HTTP/1.1
> Host: 127.0.0.1:30888
> User-Agent: curl/7.52.1
> Accept: */*
> 

$ curl -sv 0.0.0.0:30888 > /dev/null
* Rebuilt URL to: 0.0.0.0:30888/
*   Trying 0.0.0.0...
* TCP_NODELAY set
* Connected to 0.0.0.0 (127.0.0.1) port 30888 (#0)
> GET / HTTP/1.1
> Host: 0.0.0.0:30888
> User-Agent: curl/7.52.1
> Accept: */*
> 

Я думаю, что самая большая проблема здесь в том, что minukube ip в поле vagrant: 127.0.0.1 :

$ sudo -E minikube ip
127.0.0.1

Есть идеи?

0
задан 4 January 2018 в 14:03
2 ответа

Оказалось, что простое правило iptables может закончиться несчастье:

# iptables -A DOCKER -j ACCEPT
0
ответ дан 5 December 2019 в 06:53

Может потребоваться запустить с параметром --insecure-bind-address = 0.0.0.0.

https://github.com/kubernetes/kubernetes/issues/39586

0
ответ дан 5 December 2019 в 06:53

Теги

Похожие вопросы