LoadBalancer не доступен снаружи кластера - PullRequest
0 голосов
/ 05 мая 2019

Для тестирования я создал Kubernetes на одном узле с помощью Virtualbox. Я создал один Pod для прослушивания через порт 4646, затем я создал LoadBalancer для этого Pod.

Файл Yaml для Pod:

apiVersion: v1
kind: Pod
metadata:
  name: simple-app
  labels:
    app: simple-app
spec:
  containers:
    ...
    name: test-flask-app
    ports:
    - containerPort: 4646

Файл Yaml для LoadBalancer:

apiVersion: v1
kind: Service
metadata:
  name: simple-app-lb
spec:
  type: LoadBalancer
  ports:
  - port: 88
    protocol: TCP
    targetPort: 4646
  selector:
    app: simple-app

Вывод команды kubectl get nodes -o wide:

NAME     STATUS   ROLES    AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
server   Ready    master   20h   v1.14.1   10.0.2.8      <none>        Ubuntu 18.04.2 LTS   4.15.0-48-generic   docker://18.6.2

Вывод команды kubectl get all

NAME             READY   STATUS    RESTARTS   AGE
pod/simple-app   1/1     Running   5          20h

NAME                    TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/kubernetes      ClusterIP      10.96.0.1      <none>        443/TCP        20h
service/simple-app-lb   LoadBalancer   10.98.241.39   <pending>     88:32319/TCP   20h

На другой виртуальной машине, расположенной в той же сети, я хотел бы получить доступ к LoadBalancer по IP-адресу машины с Kubernetes и по порту 88. Если я запускаю следующую команду, я получаю вывод ниже:

sergey@server2:~$ curl 10.0.2.8:88
curl: (7) Failed to connect to 10.0.2.8 port 88: connection refused

Но если я использую порт 32319, я получаю доступ:

sergey@server2:~$ curl 10.0.2.8:32319
{"msg":"superuser, Hello from GeoServer"}

Также я могу получить доступ, если я нахожусь на машине с Kubernetes:

sergey@server:~$ curl 10.98.241.39:88
{"msg":"superuser, Hello from GeoServer"}

По каким причинам я не могу получить доступ по ВНЕШНЕМУ IP и ПОРТУ?

Ответы [ 2 ]

2 голосов
/ 05 мая 2019

Под капотом службы Load Balancer также находится NodePort, поэтому вы можете подключиться к NodeIP: 32319. Подробнее об услугах NodePort можно прочитать здесь: https://kubernetes.io/docs/concepts/services-networking/service/#nodeport

Также вы должны увидеть, что ваш внешний IP-адрес LoadBalancer навсегда находится в состоянии ожидания, что означает, что реальный балансировщик нагрузки не был создан. Потому что вы не работаете в облаке и нет поставщика для балансировщика нагрузки. Таким образом, в вашем случае вы можете получить доступ к службе балансировки нагрузки только по ClusterIP: 88 с узлов Kube или по NodeIP: 32319 за пределами кластера Kubernetes.

0 голосов
/ 05 мая 2019

Балансировщик нагрузки в Kubernetes - это функция, которая создает балансировщик нагрузки на стороне провайдера облака. Так что, если ваши kubernetes не работают с облачным провайдером, таким как GCP, AWS или Azzure, это не создаст настоящий балансировщик нагрузки

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