Почему мой сервис не может передавать traffi c в модуль с именованным портом на мини-кубе? - PullRequest
1 голос
/ 03 февраля 2020

У меня проблемы с примерами в разделе 5.1.1 Использование именованных портов из Kubernetes In Action от Марко Лукса. Пример выглядит следующим образом:

Первый - Создать

Я создаю модуль с именованным портом, который запускает контейнер Node.js, который отвечает на You've hit <hostname> при попадании:

apiVersion: v1
kind: Pod
metadata:
  name: named-port-pod
  labels:
    app: named-port
spec: 
  containers:
  - name: kubia
    image: michaellundquist/kubia
    ports:
    - name: http
      containerPort: 8080

И подобный сервис (обратите внимание, это упрощенная версия оригинального примера , которая также не работает.: * 10101 *

apiVersion: v1
kind: Service
metadata:
  name: named-port-service
spec:
  ports:
  - name: http
    port: 80
    targetPort: http
  selector:
    app: named-port

Второй - проверка

$ kubectl get po -o wide --show-labels
NAME             READY   STATUS    RESTARTS   AGE   IP           NODE       NOMINATED NODE   READINESS GATES   LABELS
named-port-pod   1/1     Running   0          45m   172.17.0.7   minikube   <none>           <none>            app=named-port


$ kubectl get services
NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes           ClusterIP   10.96.0.1       <none>        443/TCP   53m
named-port-service   ClusterIP   10.96.115.108   <none>        80/TCP    19m

$ kubectl describe service named-port-service 
Name:              named-port-service
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          app=named-port
Type:              ClusterIP
IP:                10.96.115.108
Port:              http  80/TCP
TargetPort:        http/TCP
Endpoints:         172.17.0.7:8080
Session Affinity:  None
Events:            <none>

Третий - Тест (Сбой)

$ kubectl exec named-port-pod -- curl named-port-pod:8080
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    26    0    26    0     0   5494      0 --:--:-- --:--:-- --:--:--  6500
You've hit named-port-pod

$ kubectl exec named-port-pod -- curl --max-time 20 named-port-service
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:19 --:--:--     0curl: (28) Connection timed out after 20001 milliseconds
command terminated with exit code 28

Как видите, все работает, когда я нажимаю named-port-pod:8080, но не работает, когда я нажимаю named-port-service. Я Я уверен, что у меня правильное отображение, потому что kubectl describe service named-port-service имеет правильную конечную точку. Я думаю, что minikube может использовать именованные порты , но мой сервис не может передавать соединения на мой модуль. Почему?

ps здесь моя версия миникуба:

$ minikube version
minikube version: v1.6.2
commit: 54f28ac5d3a815d1196cd5d57d707439ee4bb392

1 Ответ

2 голосов
/ 03 февраля 2020

Это известная проблема с миникубом. Pod не может достичь себя через сервисный IP. Вы можете попробовать получить доступ к своему сервису из другого модуля или использовать следующий обходной путь, чтобы это исправить.

minikube ssh
sudo ip link set docker0 promisc on

Открытый выпуск: https://github.com/kubernetes/minikube/issues/1568

...