Kubernetes, фланелевые и выставляющие сервисы

У меня есть установка kubernetes, которая работает нормально, но я не могу предоставлять внешние службы . Я думаю, моя сеть настроена неправильно:

  • адреса служб Kubernetes: - service-cluster-ip-range = 172.16.0.1 / 16

  • конфигурация фланелевой сети: etcdctl get / test.lan / network / config {"Сеть": "172.17.0.0/16" }

  • настройка подсети докера: - bip = 10.0.0.1 / 24

  • IP-адрес узла: 192.168.4.57

У меня запущена служба nginx, и я попытался открыть это так:

[root@kubemaster ~]# kubectl get pods
NAME          READY     STATUS    RESTARTS   AGE
nginx-px6uy   1/1       Running   0          4m
[root@kubemaster ~]# kubectl get services
NAME         LABELS                                    SELECTOR    IP(S)           PORT(S)    AGE
kubernetes   component=apiserver,provider=kubernetes   <none>      172.16.0.1      443/TCP    31m
nginx        run=nginx                                 run=nginx   172.16.84.166   9000/TCP   3m

, а затем я открыл службу следующим образом:

kubectl expose rc nginx --port=9000 --target-port=9000 --type=NodePort
NAME      LABELS      SELECTOR    IP(S)     PORT(S)    AGE
nginx     run=nginx   run=nginx             9000/TCP   292y

Я ожидаю, что теперь я смогу добраться до контейнера nginx на IP-адресе hostnodes ( 192.168.4.57 ) - иметь Я неправильно понял сеть? Если да, то можно получить объяснение: (

Примечание: это на физическом оборудовании без балансировщика нагрузки, предоставляемого облачным провайдером, поэтому, я думаю, NodePort - единственный вариант, который у меня есть?

1
задан 4 July 2018 в 04:15
3 ответа

Я ожидаю, что теперь смогу добраться до контейнера nginx на IP-адресе hostnodes (192.168.4.57) - я неправильно понял сеть? Если у меня есть, можно получить объяснение: (

Ожидайте прочитать модуль на hostIP: NodePort, где вы можете найти порт узла службы с помощью:

kubectl get svc echoheaders --template '{{range .spec.ports}} {{. nodePort}} {{end}} '

Примечание. Это на физическом оборудовании без балансировщика нагрузки, предоставляемого облачным провайдером, поэтому, я думаю, NodePort - единственный вариант, который у меня есть? ] Вы можете развернуть контроллер входящего трафика, например: https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx или https://github.com/kubernetes/contrib/tree/master/service-loadbalancer

0
ответ дан 4 December 2019 в 06:44

Служба NodePort является наиболее распространенным решением для небольшого / локального кластера без операционной системы, и один и тот же порт будет доступен на всех узлах, на которых выполняются ваши задания (т.е., вероятно, не ваш главный , но рабочие узлы), на которых запущен kube-proxy .

Есть некоторый contrib / неочевидный код , который действует как LoadBalancer для небольших сетей, так что если вы хотите используйте type: LoadBalancer как локально, так и в облаке, вы можете получить примерно эквивалентную механику, если это важно.

Контроллеры Ingress становятся значительно более полезными по сравнению с NodePorts, когда вы хотите смешивать и сопоставлять сервисы (особенно HTTP-сервисы), предоставляемые вашим кластером на порт 80 или 443, и созданы специально для поддержки нескольких служб через одну конечную точку (и, возможно, один порт - сопоставлен с отдельными путями URI и т.п.). Контроллеры Ingress не так сильно помогают, когда доступ, который вам нужен, не основан на HTTP (например, служба на основе сокетов, такая как Redis или MongoDB, или, возможно, что-то особенное, что вы делаете)

Если вы интегрируете это в внутренний ИТ-проект, то многие коммерческие балансировщики нагрузки рекомендуют использовать конфигурации NodePort с их собственной технологией балансировки нагрузки и ссылаться на пул всех рабочих узлов в этой настройке. У F5 есть разумный пример этого в своей документации.

0
ответ дан 4 December 2019 в 06:44

Вам не нужно использовать NodePort, и вам не нужно использовать внешний балансировщик нагрузки. Просто выделите некоторые из узлов вашего кластера в качестве узлов балансировки нагрузки. Вы помещаете их в другую группу узлов, присваиваете им несколько меток: mynodelabel / ingress: nginx , а затем размещаете в этой группе узлов демон входящего потока nginx.

Наиболее важные параметры:

spec:
  restartPolicy: Always
  dnsPolicy: ClusterFirst
  hostNetwork: true
  nodeSelector:
    mynodelabel/ingress: nginx

и

      ports:
        - containerPort: 80
          hostPort: 80
        - containerPort: 443
          hostPort: 443

При желании вы можете испортить свои узлы балансировщика нагрузки, чтобы обычные модули не работали с ними и замедляли работу nginx.

0
ответ дан 4 December 2019 в 06:44

Теги

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